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

спасибо за ваш комментарий 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

Большое вам спасибо, сэр! Теперь работает! –

 Смежные вопросы

  • Нет связанных вопросов^_^