2020-2021-1 20209301《Linux内核原理与分析》第二周作业

实验一

1.实验步骤

  1. 使用vi main.c命令打开文本编辑器VIM,将C语言代码复制保存。
  2. gcc main.c 编译,会生成一个目标文件a.out,执行之后没有输出信息,通过echo $?查看程序返回值。
  3. 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:

posted @ 2020-10-17 17:09  20209301黄宇欣  阅读(148)  评论(0编辑  收藏  举报