2017-02-16 2 views
0

Ich Zauberstab, um so viele Sterne wie der Eingabewert des Benutzers zu drucken, aber wenn ich einen Zeilenumbruch drucke dann funktioniert meine Schleife nicht, sonst ohne Zeilenumbruch mein Code funktioniert gut. Warum es passiert, verstehe ich nicht.Wenn ich Newline drucke dann stoppt meine Schleife nicht

.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/ah = 9] (http: //www.ctyme.com/intr/rb-2562.htm) zerstört den Inhalt von _AL_ –

+0

danke für Ihren Kommentar sir.Aber Wie kann ich das loswerden? –

+0

@WalidAlAshik Speichern Sie den Inhalt von 'al' im Voraus und stellen Sie ihn nach dem Interrupt wieder her. – fuz

Antwort

1

Die Anweisung loop verwendet cx registrieren, um den Prozess zu zählen und wiederholen, so dass Sie die Anzahl der Stern von al in cl bewegen kann:

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

Vielen Dank Herr! Es funktioniert jetzt! –

Verwandte Themen