Microsoft Assembler - MASM
鉴于 8086/8088 用于 IBM PC,而操作系统通常来自微软,微软的汇编程序 MASM 多年来一直是事实上的标准。它严格遵循英特尔的语法,但允许一些方便但松散的语法(事后看来)只会导致代码中的混淆和错误。
一个完美的例子如下:
MaxSize EQU 16 ; Define a constant
Symbol DW 0x1234 ; Define a 16-bit WORD called Symbol to hold 0x1234
MOV AX, 10 ; AX now holds 10
MOV BX, MaxSize ; BX now holds 16
MOV CX, Symbol ; ????
最后的 MOV
指令是否将 Symbol
的内容放入 CX
,或将 Symbol
的地址放入 CX
?CX
最终是以 0x1234
还是 0x0102
(或其他什么)?事实证明,CX
以 0x1234
结束 - 如果你想要地址,你需要使用 OFFSET
说明符
MOV AX, [Symbol] ; Contents of Symbol
MOV CX, OFFSET Symbol ; Address of Symbol