【问题标题】:LC3, Store a Value of a Register to a Memory LocationLC3,将寄存器的值存储到内存位置
【发布时间】:2015-06-23 19:39:20
【问题描述】:

我正在尝试编写一个简短的 LC-3 程序,该程序初始化 R1=5、R2=16 并计算 R1 和 R2 的总和并将结果放入内存 x4000。该程序应该从 x3000 开始。不幸的是,我必须以二进制形式编写它。

这就是我目前所拥有的......

.orig x3000__________;程序从 x3000 开始

0101 001 001 1 00000 ;R1

0001 001 001 1 00101 ;R1

0101 010 010 1 00000 ;R2

0001 010 010 1 01000 ;R2

0001 010 010 1 01000 ;R2

0001 011 010 0 00 001 ;R3

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

0011 011

【问题讨论】:

    标签: lc3


    【解决方案1】:

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

    【讨论】:

    • 非常感谢。这是我后来翻阅笔记时发现的方法。对于遇到此问题的任何其他人,重要的是不要将这些“标签”放在 .END 之后,而是确保它们位于 HALT 伪操作码之后。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-25
    相关资源
    最近更新 更多