Computer science 小人计算机中的负除法

Computer science 小人计算机中的负除法,computer-science,cpu-architecture,little-man-computer,Computer Science,Cpu Architecture,Little Man Computer,当我试图在LMC中用负数除法时,我总是陷入一个循环中。例如,10/2将给我5,而-10/-2也将工作,并给5。问题是当除法中只有一个负数时,例如10/-2和-10/2。。。10-2-2-2-2-2=0 ; -10--2--2--2--2--2--2=0,但-10-2-2-2-2不等于0。我想做的绝对值,但没有给我带来什么。。。现在真的很拮据。如果有一个聪明的人能告诉我如何启迪和结束我的痛苦,请。我不知道你是怎么做的(因为你没有发布代码),但通常的除法是通过反复减法大小(没有符号),然后调整符号

当我试图在LMC中用负数除法时,我总是陷入一个循环中。例如,10/2将给我5,而-10/-2也将工作,并给5。问题是当除法中只有一个负数时,例如10/-2和-10/2。。。10-2-2-2-2-2=0 ; -10--2--2--2--2--2--2=0,但-10-2-2-2-2不等于0。我想做的绝对值,但没有给我带来什么。。。现在真的很拮据。如果有一个聪明的人能告诉我如何启迪和结束我的痛苦,请。

我不知道你是怎么做的(因为你没有发布代码),但通常的除法是通过反复减法大小(没有符号),然后调整符号


例如,使用
10/-2
,只需重复使用10减去2(得到5),然后根据原始符号调整符号。如果除数和被除数有不同的符号,则结果为负。否则结果是非负的。

我认为说“绝对值”更清楚。如果不考虑符号,
被除数-=除数
将加上2,这将永远不会超过零(通过溢出除外)。如何获得绝对值?如果我输入8和-8,那么在这两种情况下如何将8作为绝对值?@tariklaouisset:取决于指令集。您几乎肯定会有一个
否定
指令,它可以将一个值设置为负的对应项,还有一个
分支if negative
,它可以用于为负值选择不同的代码路径。@PeterCordes,改为“使用大小”而不是“不考虑符号”@tariklaouisset:表示如果结果为负值,则子集合将进行标记。但是,LMC首先不支持负数,因此在这种情况下,SUB的累加器结果是未定义的。但是,如果您有一个版本的LMC确实支持负数,那么您应该实现
0-x
,然后在负数的基础上进行分支(最初的结果已经不是负数)。请注意,LMC不支持负数-例如,如果结果小于零,则减法的结果未定义。它不是二进制计算机,它只处理纯数字而不依赖于格式。假设您使用的LMC模拟器确实定义了负数的行为。如果您仍然需要回答您的问题,请说明您使用的是哪种LMC风格,因为负数输入累加器没有定义。它可能会导致10秒补码,或设置负标志,或其他一些。如果没有关于LMC行为的明确说明,则无法回答此问题。发布您当前的代码也很好,因此我们可以建议在哪里修改它,而不是生成全新的代码。“请结束我的痛苦”:一个月,对这里的评论没有反应。