masm的使用心得
一、如果一个十六进制操作数大于对应位所能表示的最大正数,则要加前导零。
例如:DB 55,AAH
masm会把AAH当做一个符号,所以会报错,正确写法是DB 55,0AAH
二、JMP远跳转指令不支持段为立即数
例如:JMP 7C0H:0
解决方法是定义一个段
SEGBIOS SEGMENT AT 7C0
BIOS LABLE BYTE
SEGSIOS ENDS
JMP FAR PTR BIOS
三、assume的作用
之前一直以为assume伪指令没什么用,其实不然,它可以避免masm产生多余的段超越指令
比如:
MOV AX,CS
MOV DS,AX
LGDT FWORD PTR GDT
如果标号GDT出现在代码段中,而LGDT指令默认以DS为段址,masm不会理会前两条指令,会自动在指令前加上CS段超越指令,为了
避免产生多余的指令,解决方法就是在指令前加ASSUME ds:@code
浙公网安备 33010602011771号