0

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

4

1 回答 1

2

ST 命令从内存中的当前位置仅限于 511(我相信)。对于这样的事情,您将需要使用 STI 命令(间接存储) 下面的示例代码将帮助解释如何使用 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 模拟器,它将为您提供二进制表示。

于 2015-04-22T22:24:51.050 回答