实验11_程序的机器级表示_过程_实验报告.doc

实验11_程序的机器级表示_过程_实验报告.doc

ID:58427197

大小:187.00 KB

页数:7页

时间:2020-09-03

实验11_程序的机器级表示_过程_实验报告.doc_第1页
实验11_程序的机器级表示_过程_实验报告.doc_第2页
实验11_程序的机器级表示_过程_实验报告.doc_第3页
实验11_程序的机器级表示_过程_实验报告.doc_第4页
实验11_程序的机器级表示_过程_实验报告.doc_第5页
实验11_程序的机器级表示_过程_实验报告.doc_第6页
实验11_程序的机器级表示_过程_实验报告.doc_第7页
资源描述:

《实验11_程序的机器级表示_过程_实验报告.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、浙江大学城市学院实验报告课程名称计算机系统原理实验实验项目名称实验十一程序的机器级表示——过程学生姓名专业班级学号实验成绩指导老师(签名)日期注意:l务请保存好各自的源代码,已备后用。l请把作业同时上传到BB平台和FTP。l文件名为:学号_姓名_日期_实验几,如_姓名__实验01lftp://10.66.28.222:2007huommupload一、实验目的:了解IA32指令系统的常用指令,了解Linux汇编语言的基本语法、汇编语言的编写、调试技巧。二、实验内容:1、阅读给出test11_1.c以及对应的反汇编代码,为汇编代码添加

2、注释,并画出函数调用前后的栈帧结构图。2、阅读给出test11_2.c以及对应的汇编代码,为汇编代码添加注释,并补充完整c程序源码。三、实验步骤:1、阅读给出test11_1.c以及对应的反汇编代码,为汇编代码添加注释,并画出函数调用前后的栈帧结构图。指令注释:::55push%ebp#:89e5mov%esp,%ebp#:53push%ebx#:8b5508mov0x8(%ebp),%edx#b:8b4d0cmov0xc(%ebp),%ecx#e:8b1amov(%edx),%ebx#:8b01mov(%ecx

3、),%eax#:8902mov%eax,(%edx)#:8919mov%ebx,(%ecx)#:01d8add%ebx,%eax#:5bpop%ebx#:5dpop%ebp#a:c3retb:b:55push%ebp#c:89e5mov%esp,%ebp#e:83ec18sub$0x18,%esp#:c745fc7b000000movl$0x7b,0xfffffffc(%ebp)#:c745f8c8010000movl$0x1c8,0xfffffff8(%ebp)#f:8d45f8lea0xfffffff8(%ebp

4、),%eax#:89442404mov%eax,0x4(%esp)#:8d45fclea0xfffffffc(%ebp),%eax#:890424mov%eax,(%esp)#c:e8c3ffffffcall#:8b55fcmov0xfffffffc(%ebp),%edx#:2b55f8sub0xfffffff8(%ebp),%edx#:0fafc2imul%edx,%eax#a:c9leave#b:c3ret#调试过程及结果解释(截图):函数栈帧结构图:调用swap_add之前:EBP123caller栈帧ca

5、ller栈帧456&456&123返回调用swap_add过程当中:EBP123caller栈帧caller栈帧456&456&123返回EBP返回swap_add栈帧2、(选做)1)为汇编代码每行添加注释;fun存储在被调用者保存寄存器%ebx中的值是什么?fun:pushl%ebp#movl%esp,%ebp#pushl%ebx#subl$4,%esp#movl8(%ebp),%ebx#movl$0,%eax#testl%ebx,%ebx#test指令的作用:两个操作数按位与,根据与的结果设置相应的标志位,但是相与的结果并不保留

6、。je.L4#movl%ebx,%eax#shrl%eax#movl%eax,(%esp)#callfun#movl%ebx,%edx#andl$1,%edx#leal(%edx,%eax),%eax#.L4:addl$4,%esp#popl%ebx#popl%ebp#ret#2)填写上述c代码中缺失的表达式;intfun(unsignedx){if(____x==0______)return_____0___;unsignedz=_____Y/2_____;intresult=fun(z);return____result+x&1

7、______;}3)描述fun函数的功能;求(x+1)/24)调试验证理解:四、思考题(必做)1)函数调用时,实参存储在哪个函数的栈帧中?函数调用时的内存分析(为即将调用的函数准备参数)mov%ebp+偏移,%eax将参数传到eaxmov%eax,%esp+偏移将参数放到当前空间。sub$18,%ebp#将栈底指针向下移动以存放参数和变量。(call保存函数执行现场)call%eip相当于指令:push%eipmovaddr,%eip(保存栈的相关指针)push%ebp#保存栈顶。mov%esp,%ebp#将栈底赋给栈顶。 (将返回

8、值放入eax中,供调用函数读取)mov返回变量地址,%eax(还原栈指针,释放被调用函数的内存空间。)leave相当于一下指令:mov%ebp,%dsppop%ebp(恢复调用前的现场)ret相当于一下指令:~callpop%eip/

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。