2016-04-25 72 views
2

所以我想在MASM x86(8086)中編寫一個程序,打印出一系列由星號「」構成的直角三角形。我正在使用循環打印出三角形。我試圖讓每個三角形3到9星號高和相同的數字,但在不同的配置。我知道它只打印一個三角形。打印完第一個三角形後,它將無限期地保持循環星號「」。這裏是我的一些代碼:在MASM x86(16位)上打印多個三角形

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 

我猜我必須創建另一個寄存器來保存該變量,並可能創建另一個循環。
我的問題是,我必須將用戶輸入傳遞到另一個寄存器嗎?如果是這樣,我怎麼能通過它?

+0

你忘了問一個問題。 –

+0

我的問題是,我必須將用戶輸入傳遞到另一個寄存器嗎?如果是這樣,我怎麼能通過它? –

+0

您的帖子仍然沒有問題。請編輯您的帖子以提供所有必要的信息。 –

回答

1

你已經把用戶輸入放到了SIZE變量中,所以沒關係。
第一三角形繪製你把這個變量早在CX寄存器後,改變了一點(或多或少),並重復了代號爲三角形:

; 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

所以我嘗試了它,它幾乎工作。例如,如果我爲用戶輸入添加3,我會得到一個正確的三角形,然後是一個更大的三角形的無限循環。謝謝你!我非常感謝你的幫助,讓我更接近我的目標,我想我可以嘗試從這裏進行調試。謝謝! –