MASM在默认情况下只汇编16位8086处理器的指令;如果需要使用80186及以后处理器新增的指令,必须使用处理器选择伪指令,如下表所示。
例如,当源程序中使用了80286新增的指令时,应该在程序中加上.286或.286P伪指令;若想利用32位寄存器完成32位操作,则必须加上.386及以上处理器的选择伪指令。
处理器选择伪指令
伪指令
|
功能
|
---|---|
.8086
|
仅接受8086指令(默认状态)
|
.186
|
接受80186指令
|
.286
|
接受除特权指令外的80286指令
|
.286P
|
接受全部80286指令,包括特权指令
|
.386
|
接受除特权指令外的80386指令
|
.386P
|
接受全部80386指令,包括特权指令
|
.486
|
接受除特权指令外的80486指令,包括浮点指令
|
.486P
|
接受全部80486指令,包括特权指令和浮点指令|注:
|
.8087
|
接受8087数学协处理器指令
|
.287
|
接受80287数学协处理器指令
|
.387
|
接受80387数学协处理器指令
|
.No87
|
取消使用协处理器指令
|
.586
|
接受除特权指令外的Pentium指令
|
.586P
|
接受全部Pentium指令
|
.686
|
接受除特权指令外的Pentium Pro指令
|
.686P
|
接受全部Pentium Pro指令
|
.MMX
|
接受MMX指令
|
.K3D
|
接受AMD处理器的3D指令
|
.XMM
|
接受SSE,SSE2和SSE3指令
|
注:.586 / .586P由MASM6.11引入;
.686 / .686P / .MMX由MASM6.12引入; .K3D由MASM6.13引入; .XMM由MASM6.14引入,MASM6.15支持SSE2指令,MASM8.0支持SSE3指令。 |
另外,书写.386及以后的处理器选择伪指令需要留心其位置,如果书写在存储模型 MODEL指令之后,该程序将默认采用实方式和虚拟方式使用的16位段(默认是16位地址
和操作数长度);如果书写在存储模型MODEL指令之前,该程序将默认采用保护方式使用 的32位段(默认是32位地址和操作数长度)。