Presentation is loading. Please wait.

Presentation is loading. Please wait.

Some thoughts: If it is too good to be true, it isn’t. Success is temporary. It is hard work to make it simple. Knowing you did it right is enough reward.

Similar presentations


Presentation on theme: "Some thoughts: If it is too good to be true, it isn’t. Success is temporary. It is hard work to make it simple. Knowing you did it right is enough reward."— Presentation transcript:

1 Some thoughts: If it is too good to be true, it isn’t. Success is temporary. It is hard work to make it simple. Knowing you did it right is enough reward. Learn from your mistakes and move on. Reflect on yourself, rather than judging others. Strive to leave this world a bit better place for your being here.

2 Chap 5 LC-3 Instructions Chap 5 Homework – due Wednesday October 29 (today) Project 2 Designs (Working Schematics) – due Wednesday October 29 (today) Project 2 Reports – due Wednesday November 5 Names on Breadboards – Please place names on sticky or initials outside and names inside

3 LC-3 Memory Map (64K of 16 bit words) 256 words 23.5 K words 39.5 K words 512 words

4 The LC-3 Computer a von Neumann machine Memory PSW (Program Status Word): Bits: 15 10 9 8 2 1 0 | S| |Priority| | N| Z| P| PSW The Instruction Cycle Fetch: Next Instruction from Memory (PC)  (points to) next instruction PC  (PC) + 1 Decode: Fetched Instruction Evaluate: Instr & Address (es) (find where the data is) Fetch: Operand (s) (get data as specified) Execute: Operation Store: Result (if specified)

5 Computer Machine Instruction Formats What is IN an instruction? Operation code – what to do Input Operand(s) – 2 ? where to get input operands (memory, registers) Output Operand(s) – 1 ?Where to put results (memory, registers) What are the major instruction types? Data Movement (load, store, etc.) Operate/Calculate (add, sub, mult, OR, AND, etc.) Control (branch, jump to subroutine, etc.)

6 LC-3 Instructions (Fig 5.3 – Appendix a) Addressing Modes Register (Operand is in one of the 8 registers) PC-relative (Operand is “offset” from where the PC points) Base + Offset (Base relative) (Operand is “offset” from the contents of a register) Immediate (Operand is in the instruction) Indirect (The “Operand” points to the real address of Operand – rather than being the operand)

7 Example LC-3 Program Write a program to add 12 integers and store the result in a Register.

8 Compute the Sum of 12 Integers Program Program begins at location x3000. Integers begin at location x3100. R1  x3100 R3  0 (Sum) R2  12(count) R2=0? R4  M[R1] R3  R3+R4 R1  R1+1 R2  R2-1 NO YES R1: “Array” index pointer (Begin with location 3100) R3: Accumulator for the sum of integers R2: Loop counter (Count down from 12) R4: Temporary register to store next integer

9 Sum integers from x3100 – x310B AddressInstructionComments x30001 1 1 0 0 0 1 0 1 1 1 1 1 1 1 1 R1  x3100 x30010 1 0 1 0 1 1 0 1 1 1 0 0 0 0 0 R3  0 x30020 1 0 1 0 1 0 0 1 0 1 0 0 0 0 0 R2  0 x30030 0 0 1 0 1 0 0 1 0 1 0 1 1 0 0 R2  12 x30040 0 0 0 0 1 0 0 0 0 0 0 0 1 0 1If Z, goto x300A x30050 1 1 0 1 0 0 0 0 1 0 0 0 0 0 0Load next value to R4 x30060 0 0 1 0 1 1 0 1 1 0 0 0 1 0 0Add to R3 x30070 0 0 1 0 0 1 0 0 1 1 0 0 0 0 1Increment R1 (pointer) X30080 0 0 1 0 1 0 0 1 0 1 1 1 1 1 1 Decrement R2 (counter) x30090 0 0 0 1 1 1 1 1 1 1 1 1 0 1 0Goto x3004 R1: “Array” index pointer (Begin with location 3100) R3: Accumulator for the sum of integers R2: Loop counter (Count down from 12) R4: Temporary register to store next integer

10 The Sum program in “binary” 0011000000000000 ;start x3000 x3000 1110001011111111 ;R1=x3100 x3001 0101011011100000 ;R3=0 x3002 0101010010100000 ;R2=0 x3003 0001010010101100 ;R2=R2+12 x3004 0000010000000101 ;If z goto x300A x3005 0110100001000000 ;Load next value into R4 x3006 0001011011000100 ;R3=R3+R4 x3007 0001001001100001 ;R1=R1+1 x3008 0001010010111111 ;R2=R2-1 x3009 0000111111111010 ;goto x3004 x300A 1111000000100101 ;halt

11 The Sum program in “hex” 3000 ;start x3000 x3000 E2FF ;R1=x3100 x3001 56E0 ;R3=0 x3002 54A0 ;R2=0 x3003 14AC ;R2=R2+12 x3004 0405 ;If z goto x300A x3005 6840 ;Load next value into R4 x3006 16C4 ;R3=R3+R4 x3007 1261 ;R1=R1+1 x3008 14BF ;R2=R2-1 x3009 0FFA ;goto x3004 x300A F025 ;halt

12 The Sum program Data in “hex” 3100 ; Begin data at x3100 x3100 0001 ; Loc x3100 x3101 0002 x3102 0004 x3103 0008 x3104 FFFF x3105 1C10 x3106 11B1 x3107 0019 x3108 0F07 x3109 0004 x310A 0A00 x310B 400F ; Loc x310B

13 LC3 Edit Enter (or Load) the program into LC3 Edit - Store it as prog.bin for a binary file, or Store it as prog.hex for a hex file - Create a prog.obj file with the Editor Enter (or Load) the data into LC3 Edit - Store it as data.bin for a binary file, or Store it as data.hex for a hex file - Create a data.obj file with the Editor

14 LC3 Edit

15 LC-3 Simulator Open LC-3 Simulator - Load prog.obj - Load data.obj - Initialize values (PC, memory, registers) - Set breakpoint(s) - Step through program checking registers and “memory map” - Debug program

16 Simulator Screen

17 Assemble and Test Add program on the Editor and Simulator Run program with HALT statement and without breakpoint(s). Observe what happens. Explain.

18 Write a program to place the absolute value of the [R2] in R2 How do we compute A = - A if we don’t have a subtract instruction? Code your result and test it.

19 Example : Multiply Write program to Multiply two unsigned integers in R4 and R5 How do you begin?

20 Example : Multiply This multiplies two unsigned integers in R4 and R5 and puts the result in R2. clear R2 add R4 to R2 decrement R5 R5 = 0? HALT No Yes Now write the program

21 x3200 Clear Accumulator (R2) R2 <- 0 x3201 Add [R4] to Accumulator R2 <- R2 + R4 x3202 Dec R5 R5 <- R5 – 1 x3203 Do again if [R5] > 0 BR p x3201 x3204 Stop HALT Program to multiply [R4] x [R5] and place the result in R2 Now write the machine code

22 x3200 Clear Accumulator (R2) R2 <- 0 0101 010 010 1 0000054A0 x3201 Add [R4] to Accumulator R2 <- R2 + R4 0001 010 010 0 00 1001484 x3202 Dec R5 R5 <- R5 – 1 0001 101 101 1 111111B7F x3203 Do again if [R5] > 0 BR p x3201 0000 001 111111101 03FD x3204 Stop HALT 1111 0000 00100101 F025 Program to multiply [R4] x [R5] and place the result in R2 Enter the Machine Code in the editor & Test it on the Simulator

23 Example : Multiply This program multiplies two unsigned integers in R4 and R5 and accumulates the result in R2. x3200 0101010010100000 x3201 0001010010000100 x3202 0001101101111111 x3203 0000011111111101 x3204 1111000000100101 clear R2 add R4 to R2 decrement R5 R5 = 0? HALT No Yes R2 <- 0 R2 <- R2 + R4 R5 <- R5 – 1 BRzp x3201 HALT

24 Occurrences of Inputted Char Program

25 Occurrences of Inputted Char Program (1 of 2) AddressInstructionComments x30000 1 0 1 0 1 0 0 1 0 1 0 0 0 0 0 R2  0 (counter) x30010 0 1 0 0 1 1 0 0 0 0 1 0 0 1 0 R3  M[x3102] (ptr) x30021 1 1 1 0 0 0 0 0 0 1 0 0 0 1 1Input to R0 (TRAP x23) x30030 1 1 0 0 0 1 0 1 1 0 0 0 0 0 0 R1  M[R3] x30040 0 0 1 1 0 0 0 0 1 1 1 1 1 0 0 R4  R1 – 4 (EOT) x30050 0 0 0 0 1 0 0 0 0 0 0 1 1 1 0If Z, goto x300E x30061 0 0 1 0 0 1 0 0 1 1 1 1 1 1 1 R1  NOT R1 x30070 0 0 1 0 0 1 0 0 1 1 0 0 0 0 1 R1  R1 + 1 X30080 0 0 1 0 0 1 0 0 1 0 0 0 0 0 0 R1  R1 + R0 x30090 0 0 0 1 0 1 0 0 0 0 0 1 0 1 1If N or P, goto x300B

26 Occurrences of Inputted Char Program (2 of 2) AddressInstructionComments x300A0 0 0 1 0 1 0 0 1 0 1 0 0 0 0 1 R2  R2 + 1 x300B0 0 0 1 0 1 1 0 1 1 1 0 0 0 0 1 R3  R3 + 1 x300C0 1 1 0 0 0 1 0 1 1 0 0 0 0 0 0 R1  M[R3] x300D0 0 0 0 1 1 1 0 0 0 0 0 0 1 0 0Goto x3004 x300E0 0 1 0 0 0 0 0 0 0 0 1 0 0 1 1 R0  M[x3013] x300F0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 0 R0  R0 + R2 x30101 1 1 1 0 0 0 0 0 0 1 0 0 0 0 1Print R0 (TRAP x21) x30111 1 1 1 0 0 0 0 0 0 1 0 0 1 0 1HALT (TRAP x25) X3012Starting Address of File x30130 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0ASCII x30 (‘0’)


Download ppt "Some thoughts: If it is too good to be true, it isn’t. Success is temporary. It is hard work to make it simple. Knowing you did it right is enough reward."

Similar presentations


Ads by Google