【问题标题】:How can I ignore "if" part if the "else" part is satisfied?我怎样才能忽略“else”部分的“if”部分得到满足?
【发布时间】:2021-03-17 09:38:09
【问题描述】:

作为一个初学者,我正在尝试解决这个装配练习。

编写一个程序来减去 (X-Y) 并将结果存储在 Z 寄存器中,然后: 检查 Z = 0,将 50 添加到 X reg。 否则减少 Y reg。让 PC = 100。

我不确定是不是这样做的,但是根据我的课本和讲座,我已经达到了这个结果,如果另一部分满意则忽略“如果”部分。

100 SUB Z, X, Y
101 JZ 104
102 DEC Y
103 JMP 105
104 ADD X, 50
105 END

但我担心如果问题不是要求忽略“如果”部分,即使另一部分得到满足,也会导致这样的结果。

100 SUB Z, X, Y
101 JZ 103
102 DEC Y
103 ADD X, 50
104 END

我不知道哪个是该问题的正确答案。 任何帮助将不胜感激。

【问题讨论】:

  • 您的第一个代码示例看起来正确。对于未来的问题,请发布您正在编程的架构和(如果适用)操作系统。

标签: if-statement assembly


【解决方案1】:

你的实际 asm 块看起来是正确的,可以实现你想要的逻辑,所以这里唯一真正的问题是如何解释原始句子。

英文句子的构造类似于编程语言(如 C)中的 if/else 语句,类似于正确的英文句子。

如果上下文不是计算机编程,那么“向 X reg 添加 50”是否是无条件的存在一些问题。但既然是这样,我敢肯定他们的意思是“检查 z 是否 = 50:如果是,则添加 ... else dec ....”。

或者换一种说法,“如果 z = 50,则添加 ... else dec ...”。

使用“检查”这个词来引入这个 if/else 子句会使句子结构出错(因为 if/else 语句不是检查,它是一个基于检查的决定)。这导致不是 100% 清楚你是否总是应该做加法。 在我看来,它仍然是 99.5%,所以你应该使用你的第一个 block。如果您仍然不相信,请给您的讲师发送电子邮件,以确认他们的措辞是什么意思。

如果它们确实意味着您的第二种解释,那么选择编写它的可能性很小。还有非常更清晰的方法,例如“将 50 加到 X,然后,如果 Z 不为 0,则减少 Y”。除非你的作业通常写成故意不清楚的技巧问题,否则你几乎可以排除这种解释。

无论哪种方式,“else”都是“else”;它没有自己的条件。 “if”部分首先有机会匹配条件。说“如果 else 部分得到满足”是没有意义的,因为 else 部分只是在原始条件 满足的情况下作为替代存在。它本身没有任何条件。只有当您在 asm 中实现并可能反转条件以进入 if 主体或跳转到 else 主体时,您才会得到这样的逻辑反转。但是您仍然只是实现一些具有 if 部分条件的逻辑。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-12-17
    • 1970-01-01
    • 2018-05-28
    • 1970-01-01
    • 2012-10-02
    • 1970-01-01
    • 2013-04-12
    相关资源
    最近更新 更多