0

このコードを Mips に変換するにはどうすればよいですか?

    int n = 100; int sum = 0; while (n>0) {
    sum = sum + n;
    n--; }

これまでのところ、これを完了するために何をすべきかわかりません。

    .data

    n: .word 100

    .text

    main:

    la $t0, n   
    lw $t1, 0(t0)
    li $so, 0

    Loop:
       bgt $t1, $zero, EXIT
       add $t1, $s0, $t1
       addi $t1, $t1, -1

       j Loop

    exit:
4

4 に答える 4

1

「Mips」は言語ではありません。MIPS 命令セット アーキテクチャ (ISA)。C コードを MIPS アセンブリ コードに変換する方法を理解しようとしていますか?

これは、パターソンとヘネシーの教科書の宿題のようです。もしそうなら、教授のオフィスアワーに行って助けを求めるべきです。ほぼすべての大学のアカデミック ハンドブックには、オンラインで宿題のヘルプを求めることは非倫理的であるという声明が含まれています。

リクエストが宿題でない場合、その C コードを MIPS アセンブリ コードに変換する最善の方法は、コンパイラを使用することです。単純なループの場合、コンパイラは手動で生成するよりも効果的なコードを生成します。たとえば、「gcc -march=native -O3」は、パイプラインの深さとキャッシュのレイテンシを考慮して、コンパイルしている正確な CPU 用に最適化するコードを生成します。

どうしてもアセンブリ コードを表示する必要がある場合は、"gcc -S" を使用してアセンブリ ファイルを生成します。

于 2013-10-03T02:10:01.430 に答える
0

bgt $t1, $zero, EXIT はあなたが望むものの反対だと思います。while(n > 100) を変換したいようですが、while ループ内でコードを実行する別の方法を作成してから、bgt $t1, $zero, . 私が間違っている場合は修正してください。

于 2013-12-09T19:44:51.837 に答える
0

Mips には、言うまでもなくループはありません。代わりに、条件付きの jump ステートメントを使用して、それをループします。

于 2013-10-03T02:12:36.083 に答える