- ベストアンサー
アセンブリ言語の問題です。
以下のプログラム実行後のレジスタ$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:ラベル
- C・C++・C#
- 回答数2
- ありがとう数1
- みんなの回答 (2)
- 専門家の回答
関連するQ&A
- アセンブリ言語の問題です。
長い内容になっていますがご了承ください 演算命令の動作 以下のプログラム実行後のレジスタ$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 以上です。この問題が分かる方がいましたら回答お願いします。
- ベストアンサー
- C・C++・C#
- アセンブリ言語の分岐命令の動作の問題です。
以下のプログラム実行後のレジスタ$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 分かる方がいましたら回答お願いいたします
- ベストアンサー
- C・C++・C#
- 演算装置とフラグレジスタの関係
条件分岐などで、ジャンプ命令するかどうかは、CPUがフラグ・レジスタの値を参照し判断するのにも関わらず、比較のための命令が実行されると、CPUの演算装置は、内部で減算をおこない、この結果をフラグレジスタに記録されるのは何故ですか?CPUで値を出せるのならわざわざフラグレジスタの値を参照する必要が無いと思うのですが・・・
- ベストアンサー
- その他(プログラミング・開発)
- 命令セットとコンパイルの問題です.
命令セットとコンパイルの問題です. 問)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のアセンブルコードが解りません(ノД`)・゜・。
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 自分は大学生でコンピュータのネットワークを専攻しているのですが… アーキテクチャの授業はハードウェアの内容であまり知識がありません。 上記のコードは一体何をするものなのでしょうか? 手続きとして呼び出せないカタチなので実行できずに困っています。 〆切がもう間近で非常に困っています。 詳しい方よろしくお願い致します。
- ベストアンサー
- その他(学問・教育)
- 非常に限定された条件での8バイト加算
アセンブリプログラム上で16ビット同士を加算したいと考えています。 ただ、非常に条件が限定されていて、 【簡単な構成について】 ・レジスタは8ビットAレジスタ一つのみ ・8ビット演算器(ALU)は一つのみ ・条件コードはZフラグのみ(ただし、書き換わるのは命令7.、8.でのみ) 【使える命令】 1.Aレジスタに即値をロード 2.Aレジスタに指定アドレスのデータをロード 3.Aレジスタから指定アドレスにストア 4.無条件分岐 5.Aレジスタand即値=0ならば分岐 6.Aレジスタor即値=0ならば分岐 7.Aレジスタと即値のandをとって書き戻し 8.Aレジスタと即値のorをとって書き戻し 9.Aレジスタと即値を加算して書き戻し a.Aレジスタと指定アドレスのEORをとって書き戻し b.Aレジスタと指定アドレスのデータを加算して書き戻し c.間接アドレスのデータをAレジスタにロード d.Aレジスタの内容を間接アドレスにストア e.Aレジスタから即値を減算して書き戻し f.Aレジスタから指定アドレスデータを減算して書き戻し 普通に考えるならば、下位8ビット同士の加算、上位8ビット同士と下位8ビットのキャリーを加算すれば出来ます。 しかしながら、この限定された条件に於いてはなんらかの自由に使えるフラグ、もう少し汎用的に使える分岐命令が無ければ無理だと個人的には考えています。 出来るか、出来ないか、だけでも結構ですので、ご教授お願いします。
- ベストアンサー
- 科学
- アセンブラに関する質問
アセンブラに関する質問 現在アセンブラの勉強をしている者ですが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
- ベストアンサー
- その他(プログラミング・開発)
- 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
- 締切済み
- C・C++・C#
- アセンブリ言語の質問です
「 100人分の試験点数がある。 一人分のデータは32bit 符号無し整数でそれが連続して格納されている.先頭のアドレスがEAXで与えられる時,全員の点数の合計をEAXに入れて戻るようなサブルーチンをアセンブリ言語で書きなさい。 • loop unrollingを使用して,ループ内容を4倍に展開して,条件分岐数を減らすこと • 他のレジスタの値は保存すること • 合計点はEAXレジスタに十分納まるものとする。 • 次のような命令を使ってよい。 ADD EAX, [EBX] 」 というような問題が出て自分で解答を作ってみたのですがこれでよいのでしょうか?詳しい方ご検討よろしくお願いいたします。 PUSH EBX(EBXをスタックにおいておく) PUSH ECX(ECXをスタックにおいておく) MOV ECX 25(ECXに25を代入。4回の操作を25回すれば100回になるからである。) label0:ADD EAX [EAX] ([EAX]をEAXに加算) ADD EAX [EAX+1]([EAX+1]をEAXに加算) ADD EAX [EAX+2]([EAX+2]をEAXに加算) ADD EAX [EAX+3]([EAX+3]をEAXに加算) MOV [EAX] [EAX+4]([EAX]を[EAX+4]に移動させる) EBX=EBX+1 (EBXはこのループを何回やったか、という数) CMP ECX EBX(25とEBXを比べる) JNZ:label0(比べてEBXが25になってないならば繰り返す。25になったら終了。) POP EBX(EBXをスタックから戻す) POP ECX(EBXをスタックから戻す)
- ベストアンサー
- その他(プログラミング・開発)
- アセンブリプログラムの問題です。
アセンブリプログラムの勉強をしているのですが、以下の問題がわかりません。 (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) 以上です。わかるものだけでも良いので教えてもらえますでしょうか?
- 締切済み
- C・C++・C#
お礼
ありがとうございました。