LC3,将寄存器的值存储到存储器位置

时间:2015-04-17 05:21:17

标签: lc3

我正在尝试编写一个简短的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

1 个答案:

答案 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模拟器,它将为您提供二进制表示。