void NewPrintf(char *formats,...);
main()
{
NewPrintf("%d %d %c%c%c%c",main,2009,'a','b','c','d');
}
void NewPrintf(char *fmt,...)
{
int state,i,m,n,x,duffer[10];
x=n=m=i=state=0; /* i在屏幕的位置,state判断%后的状态,m在参数的位置 */
for (n=0;n<10;++n)
duffer[n]=0; /* 初始化数组 */
...
- [游客] 楼主写的挺好的,刚好解决我一个问题,谢谢了 07/08 23:57
- [keyia] 重新作了修改,可以正确显示10进制了;不过又发现新的问题:在重新打开cmd后,运行连接生成的.exe 06/01 03:30
- [tomato] 方法可以参考汇编语言课设一中对于类似12666这种十进制数据的显示算法。 05/31 21:14
- [keyia] 显示的十六进制数也不正确 05/31 20:02
- [keyia] 因为十进制显示目前我还没想到好的方法,先把16进制显示的作出来,只是实现了功能,还有很多问题,恳请大 05/31 19:31
- [keyia] 受教了,感谢。经你这样一说,就可以明显看出书中的问题具有极强的引导作用,可惜我的理解没转到上面来。思 05/31 19:12
- [tomato] 你的十进制数据只能显示两位的是吗?而且显示的十六进制数也不正确吧,因为数字和字符的ASCII码不是连 05/31 18:15
- [tomato] 具体的理解是正确的,但是有些问题没有说到点子上。比如,“思考:showchar函数是如何知道要显示多 05/31 17:14
- [q470393267] 这研究够有深度的,佩服佩服~还有楼主的精神确实很值得佩服! 05/28 12:57
- [keyia] 我正是被这里卡住了... 05/22 17:46
[2009-05-30 14:58] 研究试验5 (3)实现一个简单的printf函数,只需要支持
阅读全文 |
评论次数(5) |
浏览次数(1015) |
所属类型(汇编作业)
[2009-05-27 21:10] 研究试验5 函数如何接收不定数量的参数(1)~(2)
研究试验5 函数如何接收不定数量的参数
(1) 写一个程序a.c
void showchar(char a,int b);
main()
{
showchar('a',2);
}
void showchar(char a,int b)
{
*(char far *)(0xb8000000+160*10+80)=a;
*(char far *)(0xb8000000+160*10+81)=b;
}
用tc.exe对a.c进行编译,连接,生成a.exe。用debug加载a.exe,对函数的汇编代码进行分析。解答这两个问题:main函数如何给sho...
(1) 写一个程序a.c
void showchar(char a,int b);
main()
{
showchar('a',2);
}
void showchar(char a,int b)
{
*(char far *)(0xb8000000+160*10+80)=a;
*(char far *)(0xb8000000+160*10+81)=b;
}
用tc.exe对a.c进行编译,连接,生成a.exe。用debug加载a.exe,对函数的汇编代码进行分析。解答这两个问题:main函数如何给sho...
阅读全文 |
评论次数(2) |
浏览次数(1074) |
所属类型(汇编作业)
[2009-05-27 20:56] 研究试验4 不用main函数编程(7)~(10)
(7) 用debug找到m.exe中调用main函数的call指令的偏移地址,从这个偏移地址开始向后察看10条指令;然后用debug加载c0s.exe,从相同的偏移
地址开始向后察看10条指令。对两处的指令进行对比。
F:\dosimg\minic>debug m.exe
-u 11a
13D6:011A E8DD00 CALL 01FA
13D6:011D 50 PUSH AX
13D6:011E E8F700 CALL 0218
13D6:0121 2E CS:
13D6:0122...
地址开始向后察看10条指令。对两处的指令进行对比。
F:\dosimg\minic>debug m.exe
-u 11a
13D6:011A E8DD00 CALL 01FA
13D6:011D 50 PUSH AX
13D6:011E E8F700 CALL 0218
13D6:0121 2E CS:
13D6:0122...
阅读全文 |
评论次数(1) |
浏览次数(1119) |
所属类型(汇编作业)
[2009-05-21 22:53] 研究试验4 不用main函数编程(1)~(6)
研究试验4 不用main函数编程
f.c:
f()
{
*(char far *)(0xb8000000+160*10+80)='a';
*(char far *)(0xb8000000+160*10+81)=2;
}
(1)把程序f.c保存在\minic下,对其进行编译,连接。思考相关的问题。
问题:
1. 编译和连接哪个环节会出问题?
答:连接出错
2. 显示出的错误信息是什么?
答:显示出的错误信息是
Linking:CS.LIB
...
Errors:1
Linker Error: Undefined symbol '_main'...
f.c:
f()
{
*(char far *)(0xb8000000+160*10+80)='a';
*(char far *)(0xb8000000+160*10+81)=2;
}
(1)把程序f.c保存在\minic下,对其进行编译,连接。思考相关的问题。
问题:
1. 编译和连接哪个环节会出问题?
答:连接出错
2. 显示出的错误信息是什么?
答:显示出的错误信息是
Linking:CS.LIB
...
Errors:1
Linker Error: Undefined symbol '_main'...
阅读全文 |
评论次数(2) |
浏览次数(1098) |
所属类型(汇编作业)
[2009-05-21 15:37] 研究试验3 使用内存空间(5)
(5)下面的程序向安全的内存空间写入从"a"到"h"的8个字符,理解程序的含义,深入理解相关的知识。
#define Buffer ((char *)*(int far *)0x02000000)
main ()
{
Buffer=(char *)malloc(20);
Buffer[10]=0;
while(Buffer[10] !=8)
{
Buffer[Buffer[10]]='a'+Buffer[10];
Buffer[10]++;
}
}
分析:
1、语句一:
#define Buffer ((char *)*(...
#define Buffer ((char *)*(int far *)0x02000000)
main ()
{
Buffer=(char *)malloc(20);
Buffer[10]=0;
while(Buffer[10] !=8)
{
Buffer[Buffer[10]]='a'+Buffer[10];
Buffer[10]++;
}
}
分析:
1、语句一:
#define Buffer ((char *)*(...
阅读全文 |
评论次数(2) |
浏览次数(1042) |
所属类型(汇编作业)
[2009-04-22 23:54] 研究试验3 使用内存空间(1)~(4)
研究试验3 使用内存空间
用minic目录下的tc.exe,完成下面的试验。
(1)编一个程序um1.c
main()
{
*(char *)0x2000='a';
*(int *)0x2000=0xf;
*(char far *)0x20001000='a';
_AX=0x2000;
*(char *)_AX='b';
_BX=0x1000;
*(char *)(_BX+_BX)='a';
*(char far *)(0x20001000+_BX)=*(char *)_AX;
}
-u1fa
13C7:01...
用minic目录下的tc.exe,完成下面的试验。
(1)编一个程序um1.c
main()
{
*(char *)0x2000='a';
*(int *)0x2000=0xf;
*(char far *)0x20001000='a';
_AX=0x2000;
*(char *)_AX='b';
_BX=0x1000;
*(char *)(_BX+_BX)='a';
*(char far *)(0x20001000+_BX)=*(char *)_AX;
}
-u1fa
13C7:01...
阅读全文 |
评论次数(3) |
浏览次数(932) |
所属类型(汇编作业)
[2009-04-22 21:50] 研究试验2 使用寄存器
研究试验2 使用寄存器
用minic目录下的tc.exe完成以下试验。
(1)编写一个程序ur1.c
main()
{
_AX=1; /* MOV AX,1 */
_BX=1;
_CX=2;
_AX=_BX+_CX;
_AH=_BL+_CL;
_AX=_BH+_CH;
}
(2)用debug加载ur1.exe,用u命令查看ur1.c编译后的机器码和汇编代码。
思考:main函数的代码在什么段?用debug怎样找到ur1.exe中main函数的代码?
-u 1fa
13CF:01FA 55 PU...
用minic目录下的tc.exe完成以下试验。
(1)编写一个程序ur1.c
main()
{
_AX=1; /* MOV AX,1 */
_BX=1;
_CX=2;
_AX=_BX+_CX;
_AH=_BL+_CL;
_AX=_BH+_CH;
}
(2)用debug加载ur1.exe,用u命令查看ur1.c编译后的机器码和汇编代码。
思考:main函数的代码在什么段?用debug怎样找到ur1.exe中main函数的代码?
-u 1fa
13CF:01FA 55 PU...
阅读全文 |
评论次数(1) |
浏览次数(1005) |
所属类型(汇编作业)
[2009-04-22 21:48] 研究试验1 搭建一个精简的C语言开发环境
研究试验1 搭建一个精简的C语言开发环境
[.] [..] C0S.OBJ CS.LIB EMU.LIB
GRAPHICS.LIB MATHS.LIB SIMPLE.BAK SIMPLE.C SIMPLE.EXE
SIMPLE.OBJ TC.EXE...
[.] [..] C0S.OBJ CS.LIB EMU.LIB
GRAPHICS.LIB MATHS.LIB SIMPLE.BAK SIMPLE.C SIMPLE.EXE
SIMPLE.OBJ TC.EXE...
阅读全文 |
评论次数(4) |
浏览次数(714) |
所属类型(汇编作业)
[2009-04-10 20:36] 课程设计2
课程设计2
代码如下:
;****************************************
;Copyright (c) 2009,10 Keyia.
;All rights no reserved.
;****************************************
assume cs:code
code segment
;0面0道1扇区
;****************************************
bootio: org 7c00h
jmp bootstart
...
代码如下:
;****************************************
;Copyright (c) 2009,10 Keyia.
;All rights no reserved.
;****************************************
assume cs:code
code segment
;0面0道1扇区
;****************************************
bootio: org 7c00h
jmp bootstart
...
阅读全文 |
评论次数(6) |
浏览次数(842) |
所属类型(汇编作业)
[2009-04-01 10:36] 实验17 编写包含多个功能子程序的中断例程
实验17 编写包含多个功能子程序的中断例程
逻辑扇区的编号方法如下:
物理扇区号 逻辑扇区号
0面0道1扇区 0
0面0道2扇区 1
0面0道3扇区 2
0面0道4扇区 3
...
0面0道18扇区 17
0面1道1扇区 18
0面1道2扇区 19
0面1道3扇区 20
0面1道4扇区 21
...
0面1道18扇区 35
0面2道1扇区 36
0面2道2扇区 37
0面2道3扇区 38
0...
逻辑扇区的编号方法如下:
物理扇区号 逻辑扇区号
0面0道1扇区 0
0面0道2扇区 1
0面0道3扇区 2
0面0道4扇区 3
...
0面0道18扇区 17
0面1道1扇区 18
0面1道2扇区 19
0面1道3扇区 20
0面1道4扇区 21
...
0面1道18扇区 35
0面2道1扇区 36
0面2道2扇区 37
0面2道3扇区 38
0...
阅读全文 |
评论次数(5) |
浏览次数(1492) |
所属类型(汇编作业)
『 查看更多文章 』