MOVZX、MOVSX、LAHF、SAHF、XCHG指令

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

你可能感兴趣的:(MOVZX、MOVSX、LAHF、SAHF、XCHG指令)