The LC-3 - Chapter 7: COMP 2620
The LC-3 - Chapter 7: COMP 2620
Assembly Program
;
;
;
;
;
;
;
;
;
x3000
R2, R2, #0
; R2 is counter, initially 0
R3, PTR ; R3 is pointer to characters
; R0 gets character input
R1, R3, #0
; R1 gets first character
;
; Test character for end of file
;
TEST
ADD
R4, R1, #-4
; Test for EOT (ASCII x04)
BRz
OUTPUT ; If done, prepare the output
Assembly Program
;
; Test character for match. If a match, increment count.
;
NOT
R1, R1
ADD
R1, R1, R0
; If match, R1 = xFFFF
NOT
R1, R1 ; If match, R1 = x0000
BRnp
GETCHAR ; If no match, do not increment
ADD
R2, R2, #1
;
; Get next character from file.
;
GETCHAR ADD
R3, R3, #1 ; Point to next char
LDR
R1, R3, #0
; R1 gets next char to test
BRnzp TEST
;
; Output the count.
;
OUTPUT
LD
R0, ASCII
; Load the ASCII template
ADD
R0, R0, R2
; Covert binary count to ASCII
OUT
; ASCII code in R0 is displayed.
HALT
; Halt machine
Assembly Program
;
; Storage for pointer and ASCII template
;
ASCII
.FILL x0030
PTR
.FILL x4000
.END
Assembly Process
Before
Two-Pass Process
We
Two-Pass Process
At
Two-Pass Process
However,
Two-Pass Process
Pass
Pass
1:
2:
Two-Pass Process
Now,
First Pass
From
First Pass
If
First Pass
The
First Pass
Then,
First Pass
The
Address
TEST
x3004
First Pass
The
Address
TEST
x3004
GETCHAR
x300B
First Pass
After
Symbol
Address
TEST
x3004
GETCHAR
x300B
OUTPUT
x300E
ASCII
X3012
PTR
x3013
Second Pass
In
Second Pass
The
instruction is
LD R3, PTR
So, the opcode is 0010
The DR is 011
How do we compute the PC offset?
Second Pass
Recall
Second Pass
Note,
Second Pass
Second