MOVZX指令
MOVZX指令将源操作数的内容复制到目的操作数中,并将该值零扩展至16位或32位。该指令仅适用于无符号整数。
Movzx r32,r/m8
Movzx r32,r/m16
Movzx r16,r/m8
mov bx,10001111b
movzx ax,bl # ax = 00000000 10001111b
mov bx,0A69Bh
movzx eax,bx # eax = 0000A69Bh
MOVSX指令
MOVSX指令将源操作数的内容复制到目的操作数中,并将该值符号扩展至16位或32位。该指令仅适用于有符号整数。
Movsx r32,r/m8
Movsx r32,r/m16
Movsx r16,r/m8
mov bx,10001111b
movsx ax,bl # ax = 11111111 10001111b
mov bx,0A69Bh
movsx eax,bx # eax = FFFFA69Bh
LAHF指令
LAHF指令将EFLAGS寄存器的低字节复制到AH寄存器,被复制的标志包括:符号标志(SF),零标志(ZF),辅助进位标志(AF),奇偶标志(PF),进位标志(CF)。
lahf # 状态标志送ah
SAHF指令
SAHF指令复制AH寄存器的值至EFLAGS寄存器的低字节,被复制的标志包括:符号标志(SF),零标志(ZF),辅助进位标志(AF),奇偶标志(PF),进位标志(CF)。
mov ah,saveflags # 保存的标志送ah
sahf # 复制标志至EFLAGS寄存器
XCHG指令
XCHG指令交换两个操作数的内容,不接受立即数操作数。
XCHG reg,reg
XCHG reg,mem
XCHG mem,reg
xchg ax,bx # 16位寄存器交换
xchg ah,al # 8位寄存器交换
xchg var1,bx # 16位内存操作数和16位寄存器交换
xchg eax,ebx # 32位寄存器交换
若要交换两个内存操作数,则要和mov指令结合使用
mov ax,val1
xchg ax,val2
mov val1,ax