2015-11-12 32 views
0

當用戶按下X時按下進入或退出時,我必須創建一個程序,將給定的用戶輸入(十進制)轉換爲二進制匹配。任何人都可以給出一個指示如何啓動這個任務。我們被要求使用蒙版和循環,但我不知道從哪裏開始。LC-3十進制到二進制轉換器

+0

你有來存儲二進制值作爲內存中的字符串,或者你只需​​要打印的二進制值到控制檯? –

+0

它只需要打印到控制檯 – Drake

回答

0

我寫這個是因爲沒有很多二進制掩碼的例子。

二進制掩碼在彙編中非常有用,因爲它使我們能夠檢查十進制或十六進制值中的單個位。

例子: 如果我們看一下十進制數我們知道它的二進制值是,當我們AND R4, R4, R5我們的第一循環中,我們比較與。由於位[3]在中爲零,我們然後告訴LC3模擬器打印出一個ASCII字符「0」。然後我們用下一個二進制掩碼重複這個過程。

這可能是一個棘手的概念,所以我首先看幾個循環和位掩碼的例子。

LC3 Bit Counter

How do I write a program that prints out 「Hello World」, 5 times using a loop in LC3?

.ORIG x3000 

    LEA R0, PROMPT 
    PUTs    ; TRAP x22 
    LD R0, ENTER 
    OUT     ; TRAP x21 
    IN     ; TRAP x23 

    AND R5, R5, #0  ; clear R5 
    ADD R5, R5, R0  ; Store the user input into R5 

    AND R1, R1, #0  ; clear R1, R1 is our loop count 
    LD R2, MASK_COUNT ; load our mask limit into R2 
    NOT R2, R2   ; Invert the bits in R2 
    ADD R2, R2, #1  ; because of 2's compliment we have 
         ; to add 1 to R2 to get -4 
WHILE_LOOP 
    ADD R3, R1, R2  ; Adding R1, and R2 to see if they'll 
         ; will equal zero 
    BRz LOOP_END  ; If R1+R2=0 then we've looped 4 
         ; times and need to exit 

    LEA R3, BINARY  ; load the first memory location 
         ; in our binary mask array 
    ADD R3, R3, R1  ; use R1 as our array index and 
         ; add that to the first array location 
    LDR R4, R3, #0  ; load the next binary mask into R4 

    AND R4, R4, R5  ; AND the user input with the 
         ; binary mask 
    BRz NO_BIT 
    LD R0, ASCII_ONE 
    OUT     ; TRAP x21 
    ADD R1, R1, #1  ; add one to our loop counter 
    BRnzp WHILE_LOOP ; loop again 
NO_BIT 
    LD R0, ASCII_ZERO 
    OUT     ; TRAP x21 

    ADD R1, R1, #1  ; add one to our loop counter 
    BRnzp WHILE_LOOP ; loop again 
LOOP_END 

    LD R0, ENTER 
    OUT     ; TRAP x21 
    HALT    ; TRAP x25 

; Binary Maps 
BINARY .FILL b0000000000001000 
     .FILL b0000000000000100 
     .FILL b0000000000000010 
     .FILL b0000000000000001 
     .FILL b0000000000000000 

; Stored Values 
ENTER  .FILL x000A 
ASCII_ZERO .FILL x0030 
ASCII_ONE .FILL x0031 
MASK_COUNT .FILL x04  ; loop limit = 4 
PROMPT  .STRINGZ "Enter a number from 0-9" 

.END 
+0

我遇到的問題是它必須適用於大於9的數字和負數,並且它也必須是16位。 – Drake

+0

我提供了此代碼示例以幫助您朝正確的方向前進。如果您對修改後的代碼有具體問題,歡迎您將這些問題作爲新帖發佈。如果這個答案是有幫助的,請記住將其作爲回答。謝謝。 –