Eri*_*ric 0 compiler-construction assembly pseudocode
我正在尝试编写一个输入小于10的正数的程序,并输出第一个数字的总和.例如,5将是5 + 4 + 3 + 2 + 1.命令是停止,加载,存储,添加,求和,乘,除,输入,输出,分支,分支(如果为0),如果不是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
Run Code Online (Sandbox Code Playgroud)
那么我看到它工作的方式是你加载一些数字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 1
Run Code Online (Sandbox Code Playgroud)
DC =指定常数,但我需要重复的是减去1并加上总和直到n达到0.如果不为零,则为BRGT和分支,如果零为BZ且分支为BR,则LD为负载.我知道我需要重复什么,但我不知道你是如何用汇编语言做的.
因为这听起来像家庭作业,我会从一些作品开始.
你有没有解决这个问题的逻辑呢?"有点卡住"可能意味着你不知道如何做到这一点,或者你不确定如何用可用的指令来实现它.如果你还没有弄清楚逻辑,那么考虑一下 - 你如何提出这些条款,如何将它们加在一起,以及你如何处理结果?
如果你已经计算出逻辑,那么哪些命令将执行每个部分?
如果你有更具体的问题随时可以更新,我会回复,但一般来说SO的政策是提供指导,而不是只为(可能的?)作业问题编写代码.
编辑:好的,你有一些代码,看起来你是在正确的轨道,但还没有.我要问你的第一件事是你是否试图在纸上执行代码.选择一个任意输入(比如5,如你的例子中所示)并一次一步地执行代码,看看程序执行的逻辑是否遵循你在步骤1中提出的逻辑.现在我相信程序不起作用; 看看你能不能找出原因,如果没有,我会给你一个提示.
编辑2:太棒了,你是如此接近,你已经有了答案,只需要编码.你说你要重复,直到n达到0.那么,哪个命令会让你取两个分支中的一个取决于n是否为0?
编辑3:你是正确的假设你需要使用分支如果0 /分支不是0,但我没有在你的最新代码中看到任何这些.我错过了什么?另外,在这种情况下DC是什么?如果您发布密钥可能会有所帮助,因此我确切地知道您正在使用哪些说明.正如我之前所说,尝试手动执行您的程序 - 这将显示错误的位置.我现在的提示是确定需要重复执行的代码部分,并确定它是否确实重复执行.