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

명령 loopclal에서 별표의 수를 이동할 수 있도록, 계산 프로세스를 반복 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

정말 고마워요! 지금 일하고있어! –