注册 登录
编程论坛 汇编论坛

求指教,这段程序为什么是表示在屏幕上输出0 1 2 3 4 的 mov cx 05h mov al 30h lp:mov dl al

紫小念 发布于 2015-03-25 09:36, 5870 次点击
求详细解答,谢谢
11 回复
#2
紫小念2015-03-25 09:38
接着补充上面,好像上面没显示出来,
inc  al
movah 02h
int 21h
loop  lp
#3
wp2319572015-03-25 09:41
你是如何操作的  实践是检验真理的唯一标准

现在估摸着手头有纯16位的dos操作系统 很少了  也就是虚拟机中能够安装

而在windows中 是不能直接调用中断的
#4
紫小念2015-03-25 09:43
噢,我没有dos操作系统,只是想分析出这段程序,这个没有上机考,纯大脑分析
#5
紫小念2015-03-25 10:03
求大神不吝赐教
#6
zklhp2015-03-25 10:38
程序代码:
mov cx, 05h        ; 次数
mov al, 30h        ; '0'的ASCII码
lp:            ; 循环的标签
    mov dl, al    ; 根据中断要求把要输出的内容放在dl里
    inc al        ; 后面一个字符
    mov ah, 02h    ; 指明哪个中断
    int 21h    ; 调用中断
loop lp        ; 循环



#7
xzlxzlxzl2015-03-26 11:33
啊啊啊,这都是什么哇,完全迷糊
#8
hu9jj2015-03-27 08:06
以下是引用xzlxzlxzl在2015-3-26 11:33:13的发言:

啊啊啊,这都是什么哇,完全迷糊

已经逐行解释了,难道还看不明白?
#9
hu9jj2015-03-27 08:12
再详细解释一遍:
mov cx, 05h        ;预设循环的次数
mov al, 30h        ;将'0'的ASCII码存入寄存器AL中
lp:            ; 循环开始的标志
    mov dl, al    ; 根据中断要求把要输出的内容放在dl里
    inc al        ;将AL的值加1(即改成下一个字符)
    mov ah, 02h    ;将中断号02h存入ah寄存器中
    int 21h    ; 调用中断
loop lp        ; 循环(返回到lp处继续执行,满5次后结束。
#10
忙郎2016-01-29 12:03
楼上不对!执行完int 21之后,al=30h,inc al没有起作用
应该是在loop之前inc dl,然后loop至mov ah,02h
验证正确。
#11
忙郎2016-01-29 12:06
-u
075A:0100 B90500        MOV    CX,0005                           
075A:0103 B030          MOV    AL,30                              
075A:0105 88C2          MOV    DL,AL                              
075A:0107 B402          MOV    AH,02                              
075A:0109 CD21          INT    21                                 
075A:010B FEC2          INC    DL                                 
075A:010D E2F8          LOOP    0107                              
075A:010F B44C          MOV    AH,4C                              
075A:0111 CD21          INT    21
#12
紫小念2016-05-08 20:24
谢谢大家!很久没上,谢谢!
1