我正在尝试写一个程序,它输入一个小于10的正数,并输出第一个数字的和。例如5将是5+4+3+2+1。这些命令是停止、加载、存储、添加、求和、乘法、除、输入、输出、分支、分支,如果不是0,则分支。有人能帮帮我吗。我有点卡住了。好吧,我写的是:
IN n
LD n
ADD sum
STO sum
LD n
SUB one
ADD sum
STO sum
BRGT haw
LD n
BR done
haw: OUT sum
done: STOP
DC n 4
DC sum 0
DC one 1 我看到它的工作方式是,加载一些数字n,然后加上一个0的和,然后将这个和存储为n+sum。然后再次加载n并减去1,并将其存储为新的和。但我需要它重复这个过程,直到n达到0。那么我该怎么做呢?
好的,所以我需要做的是,如果为0,使用分支,如果不为0,则使用分支。我想我拿到了?所以:
IN n
LD n
ADD sum
STO sum
BR CAW
CAW: LD n
SUB ONE
STO n
BRGT HAW
BZ TAW
HAW: ADD SUM
STO SUM
BR CAW
TAW: OUT SUM
DC SUM 0
DC ONE 1DC=Designated常数,但我需要重复的是减去1,然后加和,直到n等于0。如果不为零则分支为BRGT,如果零为BZ且分支为BR,则分支为load。我知道我需要重复什么,但是我不知道你是怎么用汇编语言做的。
发布于 2010-01-08 11:50:57
由于这听起来像是家庭作业,所以我将从几个部分开始。
如果你有更具体的问题,请随时更新,我会回应的,但一般来说,这样做的政策是提供指导,而不仅仅是编写代码(可能?)家庭作业问题。
编辑:好的,很好,你已经有了一些代码,看起来你在正确的轨道上,但还没有到那一步。我要问你的第一件事是,你是否尝试过执行纸面上的代码。选择一个任意的输入(比如5,就像你的例子一样),一次一条地单步执行代码,看看程序执行的逻辑是否遵循你在步骤1中提出的逻辑。现在,我相信程序不能像编写的那样工作;看看你是否能找到原因,如果不能,我会给你一个提示。
Edit2:太棒了,你已经有答案了,只需要编写代码就可以了。你说过你想重复直到n达到0。那么,根据n是否为0,哪个命令会让您选择两个分支中的一个?
编辑3分支:您假设如果0/分支不是0,则需要使用分支,这是正确的,但我在您的最新代码中没有看到任何分支。我错过了什么吗?另外,在这种情况下,DC的作用是什么?如果你张贴一个钥匙可能会有帮助,这样我就能准确地知道你使用的是哪种指令。正如我之前所说的,试着手动执行你的程序--这会告诉你bug在哪里。我现在给你的提示是识别出你的代码中需要重复执行的部分,并找出它是否确实被重复执行了。
发布于 2010-01-08 11:51:18
尝试先在高级伪代码中写出问题。
然后把它翻译成你的汇编语言。
你可以在这里找到关于汇编语言编程的帮助
http://www.laynetworks.com/assembly%20tutorials.htm
这闻起来像是学校的作业,所以我想这应该足以让你开始行动了。
发布于 2010-01-11 04:51:20
用C语言思考它(假设你知道它)
int sumnumbers(int input)
{
int output = 0;
input = max(input, 10);
switch (input)
{
case 5:
output += 5;
case 4:
output += 4;
case 3:
output += 3;
case 2:
output += 2;
case 1:
output += 1;
case 0:
output += 0;
break;
}
return input;
}注意缺少break语句(除了在第0种情况下)。
这有帮助吗?
https://stackoverflow.com/questions/2025368
复制相似问题