用汇编乘以两个数字

时间:2017-01-08 17:28:04

标签: assembly

我需要构建返回c = a * B的汇编代码。 订单:

  1. INC - 提高存储在一个寄存器中的值。
  2. DIC - 减少存储在一个寄存器中的值。
  3. JNZ -Jump到代码中的一个点(LABEL)。只要是最后一个 操作是在代码行附近完成的,不等于零。
  4. HALT - 停止代码。
  5. 你可以使用几个寄存器(不太可取) 并将所有寄存器的值初始化为零。

    所以,我尝试这样做,但不幸的是我被卡住了。

    //检查A || b!= 0。

    INC a 
    DEC a 
    Jnz Label 1
    HALT .
    
    Label 1
    INC b
    DEC b
    Jnz Label 2 
    HALT .
    

    .....

1 个答案:

答案 0 :(得分:2)

如果不使用第四个寄存器,我看不出怎么做。我跳过let fileManager = FileManager.default fileManager.removeItem(at: storeUrl) a b的测试,因为您已经展示了如何做到这一点。

我想要两个嵌套循环,以便0递增c x a次。问题是记住下一次内循环b是什么,这就是第四个寄存器的目的。用C编写,所以我可以很容易地测试它。

b x 3乘以5

c = a * b

节目输出

#include <stdio.h>

int main(void)
{
    int a=3, b=5, c=0, d=0;
    do {                    // outer loop a         label1:

        do {                // inner loop b
            c++;            // accumulate product c         INC c
            d++;            // remembering b                INC d
            b--;            // next inner loop b            DIC b
        } while(b != 0);    //                              JNZ label1

        do {                // inner loop d         label2:
            b++;            // restoring b                  INC b
            d--;            // next inner loop d            DIC d
        } while(d != 0);    //                              JNZ label2

        a--;                // next outer loop a            DIC a
    } while(a != 0);        //                              JNZ label1
                            //                              HALT
    printf("%d", c);
    return c;
}

正如您所看到的,可以使用您可能使用的四条指令来实现。