2016-04-26 11 views
1

私はこのコードをしばらくおびえてきました。私が間違っていることを見つけることができません。私はユーザーの入力に基づいて印刷する2つの異なる三角形を取得しようとしていますが、今までは、最初の三角形だけが正しく印刷されています。例えばアセンブリで望ましくないループがあります

、ユーザが4を入力した場合、出力はそうのようにすべきである:

* 
* * 
* * * 
* * * * 

* * * * 
* * * 
* * 
* 

マイコードが正しく最初の三角形を生成するが、第二のためには、一本

* * * * * 
* * * * 
* * * 
* * 
ような出力を加算

私の質問は、私が最初に三角形、BX後正しい出力

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 
+1

だから、 'dec bx'を';で追加しようとしましたか?二番目の三角形 '? – Michael

答えて

1

を得るのですかありますlines2:後に次の行にloop stars2後行から

. 
. 
. 
; second triangle 

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

lines2: 

push cx 
mov cx,bx 
. 
. 
. 
+0

それでした!ありがとう – sippycup

1

移動dec bx:行dec bxを追加するだけlines2:ラベル上に、ある数の所望の上方にあるので。

関連する問題