2012-07-02 163 views
0

我有一個LC-3程序,它有一個計數器。我可以使用TRAP x21將計數器打印到屏幕上。但是,如果計數器號碼有兩位數,我的程序不起作用。LC-3如何打印兩位數字

例:9將完美打印,而不是19

我猜測之前打印我的註冊其中包含我需要一個循環,這將除以2斬數計數器(與我十進制除以10,而二進制)。然後我想我會打印digit1,digit0。我有一個問題,但我如何分配LC-3?右移?這對於這個問題來說似乎太難了,並且超出我的理解。

請幫忙。

0010 000 000000011 ; R0 <= x30 which is for 
    0001 000 000 0 00 010 ; R0 <= R0 + R2 

    1111 0000 00100001 ; TRAP x21 
    1111 0000 00100101 ; TRAP x25 
    0000000000110000 
+1

如果你正在生成十進制輸出,那麼你需要除以10,而不是2.除非10例程將是非常痛苦的考慮到LC-3的非常有限的指令集。櫃檯有多大? (例如,是否總是小於20?小於100?) –

+1

如果計數器值的範圍不是非常有限,我想我會建議使用以下結構編寫代碼。 16位值不能超過5位十進制數字。預留5個寄存器來保存這些數字。 (假設R3..R7。)將它們全部設置爲0.現在:減去10000;如果結果是> = 0,則增加R3並循環,否則加回10000;減去1000;如果結果是> = 0,增加R4並循環,否則加1000;等等。完成後,逐個輸出結果數字,跳過前導零。效率低下但有效。 –

回答

1

它只適用於一個數字,因爲您的號碼 - >數字例程。你正在向字符'0'添加一個數字,顯然沒有字符'11'等。

你可以找到最大的除數乘以十(通常通過重複加)直到除數超過數字(然後退回到先前的值)。這會讓你使用上面的Gareth的方法。