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

LC3, Store a Value of a Register to a Memory Location

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

//这最后一步是我挣扎的地方...... 我在考虑使用 ST,我认为 PCOFFSET9 是 994,但我不能用 8 位来表示它……那么我还能怎么做呢?我的代码效率低下吗?

0011 011

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