我现在已经搞乱了这段代码了一段时间,我似乎无法找出我做错了什么。我试图根据用户输入打印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
答案 0 :(得分:1)
在第一个三角形之后,BX是所需数字之上的一个数字,因此,在lines2:
标签上方添加第dec bx
行:
.
.
.
; second triangle
mov cx, size
dec bx ;<========================
lines2:
push cx
mov cx,bx
.
.
.
答案 1 :(得分:1)
将dec bx
从loop stars2
之后的行移至lines2:
之后的下一行。