【问题标题】:LC-3 code confusionLC-3 代码混淆
【发布时间】:2015-11-21 04:31:24
【问题描述】:

对于这个问题,我们在 LC-3 中给出了一个问题,并被告知要描述它的作用并说明 RESULT 中包含的内容。不幸的是,我在这门语言上苦苦挣扎,我真的很困惑。我只是不明白这些不同的东西是为了什么。这是代码。

        .ORIG x3000
        LD R2, ZERO
        LD R0, M0
        LD R1, M1
LOOP    BRz DONE
        ADD R2, R2, R0
        ADD R1, R1, -1
        BR LOOP
DONE    ST R2, RESULT
HALT
RESULT .FILL x0000
ZERO   .FILL x0000
MO     .FILL x0004
M1     .FILL x0803
       .END

我什至不知道从哪里开始。比如,什么是“.ORIG x3000”?我认为x3000是一个内存位置?如果是这种情况,那么在底部显示“.FILL ...”的地方也不是那些内存位置吗?还是您正在填写的那些数字?我很困惑。

所以我认为第二行将零中的任何内容加载到寄存器 R2 中?然后 M0 被加载到 R0 中,然后 M1 被加载到 R1 中?我对正在加载的内容感到困惑。我们是在加载值,还是只是将内存地址放入寄存器?在所有 LD 指令之后,我们进入一个循环。我认为BRz意味着只要R1不为0,就可以通过循环重新迭代?所以,我猜 R1 是我们的循环控制元素? R2 被添加到 R0 中的任何内容,结果存储在 R2 中。循环结束后,然后RESULT存入R2?

DONE 表示什么?我想如果你想退出一个循环,你会指示计算机停止它后面的那一行。那么为什么 DONE 后面跟着 HALT?

我假设的最后几行是初始化?比如,用 x0000 填充 RESULT。 x0000 是什么?它是一个内存位置,还是一个数字?

有人可以帮我解释一下,或许可以指导我了解这个程序运行时会发生什么?

如果这一次太多了,我很抱歉。我一直在苦苦挣扎,甚至不知道从哪里开始。

【问题讨论】:

  • 我们可以尝试解释所有这些,但您可能应该重新查看您的可用材料并咨询您的老师。 (我假设您是学生。)看起来您缺少非常基本的知识。
  • 我是一名学生。我已经阅读了教科书中的章节,这可能对应于 6-7 次以上,但我仍然不明白。我打算咨询我的教授,但我想也许事先得到一些解释不会有什么坏处。

标签: assembly binary systems-programming lc3


【解决方案1】:

什么是“.ORIG x3000”

设置程序的来源,即这些指令应该在内存中的位置。 x3000 似乎是 LC3 程序的常用起始地址。

上面写着“.FILL ...”的地方不也是那些内存位置吗?或者是 你要填入登记册的那些数字? 我假设的最后几行是初始化?喜欢,填写RESULT 与 x0000。 x0000 是什么?它是一个内存位置,还是一个它 号码?

.FILL 用于定义初始化数据。数字本身将被存储到内存中。

第二行将零值加载到寄存器 R2

是的,因为ZERO 是.FILL x0000 的标签,所以当然为零。

我们是在加载值,还是只是将内存地址放入 注册?

加载值。

我认为 BRz 意味着通过循环返回重新迭代 只要R1不为0?那么,我猜 R1 是我们的循环控制元素?

其实BRz DONE的意思是在之前的结果为零的时候去DONE,所以实际上,是的,循环直到R1变为零。

循环结束后,然后RESULT存入R2?

不,R2 存储在 RESULT 中。

DONE 信号是什么?

这是一个退出循环的标签。这不是一个指令,你可以称之为任何东西。另一方面,HALT 是一条指令,它会停止程序。退出循环不会停止程序,它只是通过在标有标签的不同位置继续执行来停止重复块。

由于循环运行R1 次,并且每次将R0 添加到R2,它计算R1 * R0,由于初始化只是x0803 * x0004。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-04-08
    • 1970-01-01
    • 1970-01-01
    • 2013-04-04
    • 2011-05-14
    • 2012-08-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多