tc2.0环境下的C语言研究-简单使用寄存器并打印函数的偏移地址

在c语言中使用变量的目的是:为了编程时存储数据。所以如果有一种方法可以让我们不用变量就可以存储数据,我们就不再需要变量了。

在汇编中存储数据,我们可以利用AX、BX等寄存器和内存空间,在C语言中也是类似的

分别有:_AX、_BX、_CX、_DX、_BP、_SP、_CS、_DS、_SS、_ES等等

这些分别对应了我们在汇编学习到的寄存器。

编写一个url.c的程序
程序如下:
Main()
{
_AX=1;
_BX=1;
_CX=2;
_AX=_BX+_CX;
_AH=_BL+_CL;
_AL=_BH+_CH;
}
为了用debug查看汇编代码,所以必须知道main函数的入口地址,如下程序可以实现打印main函数的偏移地址

Main()
{
Printf(“x%\n”,main);//结果为0x01fa
}
通过u cs:1fa可以得到看到如下汇编代码

-u cs:1fa
0CC3:01FA B80100 MOV AX,0001
0CC3:01FD BB0100 MOV BX,0001
0CC3:0200 B90200 MOV CX,0002
0CC3:0203 8BC3 MOV AX,BX
0CC3:0205 03C1 ADD AX,CX
0CC3:0207 8AE3 MOV AH,BL
0CC3:0209 02E1 ADD AH,CL
0CC3:020B 8AC7 MOV AL,BH
0CC3:020D 02C5 ADD AL,CH
0CC3:020F C3 RET

可以有ret推测:c语言将函数实现为汇编语言中的子程序;经过大量实例可以看出,c语言将函数实现为汇编语言中的子程序的推测是成立的。

进一步推想:C语言将函数实现为汇编语言的子程序,从C语言的层面来看,main函数是一个程序的起始入口点,但实际上,可执行文件即这个.exe程序的入口点并不是main,

是谁调用了main函数呢?是C0S.obj,c0s.obj为程序的执行初始化了环境,比如数据段与代码段的建立等,然后调用main函数执行所需要完成的规定程序动作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值