关闭

ASM 02

366人阅读 评论(0) 收藏 举报

数据传送指令
数据传送指令分为:通用传送数据,地址传送数据,标志传送数据
DST表示操作数 SRC表示源操作数
1.数据传送数据
MOV,  MOVZX,  MOVSX,  XCHG,  PUSH,  PUSHA,  PUSHAD,  POPA,
POPAD
1-1MOV  目的操作数,源操作数
把源操作数传送到目的操作数
举例:01.MOV AX,BX         :将BX的内容传送到AX中
         02.MOV CL, 80H        :80H→CL
         03.MOV AL, [2000H]    :将EA为2000H,单元的值传送到AL中
1-2MOVSX 寄存器,寄存器/存储器
将源操作数传送到目的操作数中,当源操作数的位数少于目的操作数时,目的操作数的高位用源操作的符号位填补。此指令适用于有符号数的传送与扩展
1-3MOVEZX寄存器/存储器
与MOVSX功能基本相同,唯一区别,当源操作数的位数少于目的操作数位时,目的操作数的高位用0填补
举例01
   MOV DL,86H
   MOVSX  AX,DL    :86H扩展成FF86H送AX;
   MOVSX  ECX,DL   :86H扩展成FFFF FF86H送ECX;
   MOVZX  BX,DL    :86H扩展成0086H送BX;
举例02
   MOV DL,90H;
   MOVSX AX,DL; AX=FF90H
   MOVZX AX,DL; AX=0090H
   MOVSX ESI,DL; ESI=FFFFFF90H
   MOVZX ESI,DL; ESI=00000090H
 1.jpg

01

 2.jpg

02.MOV DL,90H

 3.jpg

03.AX=FF90H

 4.jpg

04.AX=0090H

 5.jpg

05.ESI=FFFFFF90H

 6.jpg

06.ESI=00000090H

1-4XCHG目的操作数,源操作数
把源操作数和目的操作数互换。说明:指令与MOV指令功能上的区别有两点,其一,该指令不允许使用立即数和段寄存器作为操作数;其二,该指令改变源操作数的内容
举例01

XCHG EAX,EBX

 7.jpg

 

 8.jpg

1-5.PUSH
该指令执行后SP的值将减4
  PUSH AL
  PUSH BH
  PUSH 100H
  PUSH EAX
  PUSH EBX
  PUSH DWORD PTR [EAX]
1-6.POP 目的操作数
将栈顶内容弹至目的操作数,先将SP所指单元也即堆栈顶的一个字数传送到目的操作数,并将SP的内容加4
举例
01 PUSH 123456
POP EAX
 9.jpg

 10.jpg

(ESP减4)
 11.jpg

(123456压栈)
 12.jpg

 

(弹出到EAX 并ESP恢复)
1-7.PUSHAD
将所有8个通用寄存器的内容顺序压入堆栈,8、PUSHAD,将 8 个 32 位通用寄存器全部入栈,入栈顺序 EAX,ECX,EDX,EBX,ESP,EBP,ESI,EDI,ESP的内容是执行指令 PUSHAD 之前的内容其中压入栈的ESP是该指令前ESP的值。执行该指令后,ESP值减32
1-8.POPAD
将当前堆栈内容顺序弹出,ESP也恢复原来的32
举例:
01.PUSHAD
   POAD
 13.jpg

01
 14.jpg

02.ESP减32
 15.jpg

02-1.8个寄存器全部入栈
 16.jpg

03.ESP加32
1-9.PUSHA
将 8 个通用寄存器全部进栈,进栈顺序为:AX,CX,DX,BX,SP,BP,SI,DI,然后 SP指针寄存减16,不过 SP入栈的内容是 PUSHA指令执行前的内容。
1-10.POPA
8 个通用寄存器全部出栈,堆栈指针寄存器不是堆栈中弹出的内容,而是加 16而得到的,虽然这样得到的值和从堆栈中弹出来的内容一样
2.地址传送指令LEA, LDS, LES, LFS, LGS, LSS
2-1.LEA(Load effective address)
有效地址送寄存器
格式:LEA REG,SRC
执行的操作:(REG)← SRC
举例:
01.  mov eax,111111
mov ecx,111111
lea ebx,[eax+ecx]
 17.jpg

01
 18.jpg

02.EAX,111111
 19.jpg

03.ECX,111111
 20.jpg

04.LEA传送EAX+ECX到EBX
2-2.LDS(Load DS with Pointer)
指针送寄存器和DS指令
格式:LDS REG,SRC
执行的操作:(REG)← (SRC)
        (DS)  ←(SRC+2)
把源操作数指定的4个相继字节送到由指令指定的寄存器及DS寄存器中。该指令常指定SI寄存器
2-3.LES  同 LDS,不过段寄存器是ES。
2-4.LFS  同 LDS,不过段寄存器是FS。
2-5.LGS  同 LDS,不过段寄存器是 GS。
2-6.LSS  同 LDS,不过段寄存器是SS。
3.位置传送指令
 21.jpg

3-1.LASH
将标志寄存器低8位送到AH包括SF,ZF,ZF,PF,CF。
3-2.SHAF
将(AH)送标志寄存器第8位(与LASH相反)
3-3.PUSHF
将标志寄存器的 EFLAGS低 16位内容入栈。与PUSH功能相似,特殊地方在于,压入堆栈的是标志寄存器的内容
3-4.PUSHFD
将标志寄存器EFLAGS的内容入栈
3-5.POPF
将栈顶的一个字弹出,并将它送到标志寄存器EFLAGS的低 16 位.与POP功能相似,特殊地方在于,淡出的堆栈内容是送到标志寄存器
3-6.POPFD
将栈顶的两个字弹出,并将它送到标志寄存器EFLAGS

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:9769次
    • 积分:117
    • 等级:
    • 排名:千里之外
    • 原创:2篇
    • 转载:7篇
    • 译文:0篇
    • 评论:1条
    文章分类
    文章存档
    最新评论