英特尔汇编程序

英特尔编写了 8086 汇编语言的规范,这是早期 8080,8008 和 4004 处理器的衍生产品。因此,他们编写的汇编程序会精确地遵循自己的语法。但是,这个汇编程序并没有被广泛使用。

英特尔将其操作码定义为零,一或两个操作数。双操作数指令被定义为 destsource 顺序,这与当时的其他汇编程序不同。但是有些指令使用隐式寄存器作为操作数 - 你只需知道它们是什么。英特尔还使用了前缀操作码的概念 - 一个操作码会影响下一条指令。

; Zero operand examples
NOP             ; No parameters
CBW             ; Convert byte in AL into word in AX
MOVSB           ; Move byte pointed to by DS:SI to byte pointed to by ES:DI
                ; SI and DI are incremented or decremented according to D bit

; Prefix examples
REP   MOVSB     ; Move number of bytes in CX from DS:SI to ES:DI
                ; SI and DI are incremented or decremented according to D bit

; One operand examples
NOT      AX     ; Replace AX with its one's complement
MUL      CX     ; Multiply AX by CX and put 32-bit result in DX:AX

; Two operand examples
MOV      AL, [0x1234] ; Copy the contents of memory location DS:0x1234 into AL register

英特尔还打破了其他汇编程序使用的惯例:对于每个操作码,发明了不同的助记符。这需要类似操作的微妙或明显不同的名称:例如,从内存加载LDM立即加载LDI。英特尔使用了一个助记符 MOV - 并期望汇编程序能够确定从上下文中使用哪个操作码。这会给程序员带来许多陷阱和错误,因为汇编程序无法直接了解程序员实际想要的东西……