Fork me on GitHub

汇编:输出寄存器AX中的内容(子程序)

 1 ;输出寄存器AX中的内容(子程序)
 2 DATAS segment
 3     
 4 DATAS ends
 5 CODES segment
 6 START:
 7     mov AX,DATAS
 8     mov DS,AX
 9     ;正式代码开始
10     mov AX,1AF4H        ;设置需要显示的AX的值
11     call PrintAX
12     mov al,0
13     mov ah,4CH
14     int 21H
15 
16 PrintAX proc
17     jmp Next    
18     Temp db '0000H','$'
19 Next:    
20     mov si,offset Temp+3;保存存储结果的字符串的最后一个字符偏移地址
21     xor cx,cx           ;对cX清零
22     mov cl,4            ;设置循环次数为4次
23 
24 MainPart:
25     mov DH,AL           ;将Al的内容传送给DH
26 
27     shr AX,1
28     shr AX,1
29     shr AX,1
30     shr AX,1
31                 ;上述4句为使AX逻辑右移4位 理论上可以写成 shr AX ,cl(cl设置为4) 
32                 ;但这个地方cl要记录循环次数每次循环会是cl-1所以无法满足正常的移位需要
33     and dh,0FH
34     add dh,30H
35     cmp dh,':'  ;':'的ASCII比9大1 而字母的ASCII码与数字的ASCII码中间隔了7个其它字符
36     ja isLetter ;如果为字母则跳转
37     jb No       ;如果不是
38 
39 isLetter:
40     add dh,7H   ;ASCII码加7变为字母
41 No:
42     mov [si],dh ;将字符存入,待存放内容的字符串的对应位置
43 
44     dec si      ;待存放内容的内存地址自减1
45 loop MainPart
46 
47 print:   
48     mov dx,offset Temp  ;将带打印的字符串的偏移地址存放进dx中
49     mov ah,09           ;设置DOS 09号功能
50     int 21H         ;功能调用
51     ret
52 PrintAX endp
53 
54 CODES ends
55     end START

 

posted @ 2019-01-08 18:40  粥里有勺糖  阅读(1414)  评论(0编辑  收藏  举报