【问题标题】:LMC - Not going into negative (little man computer)LMC - 不负(小人电脑)
【发布时间】:2012-02-10 21:56:10
【问题描述】:

刚刚在这里与 Little Man Computer 合作,遇到了一个让我烦恼的问题。由于没有 if 等,我发现当从偶数中减去时,很难阻止奇数变成负数。例如,我在一个循环中从 10 中取 3,分支为零。但这永远不会达到零。所以我想知道如何让应用程序在它变为负数之前停止,例如从循环中的 10 中减去 3 将是 10、7、4、1、-2。但我希望它停止在 1,因此不会陷入负面并克服这个问题。

这是我目前所拥有的,仅适用于偶数和偶数:

INP
STA DEC
INP
LOOP SUB DEC
OUT
BRZ QUIT
BRA LOOP
QUIT HLT
DEC DAT

(首先,我想将第二个输入声明为变量是个好主意,对吧?或者不是?)

如果您能帮助我,我们将不胜感激。并想出一个永久的解决方案。

【问题讨论】:

    标签: assembly low-level little-man-computer


    【解决方案1】:

    我知道我会后悔的,但由于这看起来相当简单,我会在无法测试的情况下尝试这个:-)

    INP
    STA DEC
    INP
    LOOP SUB DEC
    BRP OUTPUT
    ADD DEC             <-- we went negative, so add back once
    HLT
    OUTPUT OUT
    BRA LOOP
    DEC DAT
    

    【讨论】:

    • 如果初始数字是 10 并且减量是 3 会发生什么? (10,7,4,1,-2 - 仍然不起作用)看来 OP 有一个站不住脚的问题。
    • @KevinDTimm 我第一次听说 LMC,所以我很可能错过了一些重要的东西,但如果事情像我想象的那样工作,我看不到其他值的问题......?最后减法和加法可能不漂亮,但我直截了当。
    • 你和我都有,但我认为他的问题的解决方案并不简单 - OPs 示例将达到 -2,单个增量不起作用,需要 2 个增量归零——想象周五下午的排列让我的大脑哭泣。 (因此“站不住脚”的评论)
    • @KevinDTimm 我不确定我理解你的意思:) DEC 是一个“变量”,而不是一个指令,这是造成混乱的原因吗?无论如何,在atkinson.yorku.ca/~sychen/research/LMC/LittleMan.html 找到了一个模拟器,模拟时似乎可以工作:)
    • 工作得很好,伙计。非常感谢。我明白你们的意思,小人电脑是一种非常模糊的语言,让我说模糊的语言有其积极和消极的一面,你需要大量的“变通方法”。
    【解决方案2】:
    INP
    STA first
    INP
    LOOP SUB first
    BRP yesrepeat
    ADD one
    HLT
    yesrepeat OUT
    BRA LOOP
    first DAT
    one dat 001
    

    【讨论】:

      【解决方案3】:
      INP
      STA DEC
      INP
      LOOP SUB DEC
      OUT
      BRP LOOP 
      HLT
      DEC DAT 
      

      【讨论】:

        猜你喜欢
        • 2020-07-22
        • 1970-01-01
        • 2021-02-08
        • 1970-01-01
        • 2017-10-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多