LC-3 Assembly Example

LC-3 Pass 1

Line of LC-3 location
counter
new
symbol
        .ORIG    x3000    
nmChr   AND      R0,R0,#0 3000 nmChar
        LEA      R1,FILE 3001  
        LD       R2,LOOK4 3002  
        NOT      R2,R2 3003  
        ADD      R2,R2,#1 3004  
ALOOP   LDR      R3,R1,#0 3005 ALOOP
        BRz      STOPIT 3006  
        ADD      R3,R3,R2 3007  
        BRnp     NOCOUNT 3008  
        ADD      R0,R0,#1 3009  
NOCOUNT ADD      R1,R1,#1 300A NOCOUNT
        BR       ALOOP 300B  
STOPIT  ST       R0,COUNT 300C STOPIT
        HALT 300D  
LOOK4   .FILL    x73 300E LOOK4
FILE    .STRINGZ "This is such fun!" 300F FILE
COUNT   .BLKW    1        3021 COUNT
        .END 3022  

LC-3 Symbol Table

Symbol Location
ALOOP 3005
COUNT 3021
FILE 300F
LOOK4 300E
nmChr 3000
NOCOUNT 300A
STOPIT 300C

LC-3 Instruction tokenization

location Line of LC-3 "opcode" op 1 op 2 op 3
3000 nmChr   AND      R0,R0,#0 AND R0 R0 #0
3001         LEA      R1,FILE LEA R1 FILE
3002         LD       R2,LOOK4 LD R2 LOOK4
3003         NOT      R2,R2 NOT R2 R2
3004         ADD      R2,R2,#1 ADD R2 R2 #1
3005 ALOOP   LDR      R3,R1,#0 LDR R3 R1 #0
3006         BRz      STOPIT BRz STOPIT
3007         ADD      R3,R3,R2 ADD R3 R3 R2
3008         BRnp     NOCOUNT BRnp NOCOUNT
3009         ADD      R0,R0,#1 ADD R0 R0 #1
300A NOCOUNT ADD      R1,R1,#1 ADD R1 R1 #1
300B         BR       ALOOP BR ALOOP
300C STOPIT  ST       R0,COUNT ST R0 COUNT
300D         HALT HALT
300E LOOK4   .FILL    x73 .FILL x73
300F FILE    .STRINGZ "This is such fun!" .STRINGZ "This is such fun!"
3021 COUNT   .BLKW    1        .BLKW 1

LC-3 Psuedo-instruction expansion

location opcode mod op 1 op 2 op 3
3000 AND imm R0 R0 #0
3001 LEA   R1 FILE
3002 LD   R2 LOOK4
3003 NOT   R2 R2
3004 ADD imm R2 R2 #1
3005 LDR   R3 R1 #0
3006 BR z STOPIT
3007 ADD reg R3 R3 R2
3008 BR np NOCOUNT
3009 ADD imm R0 R0 #1
300A ADD imm R1 R1 #1
300B BR nzp ALOOP
300C ST   R0 COUNT
300D TRAP   x25
300E .FILL   x73
300F .FILL   'T'
3010 .FILL   'h'
3011 .FILL   'i'
and so on ....
301E .FILL   'n'
301F .FILL   '!'
3020 .FILL   0
3021 .BLKW   1

LC-3 PC offset calculation

instruction
location
referenced
symbol
symbol
address
PC Decimal
offset
Hexadecimal
offset
3001 FILE 300F 3002 13 000D
3002 LOOK4 300E 3003 11 000B
3006 STOPIT 300C 3007 5 0005
3008 NOCOUNT 300A 3009 1 0001
300B ALOOP 3005 300C -7 FFF9
300C COUNT 3021 300D 20 0014

LC-3 with offsets

location opcode mod op 1 op 2 op 3
3000 AND imm R0 R0 #0
3001 LEA   R1 #13
3002 LD   R2 #11
3003 NOT   R2 R2
3004 ADD imm R2 R2 #1
3005 LDR   R3 R1 #0
3006 BR z #5
3007 ADD reg R3 R3 R2
3008 BR np #1
3009 ADD imm R0 R0 #1
300A ADD imm R1 R1 #1
300B BR nzp #-7
300C ST   R0 #20
300D TRAP   x25
300E .FILL   x73
300F .FILL   'T'
3010 .FILL   'h'
3011 .FILL   'i'
and so on ....
301E .FILL   'n'
301F .FILL   '!'
3020 .FILL   0
3021 .BLKW   1

LC-3 binary

location 15 to 12 11 to 9 8 to 6 5 to 0
3000 0101 000 000 1 000000
3001 1110 001 000001101
3002 0010 010 000001011
3003 1001 010 010 111111
3004 0001 010 010 1 11111
3005 0110 011 001 000000
3006 0000 010 000000101
3007 0001 011 011 000 010
3008 0001 101 000000001
3009 0001 000 000 1 00001
300A 0001 001 001 1 00001
300B 00 111 111111001
300C 0011 000 000100000
300D 1111 0000 00100101
300E 0000000001110011
300F 0000000001010100
3010 0000000001101000
3011 0000000001101001
and so on ....
301E 0000000001101110
301F 0000000000100001
3020 0000000000000000
3021 ????????????????