• ベストアンサー

アセンブリ言語の分岐命令の動作の問題です。

以下のプログラム実行後のレジスタ$v0の値を書け,16進の数値には0xをつけること 問題0: addi $s0,$zero,2 addi $s1,$zero,5 slt $at,$s1,$s0 bne $at,$zero,L1 sub $v0,$s0,$s1 beq $zero,$zero,L2 L1: add $v0,$s0,$s1 L2: addi $v0,$v0,1 分かる方がいましたら回答お願いいたします

noname#194351
noname#194351

質問者が選んだベストアンサー

  • ベストアンサー
  • ybnormal
  • ベストアンサー率50% (220/437)
回答No.2

MIPSアーキなら、10進で―2 16進への変換は自分でやってください。

noname#194351
質問者

お礼

分かりました。 どうもありがとうございました。

その他の回答 (1)

回答No.1

ニーモニックはCPU、アセンブラによって違いますからこれが解らないと解りません。

noname#194351
質問者

お礼

なるほど、そうでした。 ご指摘ありがとうございます。

関連するQ&A

  • アセンブリ言語の問題です。

    以下のプログラム実行後のレジスタ$v0の値を書け,16進の数値には0xをつけること 問題0: addi $s0,$zero,0 addi $s1,$zero,2 beq $s0,$s1,L1 sub $v0,$s0,$s1 beq $zero,$zero,L2 L1: add $v0,$s0,$s1 L2: addi $v0,$v0,1 分岐命令の動作の問題です。分かる方がいましたら回答をよろしくお願いいたします。 sub:減算 addi:即値付き演算命令 beq:等しい L:ラベル

  • アセンブリ言語の問題です。

    長い内容になっていますがご了承ください 演算命令の動作 以下のプログラム実行後のレジスタ$v0の値を書け,16進の数値には0xをつけること 問題0: addi $s0,$zero,8 addi $s1,$zero,8 addi $s2,$zero,3 addi $s3,$zero,11 add $t0,$s0,$s1 add $t1,$s2,$s3 sub $v0,$t 論理演算命令の動作 以下のプログラム実行後のレジスタ$v0の値を書け,16進の数値には0xをつけること 問題0: addi $s0,$zero,0x8 addi $s1,$zero,0x8 addi $s2,$zero,0xd addi $s3,$zero,0x2 and $t0,$s0,$s1 and $t1,$s2,$s3 or $v0,$t0,$t1 以上です。この問題が分かる方がいましたら回答お願いします。

  • MIPSのアセンブルコードが解りません(ノД`)・゜・。

      sll $a2 , $a2 , 2   sll $a3 , $a3 , 2   add $v0 , $zero , $zero   add $t0 , $zero , $zero outher : add $t4 , $a0 , $t0   lw $t4 , 0($t4)   add $t1 , $zero , $zero inner ; add $t3 , $a1 , $t1   lw $t4 , 0($t3)   beq $t3 , $t4 , skip   addi $v0 , $v0 , 1 skip: addi $t1 , $t1 , 4   bne $t1 , $t2 , inner   addi $t0 , $t0 , 4   bne $t0 , $a2 , outher 自分は大学生でコンピュータのネットワークを専攻しているのですが… アーキテクチャの授業はハードウェアの内容であまり知識がありません。 上記のコードは一体何をするものなのでしょうか? 手続きとして呼び出せないカタチなので実行できずに困っています。 〆切がもう間近で非常に困っています。 詳しい方よろしくお願い致します。

  • 命令セットとコンパイルの問題です.

    命令セットとコンパイルの問題です. 問)1次のプログラムは,何を計算するのか説明せよ begin: addi $v0,$zero,0 loop: lw $v1,0($a0) addi $v0,$v0,1 sw $v1,0($a1) addi $a0,$a0,1 addi $a1,$a1,1 bne $v1,$zero,loop finish: halt ;ここに来たら停止するもの

  • MIPS関連です。

    MIPSに関する以下の問題についてどなたか添削お願いします。 ・1~6のCのステートメントをMIPSのアセンブリコードで表せ。 ・1~6のCのステートメントを実行するためにMIPSのアセンブリ命令がいくつ必要か。 ・変数f, g, h, i, j の値が1, 2, 3, 4, 5であるならば最終的なfの値はいくらか。 1. f = g + h + i + j; add t0, g, h add t1, i, j add f, t0, t1 ・3つ ・14 2. f = g + (h + 5); addi s0, h, 5 add f, g, s0 2つ ・10 3. f = g + f + i; add t0, g, f add f, t0, i ・1つ ・7 4. f = g + (h + 2) addi s0, h, 2 add f, g, s0 ・2つ ・7 5. f = f + g + h + i + j + 2; add s0, f, g add s1, h, i add s2, s1, s0 add s3, s2, j addi f, s3, 1 ・5つ ・15 6. f = g - (f + 5) addi t0, f, 5 sub f, g, t0 ・2つ ・4 ・1~6のMIPSのステートメントをCのステートメントで表せ。 ・変数f, g, h, i の値がそれぞれ1, 2, 3, 4ならば最終的なfの値はいくらか。 1. add f, g, h f = g + h; ・5 2. addi f, f, 1 add f, g, h f = f + 1; f = g + h; ・4 3. add f, f, h f = f + h; ・4 4. sub f, $0, f addi f, f, 1 f = f + 1; f = $0 + f; ・2 5. add f, -g, h f = -g + h; ・1 6. addi h, f, 1 sub f, g, h h = f + 1; f = g + h; ・4

  • アセンブリプログラムの問題です。

    アセンブリプログラムの勉強をしているのですが、以下の問題がわかりません。 (1) 変数f, g, h, i, j はCのプログラム内で32ビットの整数として宣言されているものとする。 以下のCのステートメントをMIPSのアセンブリコードで表せ。 また、f, g, h, i, j の値がそれぞれ1, 2, 3, 4, 5 であるならば最終的なfの値はいくつか。 a. f = g + f + i ; b. f = g + (h + 2); (2) 変数f, g, h, i, jはそれぞれ$s0, $s1, $s2, $s3, $s4に割り当てるられているものとする。また、配列AとBのベースアドレスは、それぞれレジスタ$s6 と$s7 に割り当てられているものとする。 次のCのステートメントをMIPSのアセンブリコードで表せ。 a. f = g + h + B[4] ; b. f = g - A[ B[4] ] ; c. f = -g + h + B[1] ; d. f = A[ B[g] + 1 ] ; (3) (2)の設定において、次のMIPSのステートメントをCのステートメントで表せ。 また、可能ならばこのMIPSアセンブリコードを同じ機能を果たしながらMIPS命令の数が最小になるように書き直せ。 a. add $s0, $s0, $s1 add $s0, $s0, $s2 add $s0, $s0, $s3 add $s0, $s0, $s4 b. lw $s0, 4($s6) 以上です。わかるものだけでも良いので教えてもらえますでしょうか?

  • アセンブラに関する質問

    アセンブラに関する質問 現在アセンブラの勉強をしている者ですが2つ質問があります (1)以下のサイトの分岐とジャンプ命令の説明にPC+4という記述があるのですがこれはメモリアドレスを指しているのですか?そうだとしたら、4というのはデータ語長が4バイトだとだからという意味だと思うのですがPCというのは何なんでしょうか? R3000 URI:http://ja.wikipedia.org/wiki/R3000#.E5.91.BD.E4.BB.A4.E3.82.BB.E3.83.83.E3.83.88.E3.81.AE.E6.A6.82.E8.A6.81 (2)レジスタr1がレジスタr2の値より小さいとき処理Aと処理Bをさせる方法はどうしたらいいでしょうか?自分が思うに addi r2, r2, 100 ?←ループの始まりを知らせる命令を用意する 処理A 処理B addi r1, r1, 1 ble r1, r2, ?←ループの始まりに行く値をセットする という命令を書けばいいと思うのですが?の部分の書き方が分かりません。 使用できる無条件、条件分岐命令は以下のものが指定されています。 無条件分岐:j, jr, jal 条件分岐:beq, bne, blt, ble

  • A 8000H

    A 8000H B 3200H C 1100H (1)ADD A,B Aレジスタの内容 フラグCy(Bw),V,S,Z (2)SUB B,C Bレジスタの内容 フラグCy(Bw),V,S,Z この問題の答えが分かりません。 (1)はB200Hで、Cy(Bw),V,S,Zは全部0かなと思っているのですが・・・

  • PICの命令DAWについて

    PICのアセンブラーを勉強中の初心者です。以前にも何度か質問させていただいております。 Wレジスタの値を2桁のBCDに変換するというDAWコマンドの働き方がよくわかりません。 使用中の教本では「8ビットのWレジスタの上位4ビット、下位4ビットをそれぞれ独立にBCDデータに変換する。」とあるのですが、これは次のように解釈してよいのでしょうか? 例えば10進で「85」という数値がWレジスタにあったとすると、これはバイナリーでは '01010101' ですが、これが’8’と’5’を表す '1000' と '0101' に変換されるということでしょうか?つまり、DAW実行後のWレジスターは '10000101' すなわち、「133」という数値になるということでしょうか? 詳しい方、どうぞよろしくお願いいたします。 それから、前もって申し上げておかないといけないのですが、ご回答をいただいても、こちらからお礼を出来ないということが頻繁にあります。お礼の文章を入力してボタンを押しても、その操作は出来ませんという旨のメッセージが出てきて、何度やり直しても出来ません。それで今まで最初の回答者さんをベストアンサーにして質問を締め切るということをやってきました。今回も、もしお礼を出せなくなっても、全てご回答をいただいた方々には深く感謝いたしますので、悪しからずご了承ください。

  • MIPS Assembly

    MIPSアセンブリの授業を取っている者です。習い始めたばかりでいきなり複雑な課題を出されてしまいました。 使用しているPCは大学にある普通のDELLでOSはVISTAです。spim,PCspim,xspimで作成実行しろと言われました。 program inputとしてwindow,image,sizeを、return値として$v0,$s0,$s1を用意します。 windowは4×4サイズの2次元配列を、imageは16×16サイズの2次元配列を持ち、それぞれのサイズはsizeにストアされます。 問題の内容ですが(わかりずらいかもしれませんが、すみません)、例えば、配列windowに 0 1 2 3 1 2 3 4 2 3 4 5 3 4 5 6 そして配列imageに 0 1 2 3 0 0 0 0 0 0 0 0 0 0 0 0 1 2 3 4 4 5 6 7 8 9 10 11 12 13 14 15 2 3 32 1 2 3 12 14 16 18 20 22 24 26 28 30 3 4 1 2 3 4 18 21 24 27 30 33 36 39 42 45 0 4 2 3 4 5 24 28 32 36 40 44 48 52 56 60 0 5 3 4 5 6 30 35 40 45 50 55 60 65 70 75 0 6 12 18 24 30 36 42 48 54 60 66 72 78 84 90 0 7 14 21 28 35 42 49 56 63 70 77 84 91 98 105 0 8 16 24 32 40 48 56 64 72 80 88 96 104 112 120 0 9 18 27 36 45 54 63 72 81 90 99 108 117 126 135 0 10 20 30 40 50 60 70 80 90 100 110 120 130 140 150 0 11 22 33 44 55 66 77 88 99 110 121 132 143 154 165 0 12 24 36 48 60 72 84 96 108 120 132 0 1 2 3 0 13 26 39 52 65 78 91 104 117 130 143 1 2 3 4 0 14 28 42 56 70 84 98 112 126 140 154 2 3 4 5 0 15 30 45 60 75 90 105 120 135 150 165 3 4 5 6 の値が入っているとします。そしてimageの一番左端上を座標(0,0)とします。 次にwindowの4×4のマスをimageの一番左端上の4×4のマスと比較し、同じ座標にあるwindowの値とimageの値の絶対値を求めます。上の例ではこうなります。 window   比較するimageのマス 0 1 2 3      0 1 2 3 1 2 3 4      1 2 3 4 2 3 4 5      2 3 32 1 3 4 5 6      3 4 1 2 4×4のマスですから、合計16個の絶対値が求まります。そしてその16個の絶対値を足します。この例では絶対値の合計は40になります。 それが終わったらwindowのマスをそのままx軸に1、右にずらします。そしてまた同じように、同じ座標にあるwindowの値とimageの値の絶対値を計16個求め全て足します。今度の比較はこうなります。 window   比較するimageのマス 0 1 2 3      1 2 3 0 1 2 3 4      2 3 4 4 2 3 4 5      3 32 1 2 3 4 5 6      4 1 2 3 この作業を13回繰り返すと、windowがimageの一番右端に到達します。そうしたらwindowをimageの一番左端に戻します。ただしこの時、windowをY軸に1、下にずらします。 window   比較するimageのマス 0 1 2 3      1 2 3 4 1 2 3 4      2 3 32 1 2 3 4 5      3 4 1 2 3 4 5 6      0 4 2 3 そして同様の事をwindowがimageの一番右端下に来るまで繰り返します。上の例では最後の比較はwindowとimageの値は全て同じですから全ての絶対値は0なので合計値も0になります。 そして合計169個の値が求まるはずです。その169個の中から一番小さい値を$v0に格納します。次にその一番小さい値がどこで求まったかわかるように、比較したimageの4×4のマスの一番左端上のX座標を$s0に、 Y軸座標を$s1に格納し、$v0、$s0、$s1の値を出力します。上の例では、最後の比較が最小値(0)でしたので、$v0=0,$s0=12,$s1=12となります。 どなたかお解かりになる方いらっしゃいますでしょうか。宜しくお願いいたします。 配列が見にくい場合はこちらをごらん下さい。 pass: assembly http://www.dotup.org/uploda/www.dotup.org2214.txt.html

専門家に質問してみよう