在程序集中的循环内循环

时间:2013-12-17 11:00:30

标签: loops assembly x86

我刚刚开始在Assembly编程,我真的很困惑在Assembly中循环。这是我的代码:

org 100h

Var db ?
Var2 db 65
Var3 db 0
mov ax,0
mov ah,01h
int 21h

mov Var,al

mov ah,02h
mov dl,10
int 21h

mov ah,02h
mov dl,13
int 21h

mov al,Var
sub al,64

mov cl,al

a:
    mov bl,cl
    mov ah,02h
    mov dh,Var2
    inc Var3
    mov cl,Var3
    inc Var2

b:                           
    mov ah,02h      
    mov dl,dh      
    int 21h      
    mov ah,02h      
    mov dl,0dh      
    int 21h          
    loop b     

    mov ah,02h
    mov dl,10
    int 21h

    mov ah,02h
    mov dl,13
    int 21h  

mov cl,bl
loop a

ret

输出如下内容: (输入) F (输出) 一个 乙 C d Ë ˚F

(输入)(输出) 一个 乙

我想要发生的是: (输入) F (输出) 一个 BB CCC DDDD EEEEE FFFFFF

我真的需要帮助,我花了几个小时在这段代码中绞尽脑汁。请这样告诉我我做错了什么或我该做什么。感谢

1 个答案:

答案 0 :(得分:1)

使用循环变量时,cx寄存器用作计数器。所以这里是内循环

    loop b     

您使用的CX在此过程中变为0。然后你的代码继续外循环

mov ah,02h
...
int 21h  

再次使用cx,此时仍为0。

mov cl,bl

所以这个外循环

loop a

从不循环。