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地址放入 CXCX 最终是以 0x1234 还是 0x0102(或其他什么)?事实证明,CX0x1234 结束 - 如果你想要地址,你需要使用 OFFSET 说明符

             MOV     AX, [Symbol]      ; Contents of Symbol
             MOV     CX, OFFSET Symbol ; Address of Symbol