C/C++ 您当前所在位置:首页 > C/C++ > 常用汇编指令(三)
常用汇编指令(三)
简介 在目前流行的编程语言下,还有更底层的语言,那就是汇编语言,当然还有更底层的机器语言。汇编语言由一条条指令组成,在分析软件的时候会经常和汇编打交道,所以掌握汇编指令是必须的,介绍几个常用汇编指令。
push指令
push指令是将数据压入堆栈中,并且还能将ESP的值减4。这里也不一定是减4,加多少要看你压入的数据宽度是多少,我们来试验一下。
首先我们看能不能压入一个8位的数据。
push al
我们可以看到报错,说明我们不能压入8位数据到堆栈中。
再试试16位。
push ax
可以看到push可以压入16位的数据。执行push ax后ESP的值减了2,说明并不是所有入栈ESP都是减4,这里就不截图了。
再验证一下能不能push32位数据
没有问题,执行后ESP的值减了4。
32位的内存和16位的内存也是一样
执行后ESP分别减4和减2,和寄存器一样不能操作8位的。
最后我们还可以push一个立即数,push的立即数不管多大或多小ESP都是减4。
pop指令
pop指令和push相反,push是将数据入栈,而pop就是将数据从栈中取出放到16位的寄存器或内存,或32位的寄存器或内存,并且ESP会加4或加2,加多少取决于pop后面窗口的宽度,如果pop后面是一个32位寄存器或内存,则ESP加4,pop后面是一个16位的寄存器或内存,则ESP加2。比较简单,就不截图了。
pushad指令
pushad指令很有用,它可以将8个32位寄存器一次保存到堆栈中。
为了很好的感受发生的变化,我将寄存器的值改成好认的值,执行pushad前我们看到的是现在的样子,注意ESP的值。
执行命令,看结果
可以看到寄存全部入了堆栈。
popad指令
本指令和pushad指令相反,将堆栈中的寄存器的值又恢复到寄存器中。
上一篇: 关闭网站响应头中PHP版本信息
下一篇: 标志寄存器
猜你喜欢
点击排行
热门推荐
随机展示
站点信息
- 上线时间:2020年05月30日
- 网站程序:自建框架
- 博客模板:今夕何夕
- 文章统计:43篇文章
- 评论统计:0条评论
- 留言统计:1条留言
- 统计数据:百度统计