英特爾彙編程式

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