如何使用MARIE找到偶数?

时间:2018-03-13 05:52:23

标签: assembly marie

我正在开展一个项目,但我被困住了。我尝试编写一段代码,检查给定的数字是否为偶数减去2(给定的数字不能超过6)。如果它甚至打印0,如果它是奇数,则打印1。

    int count=input.nextInt()
    int parity=0

    while (count>0)
        count=count-2;
        if (count<0) {
            parity=parity+1;
            System.out.print(parity);
        }
        else if (count==0) {
            System.out.println(parity);
        }

^^这是我尝试翻译成MARIE语言的java代码,但没有任何作用。

我发布了我的MARIE代码,但我觉得它太混乱了:/

1 个答案:

答案 0 :(得分:1)

您只需将低位检查为0 /非零。正常的体系结构有一条AND指令,可以简化,MARIE only has add/sub(比较大于或小于)。

但是,是的,您的循环将起作用,对数字let y:Employee = { name: x.name }; //OR let { age, ...y } = x; 进行O(n)次迭代。如果你把它写成n循环,比如

,那么在asm中实现会容易得多
do{}while()

您可以在n = input; do { n-=2; // sub }while(n>=0); // skipcond // n==0 or -1 for even or odd 操作中使用O(log(n))作为左移:addAC+AC相同。这样做15次,将低位移到顶部,其他位移出。 (累加器,AC, is 16 bits wide)。

遗憾的是,这对MARIE来说真的很不方便,因为ADD only works with a memory source operand而不是AC << 1。因此,您必须存储 AC,以便将其用作ADD的内存源操作数。

(当你知道你的输入在0..6 的范围内时,绝对不值得。在这种情况下,它只需要AC循环最多3次迭代得到结果,相对于此总是15。但是对于无限制的输入,n-=2版本可能需要32768次迭代!或者如果我们将此限制为正有符号整数则为16384; n-=2版本不会甚至可以用于负整数)

例如:

n-=2

循环是有意义的,特别是如果你用2或其他东西展开它。如果AC只有8位,完全展开只需要7个STORE / ADD指令,但15个有点多。