研究实验二 使用寄存器

研究实验二  使用寄存器

实验内容

研究在C语言中寄存器使用的一些问题,以及对main函数的一些初步理解。

实验环境

win7 、DOSBox、TC2.0

实验步骤

1.     编写程序ur1.c,编译、连接,生成ur1.exe。


2.     用Debug加载ur1.exe,用u命令查看ur1.c编译后的机器码和汇编代码。

        如果直接用u查看会发现如下情况:


 这与我们预期的是不一样的,因为程序是从main函数开始执行的,所以得先知道main函数在代码段中的偏移地址。

3.     用下面的程序打印出main函数在代码段中的偏移地址。


可以看到main函数的偏移地址是1fa

 

4.     根据步骤3得到的偏移地址,用u命令查看ur1.exe中的机器代码和汇编代码。


可以看到076A:01FD开始,所对应的就是编译、连接之后ur1.exe文件对应的机器代码和汇编代码。

这里提出的问题是:汇编代码开始处的“push bp mov bp,sp”和结尾处的”pop bp”怎么理解。

这是因为main函数也相当于汇编中的一个子程序,要在调用子程序时将栈顶位置保存,以便于程序能正确返回,但是栈顶指针sp不能当作偏移地址移动,所以要将sp赋给bp

5.     因为main函数后面有ret指令,以及对于上面问题的回答,要进一步验证我们的设想,编写程序ur2.c。


查看它的代码


可以看到,在调用f()函数时,即调用子程序时与1fa处一样,和main函数返回一样,所以可以得到main函数在汇编中确实是被当作子程序来处理的。

总结

        编写C语言程序,查看对寄存器的使用,在实验过程中发现对main函数的一些问题,通过观察汇编代码及编写另外的含有子程序的代码,得出main函数在汇编中是作为子程序被调用的,通过Debug加载程序,u命令查看机器代码和汇编代码,更直接的看到了程序对寄存器的使用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值