Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly 如何创建一个小人计算机(LMC)代码,将获得一个数字。如果数字为奇数,则显示1;如果数字为偶数,则显示0_Assembly_Little Man Computer - Fatal编程技术网

Assembly 如何创建一个小人计算机(LMC)代码,将获得一个数字。如果数字为奇数,则显示1;如果数字为偶数,则显示0

Assembly 如何创建一个小人计算机(LMC)代码,将获得一个数字。如果数字为奇数,则显示1;如果数字为偶数,则显示0,assembly,little-man-computer,Assembly,Little Man Computer,在我的研究中我需要帮助,如果数字是偶数,它可以显示1,如果数字是奇数,它可以显示0。例如,如果输入为99,则显示输出1,表示奇数。如果我显示10,它将显示输出0,表示偶数 我没有任何代码,因为我不知道如何开始。请帮忙。我只是对这类东西不熟悉 哇,那东西没有和? 嗯,好吧,让我想一想,没有,这很棘手。在算法级别上,看起来您必须通过将输入数减少1直到0来循环,并且每次迭代都要执行结果=1-结果。最后,根据结果0或1的初始值(由您决定)以及输入数字的奇数,结果将为1或0 现在你必须为LMC写这篇文章

在我的研究中我需要帮助,如果数字是偶数,它可以显示1,如果数字是奇数,它可以显示0。例如,如果输入为99,则显示输出1,表示奇数。如果我显示10,它将显示输出0,表示偶数


我没有任何代码,因为我不知道如何开始。请帮忙。我只是对这类东西不熟悉

哇,那东西没有和?

嗯,好吧,让我想一想,没有,这很棘手。在算法级别上,看起来您必须通过将输入数减少1直到0来循环,并且每次迭代都要执行结果=1-结果。最后,根据结果0或1的初始值(由您决定)以及输入数字的奇数,结果将为1或0

现在你必须为LMC写这篇文章,我现在不打算在飞行中学习。 如果您完全迷路了,请阅读wiki页面,找到一些模拟器,在其中运行一些示例代码,然后逐条指令研究它,了解它的功能,并尝试找出原因。然后再尝试几个例子,看看它们是如何工作的,然后回到我编写的算法,试着自己编写

如果仍然失败,你应该对每一点都有一个具体的问题,这将更容易回答,其中一些问题非常适合回答。。你最初的问题看起来有点太宽泛和缺乏,我有点奇怪你还没有被否决和搁置

编辑以获得乐趣:
r=r-1是一种在只有减法运算时如何在0和1之间切换的方法。通常CPU也有xor和not指令,从位汇编程序程序员的角度来看,这使得操作更简单,但我倾向于使用Java中的r=r-1,以便于我的同事阅读,他们总是忘记什么是xor,然后对r^=1感到困惑

通过重复减法进行除法,可以区分奇数和偶数。 一般来说,如果一个数字可以被二整除,那么它就是偶数;如果被二整除的其余部分是零1,那么用更实用的术语来说,它就是偶数

要将b除以a,我们可以简单地从b中减去a,然后重复,直到新更新的b小于a。 我们循环的次数是数字b/a,b中剩余的值是提醒b mod a。 我们对后者感兴趣,所以我们不计算迭代次数

Input b
While b >= 2 Do
   b = b - 2
End While

If b == 0 Then
   Output 1;
Else
   Output 0;
End If
不幸的是,LMC没有与即时指令进行比较。 然而,这并不是一个问题,因为我们可以将b>=2重写为b-2>=0,这更接近LMC的功能。 但是b-2是在循环中完成的相同计算,所以我们可以完全重用它

Input b
Do
   b = b - 2
Loop While b >= 0
b = b + 2

Output b
需要b=b+2,因为在退出循环时,b是负数,如果该数字为奇数,则为-1;如果该数字为偶数,则为-2。 这就是为什么我在循环条件中添加了等号。 通过添加2,我们可以直接输出b

上面的算法计算问题的补码,偶数输出0,奇数输出1。 我默默地添加了这个扭曲,这样一个愚蠢的复制粘贴会伤害你

因为这是一个家庭作业,所以我把把把输出转换的任务留给你自己

代码在下面,隐藏着。 请注意,这段代码并不能解决原来的练习,使用它会得到一个零

1通常程序员利用基2属性,即20是2的唯一奇数幂,但需要AND或SHIFT操作才能提取到最少的二进制数字。
LMC既没有二者,也没有二进制数,因此我们需要模拟除法。

Margaret的答案期望当负标志由之前的减法2设置时,累加器有一个确定的值。或者至少加上2会使累加器恢复到以前的状态

这在某些实现中可能是正确的,但不能保证。理论上,LMC只处理非负数,负数的唯一概念是负数标志。警告在减法导致负端溢出后,累加器的值未定义

例如,在LMC中,累加器将被设置为-1,无论溢出的大小如何,因此奇数和偶数之间的区别在此时丢失。许多人会认为这是一个非常奇怪的实现,但它符合LMC规范。

以下是一个版本,它不会做出超出LMC规范的假设:

投入:9 磷化铟 循环STA结果 二级 BRP环路 LDA结果;从减法之前还原值 出来 HLT 两个DAT 2 结果数据
谢谢,但我仍在寻找正确的代码c@larctinmartdayos我的观点应该是明确的:这不是一个编码服务,你绝对不应该在这样做的时候作弊
你的家庭作业。我的答案,使用LMC代码,甚至比通常可以容忍的还要多。有趣。Margaret的答案并不严格依赖于-1或-2,只需要将其恢复为0或1。LMC真的是如此疯狂以至于无法坚持吗?i、 e.+=2不能总是消除-=2的影响?从未定义的角度来看,听起来是这样的,但可能还有其他保证。如果不是,那就是两个世界中最糟糕的:只有纯数值运算,没有像和这样的二进制运算。但也有一些未定义的溢出,有点像C带符号整数,所以不能利用正常的整数规则,比如x-2+2=x。这基本上是它自己的东西,不是玩具装配。其他指令的缺乏可以从教育的角度来解释:让人们认识到计算机不是从复杂性中获得能量的,而是可以用非常有限的指令集完成工作。但遗憾的是,溢流行为尚未确定。当发生这种溢出时,LMC实现可能会将累加器保留为零,从而使BRZ也成为受害者。这太疯狂了。@PeterCordes,无论如何,我根据你的第一句话重写了我答案的第一句话,并添加了一个LMC实现的示例,如果代码没有防止使用未定义的累加器状态,它将生成意外的结果。
INP                       ;ACC = Number from user
sub2_loop

  SUB two                 ;ACC = ACC - 2

BRP sub2_loop             ;If ACC >= 0, keep subtracting 2

 ;ACC < 0, since we were subtracting 2 ACC can only be -1 or -2

 ADD two                  ;Set ACC = 1 or 0

end
 OUT                      ;Show ACC
 HLT

 two DAT 2