我正在尝试编写一个简短的LC-3程序,初始化R1 = 5,R2 = 16并计算R1和R2的总和,并将结果存入内存x4000。该程序应该从x3000开始。不幸的是,我必须以二进制形式编写它。
这就是我到目前为止......
.orig x3000__________;程序从x3000开始
0101 001 001 1 00000; R1< -R1 AND x0000
0001 001 001 1 00101; R1 < - R1 + x0005
0101 010 010 1 00000; R2 < - R2 AND x0000
0001 010 010 1 01000; R2 < - R2 + x0008
0001 010 010 1 01000; R2 < - R2 + x0008
0001 011 010 0 00 001; R 3 < - R 2 + R 1
//这最后一步是我在努力的地方...... 我正在考虑使用ST,我认为PCOFFSET9是994,但我无法用8位表示...所以我怎么做呢?我的代码效率低下吗?
0011 011
答案 0 :(得分:2)
ST命令仅限于内存中当前位置的511(我相信)。对于类似这样的事情,您将需要使用STI命令(Store Indirect)。下面的示例代码将帮助解释如何使用STI。
.orig x3000
AND R1, R1, #0 ; Clear R1
ADD R1, R1, #5 ; Store 5 into R1
AND R2, R2, #0 ; Clear R2
ADD R2, R2, #8 ; Store 8 into R2
ADD R3, R2, R1 ; R3 = R2 + R1
STI R3, STORE_x4000 ; Store the value of R3 into mem[x4000]
HALT ; TRAP x25 end the program
; Variables
STORE_x4000 .FILL x4000
.END
您需要对二进制进行适当的转换,但如果将代码插入LC-3模拟器,它将为您提供二进制表示。