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

一 、冯·诺依曼计算机以及寄存器的操作指令

1.冯·诺伊曼计算机的结构

 

2.寄存器

 

 

 

 二、关于实验

1.实验的代码片段

2.汇编代码 通过main.s查看

 

3.整理过后的汇编程序

4.shell操作

关于实验的代码操作 没有什么问题 下面是对了解不够透彻的堆栈操作进行说明

5.main函数

将ebp的值=100压栈,ebp->100,esp->96

将esp的值赋给ebp,ebp->96,esp->96

esp值减4,ebp->96,esp->92

将7赋给esp当前所指位置

保存当前eip的值(23行),将函数 f 的第一条指令地址(9行)赋给eip,ebp->96,esp->88

 

eax+11=13+11=24(接着后面的结果)
将ebp的值赋给esp,ebp->96,esp->96,数据出栈,ebp->100,esp->100

 

 6.f函数

将当前ebp的值压栈,ebp->96,esp->88
将esp的值赋给ebp,ebp->88,esp->88
将esp的值减4,ebp->88,esp->84
将ebp+8后地址内所指数据(3)赋给eax,eax=3
将eax=3赋给esp当前所指位置
保存当前eip的值(15行),将函数shu第一条指令的地址(2行)赋给eip,esp减4,ebp->84,esp->76

 

 7.f函数

将ebp的值压栈,ebp->84,esp->76
将esp的值赋给ebp,ebp->72,esp->72
将ebp+8后地址内所指数据(3)赋给eax,eax=3
eax+1=3+10=13
数据出栈,将当前esp所指地址内的数据赋给ebp,esp加4,ebp->84,esp->76
返回第15行指令,ebp->84,esp->88

 

 

 

 三、总结

  通过对诺曼依体系结构的了解,加深对计算机工作的理解,通过分析汇编程序对x86指令的了解也更加深入。通过这次的学习还有实验,让我更加理解了mov,add,sub,leave,ret……这些指令用法以及对栈的影响,还了解了实验楼的用法。希望在以后的学习中能越用越熟练,学习到更多的知识。

注:

寄存器寻址:movl %eax,%edx  相当于edx=eax

立即寻址:movl $0x123,%edx   相当于edx=0x123

直接寻址:movl 0x123,%edx    相当于*(int*)0x123

间接寻址:movl (%ebx),%edx 相当于edx=*(int*)ebx

变址寻址:movl 4(%ebx),%edx相当于edx=*(int*)(ebx+4)

eax为累加寄存器,ebx为基址寄存器,ecx计数寄存器,edx数据寄存器

储存指令的寄存器eip,和堆栈的指针寄存器esp,ebp。

posted on 2020-10-18 14:38  20209312-张伟国  阅读(188)  评论(1编辑  收藏  举报

导航