一、实验一
1.实验内容
(1)在Shell命令下常用的文本编辑器是VIM,打开文本编辑器VIM编辑main.c文件。
(2)编辑并保存main.c文件。
(3)直接编译可使用一下命令,生成目标文件a.out,它可以执行但执行效果没有任何输出信息。可以通过“echo $?”命令来查看这个程序的返回值。
(4)如果想把main.c编译成一个汇编代码,那么可以使用如下命令:
gcc -S -o main.s main.c -m32
上述命令产生一个汇编代码文件main.s,打开main.s。
(5)在VIM中,通过“g/\.s*/d”命令即可删除所有以“.”打头的字符串,就获得了“干净”的汇编代码。
二、实验分析
—从main程序开始执行
—ebp入栈
—把ebp值赋予给esp
—将esp值减4,指向下一存储空间(栈单位存储空间)
—将数值8存在esp所指的存储空间中
—调用f函数
—ebp入栈
—把ebp值赋予给esp
—将esp减4,指向下一地址空间
—将ebp加8所指向的存储空间内的内容赋予给累加寄存器eax
—将eax的内容赋予给esp
—调用g函数
—对ebp进行压栈
—把ebp值赋予给esp
—将ebp加8所指向的存储空间内的内容赋予给累加寄存器eax
—将eax储存的数值加11
—出栈
—返回main函数
—返回到f函数的leave命令
—撤销函数堆栈
—返回到主函数的leave命令
—将eax储存的数加1
—撤销函数堆栈
—返回程序运行值
总结:
1. 本周通过学习计算机汇编的基础知识和基本原理,理解到了计算机的基本原理存储程序和程序控制。
2. 预先要把指挥计算机如何进行操作的指令序列(称为程序)和原始数据通过输入设备输送到计算机内存贮器中。在书写或者解读汇编程序的时候,一定要关注每一条指令中规定的计算机取数的地址,进行了什么操作,然后送到什么地址去等步骤。