程序集 8086 中的嵌套循环 (.



;(我在打印这个系列时遇到问题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

你的程序几乎没问题。当前输出为"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

为了提高可读性,您可以:

  • 使用更具描述性的标签
  • 插入空白行以使内部循环突出显示
  • 撰写功能注释

最新更新