王爽《汇编语言》综合研究实验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进行自动的增加,可以如下 

欢迎指正批评请教…… 

猜你喜欢

转载自blog.csdn.net/qungxue/article/details/6560585