Skip to content

MASM 指令和函数

MOVSX、MOVZX

MOVZX:复制尺寸较小的操作数到尺寸较大的操作数 - 不看符号,直接高位补0,低位赋值 MOVSX:符号扩展传送指令,最高位循环填充所有扩展位 - 先看符号,高位正号全补0、负号全补1,然后低位赋值

.data
    var1 BYTE 0A0h
.code
    movzx eax,var1 ;零扩展:EAX = 000000A0h
    movsz ebx,var1 ;var1二进制最高位为1,所以符号扩展:EBX = FFFFFFA0h

XCHG指令

该指令可以交换两个操作数的内容

XCHG reg,reg
XCHG reg,mem
XCHG mem,reg

NEG、NOT指令

  • NEG:把操作数按位取反加一 (可以用来求一个数的相反数)
  • NOT:把操作数按位取反
MOV AL 77
NEG AL(计算后的AL的结果为-77)
;NOT AL(计算后的AL的结果为-78)
.data 
        var DWORD 1000h
.code
       neg var;在对 var 执行 NEG 操作后,其十六进制值是 FFFFF000h

OFFSET指令

在MASM32的32位程序中,应该是这样的:

.data
    var1 DWORD 0
.code
    mov eax, OFFSET var1 ; EAX 存储 var1 的偏移地址,占用 4 字节