2017-02-16 6 views
0

私はユーザーの入力値と同じくらい多く星を印刷しますが、改行を印刷すると改行が印刷されないとループが機能しません。 なぜそれが起こっているのか分かりません。改行を印刷するとループが止まらない

.model small 
.stack 100h 
.data 
    msg1 db "How many star do you want to print: $" 
    newline db 10,13,"$" 
.code 
    main proc 

    mov ax,@data 
    mov ds,ax 

    mov ah,9 
    lea dx,msg1 
    int 21h 

    mov ah,1 ;taking input number 
    int 21h 

    mov bl,al 
    sub al,48 

    ;if i add newline code here then my loop doesn't stop 

    ; mov ah,9 
    ; mov ah,newline 
    ; int 21h 

    loop: 
    mov cx,0 
    mov cl,al 
    mov ah,2 
    mov dl,'*' 

    Top: 
    int 21h 
    loop Top 


    Exit: 
    endp 
    end main 
+0

[int型21 /ああ= 9](HTTP: //www.ctyme.com/intr/rb-2562.htm)は、あなたのコメントのために_AL_ –

+0

の内容を破壊します。しかし、私はこれをどうやって取り除くことができますか? –

+0

@WalidAlAshikあらかじめ 'al'の内容を保存し、割り込み後に復元します。 – fuz

答えて

1

命令loopあなたはclalからアスタリスクの数を移動することができますので、カウントし、プロセスを繰り返すcxを登録し使用しています。

mov ah,1 ;taking input number 
int 21h 

xor cx,cx  ;◄■■ CLEAR CX. 
mov cl,al  ;◄■■ CX NOW HOLDS THE NUMBER OF ASTERISKS. 
sub cl,48 

;if i add newline code here then my loop doesn't stop 
    mov ah,9 
    lea dx,newline  ;◄■■ UNCOMMENT LINE BREAK. 
    int 21h 

loop: 
;mov cx,0  ;◄■■ HERE WE CANNOT CHANGE CX BECAUSE 
;mov cl,al  ;◄■■ IT IS THE COUNTER FOR THE LOOP. 
mov ah,2 
mov dl,'*' 

Top: 
int 21h 
loop Top  ;◄■■ CX--. IF CX>0 JUMP. 
+0

ありがとうございました!それは今働いている! –

関連する問題