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

 

posted @ 2018-01-31 22:46  lxxhack  阅读(374)  评论(0)    收藏  举报