2020-2021-1 20209306 《linux内核原理与分析》第二周作业
2024-08-26 04:06:08
一、实验一内容及分析
1.实验一内容过程截图
2.实验一完成后收获
可以看到汇编代码中出现了eax、esp、ebp。eax是累加寄存器,esp是堆栈指针寄存器,ebp是基指针寄存器。汇编代码中用到了movl指令和pushl指令,
其中movl %esp %ebp
是把寄存器%esp中的内容放到%ebp中。相当于C语言代码的ebp = esp
。
另外pushl %ebp
就是把ebp寄存器的值压倒堆栈栈顶。这就与上面的代码组成了保存和恢复的过程。
二、学习linux《庖丁解牛》第一章“计算机工作原理”遇到的问题和学习收获
1.没有正确理解“值”的含义:
pushl指令包含两个动作,其中第一步将寄存器的值减4,学习中没有正确理解值减4的含义,经过学习和同学的指导后,得知“值”和“字节”关系,1值是8字节,pushl指令是将寄存器值压倒堆栈栈顶,因此在32位中值应减4.
2.没有正确理解间接寻址的含义:
在寄存器上加一个小括号,例如将%esp变为(%esp),加括号指将其表示为其所指向的内存地址,若放在movl指令后的第一个代码,则表示将这个内存地址所存储的数据放到后面的寄存器中,若放在movl指令的后面的第二个代码,则表示把前面寄存器的值放到间接寻址寄存器所指向的地方。
3.学习到的新指令:movl、pushl、popl、call、ret。
最新文章
- Oracle trunc()函数的用法
- Apache 打开网页的时候等待时间过长的解决方案
- HTTP Client工具类
- 原子操作--ARM架构
- VS2012下配置OpenCV2.4.5
- javascript引擎工作原理
- Oracle存储过程单步调试方法
- hdu 4714 树形DP
- [改善Java代码]易变业务使用脚本语言编写
- 使用ServiceStackRedis链接Redis简介
- NetBeans使用技巧记录
- linux管理员
- Selenium WebDriver多层表单切换
- javascript如何创建一个换行节点
- python基础教程(十)
- Linux学习(十三)du、df、fdisk磁盘分区
- centos6.7 配置外网端口映射
- 原生JS实现随着鼠标滚动到元素位置触发对应css3动画,简单易用滚动监测
- u-boot移植(五)---代码修改---时钟修改、SDRAM
- Java如何替换所有指定(出现)的字符串?