英特尔汇编程序
英特尔编写了 8086 汇编语言的规范,这是早期 8080,8008 和 4004 处理器的衍生产品。因此,他们编写的汇编程序会精确地遵循自己的语法。但是,这个汇编程序并没有被广泛使用。
英特尔将其操作码定义为零,一或两个操作数。双操作数指令被定义为 dest
,source
顺序,这与当时的其他汇编程序不同。但是有些指令使用隐式寄存器作为操作数 - 你只需知道它们是什么。英特尔还使用了前缀操作码的概念 - 一个操作码会影响下一条指令。
; 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
- 并期望汇编程序能够确定从上下文中使用哪个操作码。这会给程序员带来许多陷阱和错误,因为汇编程序无法直接了解程序员实际想要的东西……