Presentation on theme: "The LC-3 – Chapter 6 COMP 2620 Dr. James Money COMP 2620 1."— Presentation transcript:
The LC-3 – Chapter 6 COMP 2620 Dr. James Money COMP 2620 1
Example 1: Multiplying In this example, we consider a program that should multiply two numbers that are non- negative This is needed since the LC-3 does not have a multiply instruction The numbers are in R4 and R5 and the result should be stored in R2
Example 1: Multiplying x3200 0101010010100000 x3201 0001010010000100 x3202 0001101101111111 x3203 0000011111111101 x3204 1111000000100101 clear R2 add R4 to R2 decrement R5 R5 = 0? HALT No Yes Set R4 = 10, R5 =3. Run program. Result: R2 = 40, not 30.
PCR2R4R5 x3200--103 x32010103 x320210 3 x320310 2 x320110 2 x320220102 x320320101 x320120101 x320230101 x320330100 x320130100 x320240100 x32034010 x32044010 4010 PC and registers at the beginning of each instruction PCR2R4R5 x320310 2 x320320101 x320330100 x32034010 4010 Single-stepping Breakpoint at branch (x3203) Executing loop one time too many. Branch at x3203 should be based on Z bit only, not Z and P. Should stop looping here!
Example 2: Summing In this example, we want to sum an array of numbers The numbers start at location 0x3100 There are 10 numbers The result should be in R1 when the module finishes
Example 2: Summing Running the data below yields R1 = x0024, but the sum should be x8135. What happened? AddressContents x3100x3107 x3101x2819 x3102x0110 x3103x0310 x3104x0110 x3105x1110 x3106x11B1 x3107x0019 x3108x0007 x3109x0004 PCR1R2R4 x3000-- x30010-- x30020--0 x30030--10 x30040x310710 Start single-stepping program... Should be x3100! Loading contents of M[x3100], not address. Change opcode of x3003 from 0010 (LD) to 1110 (LEA).