码迷,mamicode.com
首页 > Web开发 > 详细

汇编笔记四【标识寄存器】 by:凉游浅笔深画眉 / Net7Cracker

时间:2016-10-07 20:08:00      阅读:155      评论:0      收藏:0      [点我收藏+]

标签:

一、push xxxxx指令和ESP的关系

  ESP的值,是由Push指令后面的操作数的宽度决定的。也就是xxxxx的宽度,假如Puh后面跟的是一个立即数,由于整数是四字节,所以esp-4。

  假如Push 后面跟的是容器,那么就看这个容器的宽度。

  例:假如目前ESP的值是FFFFFFFF

    当PUSH 1 这条指令执行后,ESP=FFFFFFFB,因为1是个立即数,只要Push后面是立即数,那么ESP的值就会减4

  例:假如目前ESP的值是FFFFFFFF

    当PUSH ax 这条指令执行后,ESP=FFFFFFFD,因为AX是个寄存器,该寄存器一共是16位,也就是2个字节,所以ESP的值就会减2

  例:假如目前ESP的值是FFFFFFFF

    当PUSH eax 这条指令执行后,ESP=FFFFFFFB,因为EAX是个寄存器,该寄存器一共是32位,也就是4个字节,所以ESP的值就会减4

  例:假如目前ESP的值是FFFFFFFF

    当PUSH DWORD PTR DS:[XXXXXX] 这条指令执行后,ESP=FFFFFFFB,因为DWORD宽度为4个字节,所以ESP的值就会减4

  例:假如目前ESP的值是FFFFFFFF

    当PUSH WORD PTR DS:[XXXXXX] 这条指令执行后,ESP=FFFFFFFD,因为DWORD宽度为2个字节,所以ESP的值就会减2

 

二、PUSHAD指令

  PUSHAD指令压入32位寄存器,其入栈顺序是:EAX,ECX,EDX,EBX,ESP,EBP,ESI,EDI .

      也就是将8个通用寄存器EAX,ECX,EDX,EBX,ESP,EBP,ESI,EDI 全部压入堆栈,作用是保护堆栈。

  当你执行完毕PUSHAD指令后,可以对寄存器进行任意操作,操作完毕后,只需要再执行POPAD指令,即可还原刚才压入的8个通用寄存器的值。

汇编笔记四【标识寄存器】 by:凉游浅笔深画眉 / Net7Cracker

标签:

原文地址:http://www.cnblogs.com/fuhua/p/5936394.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!