汇编基础06:数据传送指令

Catalogue
  1. 1. 汇编基础06:数据传送指令
    1. 1.1. MOV指令
    2. 1.2. MOVZX
    3. 1.3. MOVSX
    4. 1.4. LAHF
    5. 1.5. SAHF
    6. 1.6. LEA指令
    7. 1.7. XCHG指令

汇编基础06:数据传送指令

MOV指令

格式:MOV OPDR1,OPDR2

功能:将一个源操作数传送到目的操作数中

OPDR1为目的操作数,可以使寄存器、存储器、累加器

OPDR2为源操作数,可以使寄存器、存储器、累加器、立即数

操作数位数需要相同

示例:

1
2
3
4
5
6
7
8
9
.586
.MODEL flat, stdcall
.code
main proc
mov eax ,1
mov ebx ,eax
mov eax ,eax
main ENDP
END main

mov指令有这么五种情况

1
2
3
4
5
mov reg ,reg
mov mem ,reg
mov reg ,mem
mov mem ,imm
mov reg ,imm

从内存存到内存需要一次中转

1
2
mov reg ,mem
mov mem ,reg

把低位的值赋给高位的寄存器

1
2
3
4
mov reg32 ,reg 16
;mov eax ,cx
mov eax ,FFFFFFFF ;初始化
mov ax ,cx ;赋值

MOVZX

mov进行全0扩展和数据传送

会把位数不够的值进行0填充(二进制)

1
2
mov eax,cx;正常会出错
movzx eax,cx

MOVSX

填充1(二进制),类似movzx

LAHF

把flag复制到ah里

1
lahf

SAHF

把ah复制到flag里

LEA指令

有效地址传送指令

格式:LEA OPDR1,OPDR2

功能:将源操作数给出的有效地址传送到制定寄存器中

OPDR1必须是寄存器

将OPDR2的内存地址给了OPDR1

示例:

1
2
3
4
5
6
7
8
.586
.MODEL flat, stdcall
.code
main proc
lea eax ,dword ptr ss:[esp-4]
mov eax ,eax
main ENDP
END main

XCHG指令

数据交换指令

格式:XCHG OPDR1, OPDR2

功能,两个操作数的值互换

只有内存和寄存器参与

示例:

1
2
3
4
5
6
7
8
.586
.MODEL flat, stdcall
.code
main proc
xchg eax ,dword ptr ss:[esp-4]
mov eax ,eax
main ENDP
END main