装配中不需要的循环

时间:2016-04-26 20:39:53

标签: assembly

我现在已经搞乱了这段代码了一段时间,我似乎无法找出我做错了什么。我试图根据用户输入打印2个不同的三角形,到目前为止我只得到第一个正确打印的三角形。

例如,如果用户输入4,则输出应如下:

*
* *
* * *
* * * *

* * * *
* * *
* *
*

我的代码正确生成第一个三角形,但是第二个增加了一个,输出就像这样

 * * * * *
 * * * *
 * * *
 * *

我的问题是如何获得正确的输出

org 100h


.data
Input db "Enter size of the triangle between 2 to 9: $" ;String to prompt the user
Size dw ?               ; variable to hold size of triangle


.code
Main proc
Start:
Mov ah, 09h
Mov dx, offset input ;prompts user for input
int 21h

mov ah, 01h
int 21h; takes user input

sub al, '0'

mov ah, 0   ;blank top half of ax reigster

mov size, ax ; we use ax instead of al because we used dw instead of db
mov cx, ax ; copy size into variable size and cx reigster     

mov bx, 1                    

call newline


lines:                 ; outer loop for number of lines
push cx
mov cx,bx





stars:                 ; inner loop to print stars

mov ah, 02h   
mov dl, '*'
int 21h


loop stars

inc bx

call newline
pop cx


loop lines
call newline  




; second triangle   

mov cx, size 


lines2:  

push cx
mov cx,bx





stars2:
mov ah, 02h
mov dl, '*'
int 21h

loop stars2

 dec bx

 call newline
 pop cx
loop lines2 
;end 



call newline
mov cx, size
; third triangle   
mov cx, size

lines3:
push cx
mov cx,bx

main endp   


proc newline
mov ah, 02h        ; go to a new line after input
mov dl, 13
int 21h
mov dl, 10
int 21h

ret ;returns back


newline endp

end main

2 个答案:

答案 0 :(得分:1)

在第一个三角形之后,BX是所需数字之上的一个数字,因此,在lines2:标签上方添加第dec bx行:

.
.
.
; second triangle   

mov cx, size 
dec bx         ;<========================

lines2:  

push cx
mov cx,bx
.
.
.

答案 1 :(得分:1)

dec bxloop stars2之后的行移至lines2:之后的下一行。