2015-04-17 197 views
0

我试图编写一个初始化R1 = 5,R2 = 16的短LC-3程序并计算R1和R2的总和并将结果存入内存X4000。该程序应该从x3000开始。不幸的是,我必须以二进制形式编写它。LC3,将寄存器的值存储到内存位置

这是我到目前为止...

.orig x3000__________;程序开始于X3000

0101 001 001 1 00000; R1 < - R1和X0000

0001 001 001 1 00101; R1 < - R1 + x0005

0101 010 010 1 00000; R2 < - R2与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位表示......所以我该怎么做呢?我的代码效率低下吗?

回答

1

的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模拟器,它会给你的二进制表示。

+0

非常感谢。这是我后来在浏览笔记时发现的方法。对于遇到这种情况的其他人来说,重要的是不要将这些“标签”放在.END之后,而是要确保它们在HALT伪操作码之后。 –

相关问题