实验一
1.实验步骤
- 使用
vi main.c
命令打开文本编辑器VIM,将C语言代码复制保存。
gcc main.c
编译,会生成一个目标文件a.out,执行之后没有输出信息,通过echo $?
查看程序返回值。
- 用
gcc -S -o main.s main.c -m32
把main.c编译成一个汇编代码,将多余的辅助信息去除后得到汇编代码。
2.实验分析
3.实验总结
此实验主要是通过汇编一个简单的C语言程序并分析其汇编指令执行过程来理解“计算机究竟是如何工作的”,在指令执行过程中,很重要的一个寄存器就是EIP指令指针寄存器,它会自动地指向下一条要执行的指令地址。堆栈操作过程中非常重要的两个寄存器就是EBP基址指针寄存器和ESP栈顶指针寄存器,所有出栈入栈的操作都要靠它们来完成。汇编语言是和机器语言类似的语言,能充分体现出计算机执行指令的逻辑。计算机先将程序编译成计算机能读懂的语言,再一条条取指令来执行,直至指令执行完毕。
问题及解决
1.变址寻址
Q:对movl 8(%ebp),%eax
指令的不理解
A:这是变址寻址,即在间接寻址的基础上,在原地址上加一个立即数8,相当于ebp的内容加上8这个地址里面的内容赋给eax。
2.EIP寄存器
Q:既然EIP是自动加1,执行下一条指令,那它是什么时候执行的呢?在当前指令还未结束的时候?
A: