简体   繁体   中英

LC-3 Assembly Subtract Two Numbers

I am having problem with this question as I am new to LC-3 programming.

Write a LC-3 code to subtract the value in R1 from the value in R0 and place the result in R5. That is, write the assembly code for R5 := R0 - R1. Assume R1=10 and R0 is 12.

Per your question, we can assume that 12 and 10 are already in R0 and R1 , so the correct algorithm starts at the NOT instruction and ends at HALT ; however, the other instructions are included to allow you to run this code.

The solution is to add R0 with -R1 . We find -R1 by doing bitwise inversion ( NOT ) on the number in R1 and adding 1. This gives us the 2's complement negation of R1.

If you do not understand two's complement arithmetic, I suggest looking here . After the subtraction in performed, we restore the original number to R1 .

.orig x3000

LD R0, A        ; A(12) => R0 (this is assumed)
LD R1, B        ; B(10) => R1 (this is assumed)
                ; find negative of the two's complement number in R1
NOT R1, R1
ADD R1, R1, 1
ADD R5, R0, R1  ; R0 - R1 => R5
LD R1, B        ; Restore R1
HALT

A .fill 12
B .fill 10

.end

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM