2016-04-25 9 views
2

Also versuche ich ein Programm in MASM x86 (8086) zu schreiben, das eine Reihe von rechtwinkligen Dreiecken mit Sternchen "" drucken wird. Ich verwende Schleifen, um die Dreiecke auszudrucken. Ich versuche, jedes der Dreiecke 3 bis 9 Sterne hoch und die gleiche Zahl über, aber in verschiedenen Konfigurationen. Ich habe es geschafft, nur ein Dreieck zu drucken. Nachdem mein 1. Dreieck gedruckt wurde, bleiben nur die Sternchen "" auf unbestimmte Zeit. Hier ist ein Teil meines Codes:Mehrere Dreiecke auf MASM x86 (16 Bit) drucken

mov ah, 09h ;prints string 
    mov dx, offset input 
    int 21h 

    mov ah, 01h ;reads in character 
    int 21h 

    sub al, '0' ;is gunna read into lower half by default 
    mov ah, 0 ;blanking higher half of register so that way it doesnt throw off program 
    mov size, ax 
    mov cx, ax 
    mov bx, cx 
    push bx 

    mov ah, 02h 
    mov dl, 13 
    int 21h 
    mov dl, 10 
    int 21h 


lines: 
    push cx 

    stars: 
    mov ah, 02h 
    mov dl, '*' 
    int 21h 


    loop stars 

    mov ah, 02h 
    mov dl, 13 
    int 21h 
    mov dl, 10 
    int 21h 

    pop cx 

    loop lines 

    mov bx, size 

    mov ax, 4c00h 
    int 21h 

Ich rate ich muss ein anderes Register erstellen, um die Variable zu halten und möglicherweise eine weitere Schleife zu erstellen.
Meine Frage ist, muss ich die Benutzereingabe in ein anderes Register übergeben? Und wenn ja, wie kann ich es weitergeben?

+0

Sie haben vergessen, eine Frage zu stellen. –

+0

Meine Frage ist, muss ich die Benutzereingabe in ein anderes Register übergeben? Und wenn ja, wie kann ich es weitergeben? –

+0

Ihre Post hat immer noch keine Frage. Bitte bearbeiten Sie Ihren Beitrag, um alle notwendigen Informationen zur Verfügung zu stellen. –

Antwort

1

Sie haben die Benutzereingabe bereits in die SIZE-Variable eingegeben, das ist also in Ordnung.
Nach dem ersten Dreieck Sie diese Variable zurück in den CX-Register setzen gezogen wird, ist es ein wenig ändern (mehr oder weniger) und den Code für das Dreieck wiederholen:

; First user defined triangle 

    mov ah, 02h 
    mov dl, 13 
    int 21h 
    mov dl, 10 
    int 21h 
lines: 
    push cx 
stars: 
    mov ah, 02h 
    mov dl, '*' 
    int 21h 
    loop stars 
    mov ah, 02h 
    mov dl, 13 
    int 21h 
    mov dl, 10 
    int 21h 
    pop cx 
    loop lines 

; Take back the size and change it a bit 

    mov cx, size 
    add cx, 5 

; Second bigger triangle 

    mov ah, 02h 
    mov dl, 13 
    int 21h 
    mov dl, 10 
    int 21h 
lines: 
    push cx 
stars: 
    mov ah, 02h 
    mov dl, '*' 
    int 21h 
    loop stars 
    mov ah, 02h 
    mov dl, 13 
    int 21h 
    mov dl, 10 
    int 21h 
    pop cx 
    loop lines 
+0

Also habe ich es versucht und es funktioniert fast. Wenn ich zum Beispiel eine 3 in für die Benutzereingabe gebe, bekomme ich ein richtiges Dreieck und dann eine Endlosschleife von größeren Dreiecken. Trotzdem danke! Ich schätze die Hilfe sehr, du hast mich meinem Ziel näher gebracht, ich denke, ich kann versuchen, von hier aus zu debuggen. Vielen Dank! –