简单实现printf函数

记得以前看谭老头的书自学C语言,着实吃了不少苦头(主要是爱钻牛角尖), 翻开第一章就来了个printf函数,倒不是它很难用,而是觉得它很神奇, 不神奇吗, 我当时很好奇为什么你让它printf一行字符串,它就能打印出来, 太智能了!!!

后来又学了汇编,顿时觉得来劲了,神气个啥呀,看老孙也给你写一个:


void myprintf(char *,...);
main()
{
myprintf("hello,the character is %c and %c,the number is %d.",'a','b',123);
}

void myprintf(char *s,...)
{
char buffer[5]; /*存放转换为assii码的数字字符*/
int bufint; /*存放通过参数传递来的int型数据*/
int bufn=0; /*存放int型数据位数*/
int n=0; /*屏幕显示字符位置*/
int ns=0; /*参数位置*/
while (*s!=0)
{
if(*s!='%')
{
*(char far *)(0xb8000000+160*10+10+n+n)=*s;
n++;
}
else if(*(s+1)=='c')
{
*(char far *)(0xb8000000+160*10+10+n+n)=*(char *)(_BP+6+ns);
s++;
ns=ns+2;
n++;
}
else if(*(s+1)=='d')
{
bufn=0;
bufint=*(int *)(_BP+6+ns);
while(bufint/10!=0)
{
buffer[bufn]=bufint%10;
bufn++;
bufint/=10;
}
buffer[bufn]=bufint;
for(;bufn>=0;bufn--)
{
*(char far *)(0xb8000000+160*10+10+n+n)=buffer[bufn]+0x30;
n++;
}
s++;
ns=ns+2;

}
s++;
}
}

Related

Comments (1)

猫猫的园地June 19th, 2009 at 12:45 pm

很强大!

[Reply]

Leave a comment

Your comment