【问题标题】:A LMC(little man computer) program to multiply two negative numbers两个负数相乘的 LMC(小人计算机)程序
【发布时间】:2016-12-07 15:35:29
【问题描述】:

你能帮我写一个 lmc 程序来乘以 2 个负数吗 (-x)*(-y) = xy? 例如,如果你输入 -5 和 -6,它应该给你 30。

我已经为x*y=xy完成了

INP
STA FIRST
INP
STA SECOND
LOOP LDA COUNT
ADD ONE
STA COUNT
LDA TOTAL
ADD FIRST
STA TOTAL
LDA SECOND
SUB COUNT
BRZ ENDLOOP
BRA LOOP
ENDLOOP LDA TOTAL
OUT
HLT
ONE DAT 001
COUNT DAT
TOTAL DAT
FIRST DAT
SECOND DAT

【问题讨论】:

  • 欢迎堆栈溢出!您尝试修改现有代码以使其适用于负数?负数现在会发生什么?如果您需要他人的帮助,重要的是要表明您已投入时间自己先了解它。
  • 你到底卡在哪里了?这里有一个提示:如果值为负数,则在函数开头取反。现在你只是将两个正值相乘。这是有效的,因为负数乘以负数始终是正数,就像正数乘以正数一样。

标签: assembly little-man-computer


【解决方案1】:

您总是可以在将输入相乘之前使输入为正数。这当然要求用户只输入负数,或只输入正数(它不适用于一个负数和一个正数输入)。

在代码中,我添加了一个等于 0 的变量 ZERO。然后我从零中减去用户的输入,我们将得到正数版本。然后就可以用自己写的代码来求解了。

        INP
        BRP JUMP
        STA FIRST
        LDA ZERO
        SUB FIRST
        OUT
JUMP    STA FIRST
        INP
        BRP JUMP2
        STA SECOND
        LDA ZERO
        SUB SECOND
        OUT
JUMP2   STA SECOND
LOOP    LDA COUNT
        ADD ONE
        STA COUNT
        LDA TOTAL
        ADD FIRST
        STA TOTAL
        LDA SECOND
        SUB COUNT
        BRZ ENDLOOP
        BRA LOOP
ENDLOOP LDA TOTAL
        OUT
        HLT
ONE     DAT 001
COUNT   DAT
TOTAL   DAT
FIRST   DAT
SECOND  DAT

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2011-03-04
  • 1970-01-01
  • 2023-02-05
  • 2016-04-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-30
相关资源
最近更新 更多