Asembler x86/Łączenie z językami wysokiego poziomu/Wstawki

Przedstawiam sposób wprowadzania wstawek asemblerowych do języków wysokiego poziomu. Przykładowa funkcja w C/C++:

void ByteToHalfByte(BYTE* buf, int pos, BYTE byte_data)
{
        buf[pos] = (byte_data >> 4);
        buf[pos+1] = (byte_data & 0x0F);
}

Realizacja w asemblerze jako wstawka w kod C/C++:

void ByteToHalfByte(BYTE* buf, int pos, BYTE byte_data)
{
        asm
        {
                mov al, byte_data
                mov ah, al
                shr al, 04h
                and ah, 0Fh
                mov ecx, buf
                mov edx, pos
                mov [ecx+edx], al
                mov [ecx+edx+0x01], ah
        }
}

Jest to składnia Intel, stosowana w kompilatorach Microsoftu i Borlanda. W GCC stosuje się notację AT&T.