能力值:
( LV2,RANK:10 )
|
-
-
2 楼
1。
SubData SEGMENT
DB
5 DUP('0'), 0ah, 0dh, '$' ;0ah、0dh:换行、回车
SubData ENDS
相当于定义了一个数组:SubData[]={'0','0','0','0','0',0ah,0dh,'$'}
2.
MOV AX, SubData ;取子程序所用的数据区段地址
MOV DS, AX
则DS指向了SubData,相当于DS=SubData,则DS[0]='0',...,DS[4]='0',DS[5]=0X0A,DS[6]=0X0D,
3.
MOV [SI], DL
相当于:MOV DS:[SI], DL
即:DS[SI]=DL
结合
next: MOV SI, 4
DEC SI
两句话来看,第一句赋值4给SI,则MOV [SI],DL 第一次执行时即:DS[4]=DL,
即把BX的个位数的ASCII码赋给SubData[4],然后SI递减,将BX的十位赋给SubData[3],
BX的百位赋给SubData[2]...
4。
字符'0'的ascii为0x30,'1'的为0x31,'2'的为0x32....
那么一个数a(a为0~9)的ascii码就等于a+0x30,等同于a+'0'
5.
负号先输出的意义是:把符号的显示和数的显示分开处理,类似于模块化.
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
[QUOTE=RogerWood;835268]1。
SubData SEGMENT
DB
5 DUP('0'), 0ah, 0dh, '$' ;0ah、0dh:换行、回车
SubData ENDS
相当于定义了一个数组:SubData[]={'0','0','0','0','0',0ah,0dh,'$'}
2...[/QUOTE]
十分感谢RogerWood热心地解答!
不过那句+‘0’我还不理解,如果那个数组里的数字都不是+‘0’而直接显示,
会显示什么?
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
要把字符显示出来,需要把字符的ascii码作为参数传给中断程序.
比如要显示字符'0',需要把'0'的ascii码0x30传给中断程序,要显示'a'则传0x61,等等.
+'0'不是+0,其实是+0x30,这样就可以把数字0~9转换为相应的ascii码.
如果直接显示的话,就显示ascii表里定义的对应字符:
Bin Dec Hex 缩写/字符 解释
00000000 0 00 NUL(null) 空字符
00000001 1 01 SOH(start of headling) 标题开始
00000010 2 02 STX (start of text) 正文开始
00000011 3 03 ETX (end of text) 正文结束
00000100 4 04 EOT (end of transmission) 传输结束
00000101 5 05 ENQ (enquiry) 请求
00000110 6 06 ACK (acknowledge) 收到通知
00000111 7 07 BEL (bell) 响铃
00001000 8 08 BS (backspace) 退格
00001001 9 09 HT (horizontal tab) 水平制表符
00001010 10 0A LF (NL line feed, new line) 换行键
00001011 11 0B VT (vertical tab) 垂直制表符
00001100 12 0C FF (NP form feed, new page) 换页键
00001101 13 0D CR (carriage return) 回车键
00001110 14 0E SO (shift out) 不用切换
00001111 15 0F SI (shift in) 启用切换
......
|
能力值:
( LV2,RANK:10 )
|
-
-
5 楼
谢谢你吖!难得有这么热心的人哪。
弱弱地问一句,不要告诉我那个列表你能背住吖?
|
能力值:
( LV2,RANK:10 )
|
-
-
6 楼
晕,那个列表是百度百科里抠的
|
能力值:
( LV2,RANK:10 )
|
-
-
7 楼
辛苦你啦!哈哈。
|