  Navigation Menu Search Site Latest Tutorials Links
Subtraction
Posted on 06-19-2006, by Tim
LC-3 does not natively support subtraction... we are going to have to figure out how to do this on our own.

What is subtraction? It is simply adding the negative value of a number.

A - B is the same as A + (-B). Using the NOT instruction, we are able to achieve this in LC-3. Let these be our labels:

 Code: FIRST_NUMBER .fill #5 SECOND_NUMBER .fill #3

Now here is the magic of subtraction (5 - 3):

 Code: LD R1, FIRST_NUMBER LD R2, SECOND_NUMBER ; create the negative of R2 NOT R2, R2 ADD R2, R2, #1 ; subtract - R3 now holds #2 ADD R3, R1, R2

In the operation of (5 - 3), we need to find the negative of 3. Granted we could always create the label that holds #-3 and then added, there will be many situations in which one of our operands will not be an immediate value.

Why do we get the negative value of SECOND_NUMBER and then add 1? This is because LC-3, like all other microprocessors, uses the two's complement representation system.

Now let's view the whole program:

 Code: .ORIG x3000 ; subtract #5 - #3 LD R1, FIRST_NUMBER LD R2, SECOND_NUMBER ; create the negative of R2 NOT R2, R2 ADD R2, R2, #1 ; subtract - R3 now holds #2 ADD R3, R1, R2 HALT FIRST_NUMBER .fill #5 SECOND_NUMBER .fill #3 .END
Difficulty: Intermediate - Views: 23579