嵌套循环汇编语言

时间:2015-08-01 23:49:51

标签: loops assembly nested

输出应为

XXXXXXXXXX
XXXXXXXXXX
XXXXXXXXXX
XXXXXXXXXX
XXXXXXXXXX

5x10或10x5

要求是应该只有LOOP,INC和/或DEC。

这就是我所做的,结果是无限循环:

.model small
.stack
.code 

start:

mov ah, 02h
mov cx, 10   

l1:

mov bx, 12    ; loop pababa n bente    

l2: 

mov dl,78h
int 21h    

loop l2   

dec bx

mov dl, 0dh ; carriage return
int 21h
mov dl, 0ah ;line feed
int 21h
mov cx, bx

loop l1

mov ah, 4ch
int 21h  

end start

2 个答案:

答案 0 :(得分:1)

您应该清楚地将外环与内环分开 我使用BX作为外部循环控制变量并使用CX作为内部循环控制变量来编写代码。

  mov ah, 02h   ;CONST for both loops

---- Start of outer loop ----
  mov bx, 5     ;Do 5 lines like in your example
l1:

---- Start of inner loop ----
  mov cx, 10    ;Put 10 characters on each line 
  mov dl, 'X'
l2:
  int 21h    
  loop l2
---- End of inner loop ----

  mov dl, 0dh   ;CR
  int 21h
  mov dl, 0ah   ;LF
  int 21h
  dec bx
  jnz l1
---- End of outer loop ----

答案 1 :(得分:0)

你的问题是你在循环1的开始处制作bx 12(mov bx,12),然后在循环2之后将其递减1,然后在循环1的末尾将其值赋值给cx.Bx将仅永远是12或11,而cx只会是11。

我认为你的修复方法是将(mov cx,bx)行移到l1:loop开始之前,而不是在你现在开始之后。