英特爾彙編程式
英特爾編寫了 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
- 並期望彙編程式能夠確定從上下文中使用哪個操作碼。這會給程式設計師帶來許多陷阱和錯誤,因為彙編程式無法直接瞭解程式設計師實際想要的東西……