王爽《汇编语言》综合研究实验5 (3)

实现一个简单的printf函数,只需支持"%c、%d"即可

 

这边先看一下C中printf函数的简单例子的汇编代码,这边我们用综合研究中所搭建的简介C开发环境写一个简单的printf例子:

生成相应的printft.exe可执行文件,在cmd下用debug进行调试,得到对应的汇编指令如下:

printf函数本身的汇编指令太长,这边我们重点放到printf函数和参数的确定和储存还有传递关系,我们知道函数内部参数都是放入堆栈中,但是上面代码中的MOV AX,0194是干嘛用的呢,是不是为了确定参数的个数呢,还是什么,大家可以探讨一下……

过了几天……

现在明白MOV AX,0194的含义了,因为我们在printf参数中,由一个参数定义为char *,这个0194就是我们定义的char *字符串的相对于数据段的偏移地址。实在是对不起之前的同仁了,之前没有把自己写的printf函数放上去,是因为还没有写出来,这次放上去请原谅:

这边的代码由一个问题是,如果,在一个程序中多次的调用printf的话,那么之后的printf输出来的数据就会覆盖前面的数据,并且,我们默认是显示在cmd模式下的第10行,第40列的,这边因为考虑的是跟汇编似乎没有多大的关系,所以没有在继续完整下去,但是如果有兴趣的阅览者可以将代码进行改善,给个建议:可以将showp定义成静态的全局变量,只在调用printf的时候,showp进行自动的增加,可以如下 

欢迎指正批评请教…… 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值