首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >汇编语言程序设计

汇编语言程序设计
EN

Stack Overflow用户
提问于 2010-01-08 11:46:24
回答 3查看 861关注 0票数 0

我正在尝试写一个程序,它输入一个小于10的正数,并输出第一个数字的和。例如5将是5+4+3+2+1。这些命令是停止、加载、存储、添加、求和、乘法、除、输入、输出、分支、分支,如果不是0,则分支。有人能帮帮我吗。我有点卡住了。好吧,我写的是:

代码语言:javascript
复制
      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,则使用分支。我想我拿到了?所以:

代码语言:javascript
复制
     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

DC=Designated常数,但我需要重复的是减去1,然后加和,直到n等于0。如果不为零则分支为BRGT,如果零为BZ且分支为BR,则分支为load。我知道我需要重复什么,但是我不知道你是怎么用汇编语言做的。

EN

回答 3

Stack Overflow用户

发布于 2010-01-08 11:50:57

由于这听起来像是家庭作业,所以我将从几个部分开始。

  1. 你弄明白这个问题的逻辑了吗?“有点卡住了”可能意味着你不知道这需要怎么做,或者你不确定如何用可用的指令来实现它。如果您还没有弄清楚逻辑,请考虑以下内容-您如何想出术语,如何将它们加在一起,以及如何处理结果?
  2. 如果您弄清楚了逻辑,那么哪些命令将执行每个部分?

如果你有更具体的问题,请随时更新,我会回应的,但一般来说,这样做的政策是提供指导,而不仅仅是编写代码(可能?)家庭作业问题。

编辑:好的,很好,你已经有了一些代码,看起来你在正确的轨道上,但还没有到那一步。我要问你的第一件事是,你是否尝试过执行纸面上的代码。选择一个任意的输入(比如5,就像你的例子一样),一次一条地单步执行代码,看看程序执行的逻辑是否遵循你在步骤1中提出的逻辑。现在,我相信程序不能像编写的那样工作;看看你是否能找到原因,如果不能,我会给你一个提示。

Edit2:太棒了,你已经有答案了,只需要编写代码就可以了。你说过你想重复直到n达到0。那么,根据n是否为0,哪个命令会让您选择两个分支中的一个?

编辑3分支:您假设如果0/分支不是0,则需要使用分支,这是正确的,但我在您的最新代码中没有看到任何分支。我错过了什么吗?另外,在这种情况下,DC的作用是什么?如果你张贴一个钥匙可能会有帮助,这样我就能准确地知道你使用的是哪种指令。正如我之前所说的,试着手动执行你的程序--这会告诉你bug在哪里。我现在给你的提示是识别出你的代码中需要重复执行的部分,并找出它是否确实被重复执行了。

票数 5
EN

Stack Overflow用户

发布于 2010-01-08 11:51:18

尝试先在高级伪代码中写出问题。

然后把它翻译成你的汇编语言。

你可以在这里找到关于汇编语言编程的帮助

http://www.laynetworks.com/assembly%20tutorials.htm

这闻起来像是学校的作业,所以我想这应该足以让你开始行动了。

票数 2
EN

Stack Overflow用户

发布于 2010-01-11 04:51:20

用C语言思考它(假设你知道它)

代码语言:javascript
复制
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种情况下)。

这有帮助吗?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2025368

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档