overview program in lc-3 machine language use the editor use lc-3 simulator trap instruction
Post on 20-Dec-2015
221 views
TRANSCRIPT
Overview
Program in LC-3 machine language
Use the Editor
Use LC-3 Simulator
Trap Instruction
LC-3 Editor / Simulator
Go to Authors’ Web page:
http://www.mhhe.com/patt2
Download:
• LC-3 Simulator – Win or Unix
- (LC-3 Edit, LC-3 Simulate)
• LC-3 Simulator Lab Manual
Sum of 12 Integers
• Compute sum of 12 integers.
Numbers start at location x3100. Program starts at location x3000.
R1 x3100R3 0 (Sum)R2 12(count)
R2=0?
R4 M[R1] R3 R3+R4R1 R1+1R2 R2-1
NO
YES
Write program
Sum integers from x3100 – x310B
Address Instruction Comments
x3000 1 1 1 0 0 0 1 0 1 1 1 1 1 1 1 1 R1 x3100
x3001 0 1 0 1 0 1 1 0 1 1 1 0 0 0 0 0 R3 0
x3002 0 1 0 1 0 1 0 0 1 0 1 0 0 0 0 0 R2 0
x3003 0 0 0 1 0 1 0 0 1 0 1 0 1 1 0 0 R2 12
x3004 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 1 If Z, goto x300A
x3005 0 1 1 0 1 0 0 0 0 1 0 0 0 0 0 0 Load next value to R4
x3006 0 0 0 1 0 1 1 0 1 1 0 0 0 1 0 0 Add to R3
x3007 0 0 0 1 0 0 1 0 0 1 1 0 0 0 0 1 Increment R1 (pointer)
X3008 0 0 0 1 0 1 0 0 1 0 1 1 1 1 1 1Decrement R2
(counter)
x3009 0 0 0 0 1 1 1 1 1 1 1 1 1 0 1 0 Goto x3004
The Add program in “binary”
0011000000000000 ;start x30001110001011111111 ;R1=x31000101011011100000 ;R3=00101010010100000 ;R2=00001010010101100 ;R2=R2+120000010000000101 ;If z goto x30090110100001000000 ;Load next value into R40001011011000100 ;R3=R3+R40001001001100001 ;R1=R1+10001010010111111 ;R2=R2-10000111111111010 ;goto x3004
The Add program in “hex”
3000 ;start x3000E2FF ;R1=x310056E0 ;R3=054A0 ;R2=014AC ;R2=R2+120405 ;If z goto x3009D840 ;Load next value into R416C4 ;R3=R3+R41261 ;R1=R1+114BF ;R2=R2-10FFA ;goto x3004
The Add program Data (hex)
3100 ; Begin data at x31003107 ; Loc x31002819011003100110111011B100190007000400000000 ; Loc x310B
LC3Edit
• Load the program into LC3Edit - 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
• Load the data into LCEdit - 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
LC-3 Simulator
• Open LC-3 Simulator
- Load prog.obj
- Load data.obj
- Set breakpoint(s)
- Step through program
TRAP
• Calls a service routine, identified by 8-bit “trap vector.”
• When routine is done, PC is set to the instruction following TRAP.
vector routine
x23 input a character from the keyboard
x21 output a character to the monitor
x25 halt the program
TRAPS
Add HALT to “Add” program
• Add HALT statement and run program without breakpoint(s)
Example : Multiply
Write program to Multiply two unsigned integers in R4 and R5
Example : Multiply
• This program multiplies two unsigned integers in R4 and R5.
clear R2
add R4 to R2
decrement R5
R5 = 0?
HALT
No
Yes
Write program
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 result in R2
Code program
Program to multiply [R4] x [R5] and place result in R2
x3200 Clear Accumulator (R2) R2 <- 0 0101 010 010 1 00000 54A0
x3201 Add [R4] to Accumulator R2 <- R2 + R4 0001 010 010 0 00 100 1484
x3202 Dec R5 R5 <- R5 – 1 0001 101 101 1 11111 1B7F
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 result in R2
Test on Simulator
Write a program to place the
absolute value of the [R2] in R2
How do we compute
A = - A
if we don’t have have a subtract instruction?
Example - # Occurrences of Inputted Char
Count = 0(R2 = 0)
Ptr = 1st file character(R3 = M[x3012])
Input charfrom keybd
(TRAP x23)
Done?(R1 ?= EOT)
Load char from file(R1 = M[R3])
Match?(R1 ?= R0)
Incr Count(R2 = R2 + 1)
Load next char from file(R3 = R3 + 1, R1 = M[R3])
Convert count toASCII character
(R0 = x30, R0 = R2 + R0)
Print count(TRAP x21)
HALT(TRAP x25)
NO
NO
YES
YES
Example - # Occurrences of Inputted CharProgram (1 of 2)
Address Instruction Comments
x3000 0 1 0 1 0 1 0 0 1 0 1 0 0 0 0 0 R2 0 (counter)
x3001 0 0 1 0 0 1 1 0 0 0 0 1 0 0 1 0 R3 M[x3102] (ptr)
x3002 1 1 1 1 0 0 0 0 0 0 1 0 0 0 1 1 Input to R0 (TRAP x23)
x3003 0 1 1 0 0 0 1 0 1 1 0 0 0 0 0 0 R1 M[R3]
x3004 0 0 0 1 1 0 0 0 0 1 1 1 1 1 0 0 R4 R1 – 4 (EOT)
x3005 0 0 0 0 0 1 0 0 0 0 0 0 1 1 1 0 If Z, goto x300E
x3006 1 0 0 1 0 0 1 0 0 1 1 1 1 1 1 1 R1 NOT R1
x3007 0 0 0 1 0 0 1 0 0 1 1 0 0 0 0 1 R1 R1 + 1
X3008 0 0 0 1 0 0 1 0 0 1 0 0 0 0 0 0 R1 R1 + R0
x3009 0 0 0 0 1 0 1 0 0 0 0 0 1 0 1 1 If N or P, goto x300B
Example - # Occurrences of Inputted CharProgram (2 of 2)
Address Instruction Comments
x300A 0 0 0 1 0 1 0 0 1 0 1 0 0 0 0 1 R2 R2 + 1
x300B 0 0 0 1 0 1 1 0 1 1 1 0 0 0 0 1 R3 R3 + 1
x300C 0 1 1 0 0 0 1 0 1 1 0 0 0 0 0 0 R1 M[R3]
x300D 0 0 0 0 1 1 1 0 0 0 0 0 0 1 0 0 Goto x3004
x300E 0 0 1 0 0 0 0 0 0 0 0 1 0 0 1 1 R0 M[x3013]
x300F 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 0 R0 R0 + R2
x3010 1 1 1 1 0 0 0 0 0 0 1 0 0 0 0 1 Print R0 (TRAP x21)
x3011 1 1 1 1 0 0 0 0 0 0 1 0 0 1 0 1 HALT (TRAP x25)
X3012 Starting Address of File
x3013 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 ASCII x30 (‘0’)