2017-02-16 74 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

[詮釋21 /啊= 9](HTTP: //www.ctyme.com/intr/rb-2562.htm)破壞_AL_ –

+0

的內容感謝您的評論sir.But我該如何擺脫這種情況? –

+0

@WalidAlAshik提前保存'al'的內容並在中斷後恢復。 – fuz

回答

1

指令loop使用寄存器cx計數並重復此過程,這樣就可以從al移動星號的數目爲cl

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

非常感謝您的先生!它正在工作! –