20150512_综合研究二_李筝一、研究过程:
1. 在tc中编写程序代码,使用debug直接加载ur1.exe
Main函数的段地址很有可能是0B33H
2. 用书中说的打印main的方法,找到main代码的偏移地址是1faH
3. 所以我试着用u命令查看0B33:01fa
额。。。好吧 我又很不好意思地猜对了。。。段地址。。。。。。。。。。。。
4. 一开始的寄存器是这个状态
跳过0B33:0000~0B33:01f9这部分代码,我们直接执行到0B33:01fa之前,寄存器是这样的:
5. 后面的过程正常执行,注意_AX=_BX+_CX的实现...
一、研究过程:
1. 在tc中编写程序代码,使用debug直接加载ur1.exe
Main函数的段地址很有可能是0B33H
2. 用
中说的打印main的方法,找到main代码的偏移地址是1faH
3. 所以我试着用u命令查看0B33:01fa
额。。。好吧 我又很不好意思地猜对了。。。段地址。。。。。。。。。。。。
4. 一开始的寄存器是这个状态
跳过0B33:0000~0B33:01f9这部分代码,我们直接执行到0B33:01fa之前,寄存器是这样的:
5. 后面的过程正常执行,注意_AX=_BX+_CX的实现是先将MOV _AX,_BX,然后ADD _AX,_CX的。
6. 最后尾ret返回的时候,返回到了0b33:011d处(在main函数的前面)执行,将ax入栈,然后又调用0b33:0215处(在main函数的后面)子程序,中间空了0214处的一个ret。另外0215处的程序还调了0194、0196处(main的前面)的程序。
(额。。。迫切的想知道main函数前前后后到底是多大的坑。。。。)
7. 验证c语言将函数实现为汇编语言中的子程序。
观察汇编代码我们发现,main函数的开始有push bp和mov bp,sp,main函数的结束有ret。
f函数的开始有push bp和mov bp,sp,f函数的结束有ret,二者相同。所以main函数被看做汇编中的子程序,另外,main函数调用f函数时,使用了call命令。所以可以进一步肯定:C语言将函数实现为汇编语言中的子程序。
二、总结过程中遇到的问
main函数的段地址
通过debug模式下使用完u命令之后定位到的默认的段地址,猜测得出main函数的段地址。
三、未解决的问题
1.Main函数最后尾ret返回的时候,返回到了0b33:011d处(在main函数的前面)执行,将ax入栈,然后又调用0b33:0215处(在main函数的后面)子程序,中间空了0214处的一个ret。另外0215处的程序还调了0194、0196处(main的前面)的程序。
(额。。。迫切的想知道main函数前前后后到底是多大的坑。。。。)
2..tc文件和.tcp文件分别是干什么的?配置文件,具体呢?
四、研究体会
在学习汇编的时候,我一直默认子程序就是函数(觉着就是一回事儿,司空见惯),但说到问题的本质,这次我体会到了子程序是函数的实现方式。这次的研究学习,让我把曾经飘飘然的c语言落实到了具体的机器中,感觉非常靠谱!
本文档为【20150512_综合研究二_李筝】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑,
图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。