程序集8086中的嵌套循环(

时间:2018-10-23 06:00:38

标签: assembly x86-16

; (iam在打印此系列122222223222时面临问题)您能否请检查代码并指出我的错误)

.model small 
.stack 100h 
.code 
start:
mov cx,3

l1:

mov ah, 02
mov dl, 49
int 21h 
inc dl

mov bx,cx
mov cx, 3

l2:

mov ah, 02
mov dl,50
int 21h 

loop l2

mov cx,bx
inc dl
loop l1

mov ah, 4ch
int 21h 

end start

1 个答案:

答案 0 :(得分:2)

您的程序几乎可以正常运行。当前输出为“ 122212221222”。

不断重复的“ 1”字符来自以下事实:您在内重复使用了立即数49 循环!
我建议您将其存储在DH寄存器中,从那里检索它,并在每次迭代时递增DH

    mov  dh, "1"   ; ASCII=49
    mov  cx, 3
outerLoop:
    mov  ah, 02h
    mov  dl, dh    ; Successively "1", "2", "3"
    inc  dh
    int  21h

    mov  bx, 3
innerLoop:
    mov  ah, 02h
    mov  dl, "2"   ; ASCII=50
    int  21h 
    dec  bx
    jnz  innerLoop

    dec  cx
    jnz  outerLoop

请注意,除了使用BX作为内部循环的计数器之外,您还可以轻松使用BX作为内部循环的计数器。

出于可读性考虑,您可以:

  • 使用更多描述性标签
  • 插入空白行以使innner循环脱颖而出
  • 编写功能注释