こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

アセンブラに関する質問

アセンブラに関する質問

現在アセンブラの勉強をしている者ですが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

投稿日時 - 2010-05-05 16:40:45

QNo.5873468

すぐに回答ほしいです

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

(2)については、単に先頭アドレス(=処理Aのアドレス)を示せれば良いだけから、単にラベルを置いとくだけでよさそうな。で、分岐命令の飛び先としてそのラベルを記述する。
たいていのアセンブラならそれで済むかと。というか、処理A・処理Bとか具体的でないので、それぐらいしか言えないという。

あと、R3000なら
ble r1, r2, [飛び先]
addi r1, r1, 1
と、delay slotを意識して書くほうが良いかと(そのためPC+4が意味を持つ)。

参考URL:http://www.google.co.jp/search?hl=ja&q=r3000+delay+slot&lr=lang_ja&aq=f&aqi=&aql=&oq=&gs_rfai=

投稿日時 - 2010-05-05 20:27:40

ANo.2

このQ&Aは役に立ちましたか?

9人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.1

アッセンブラの基本である
1,の問題だけ
POはプログラムカウンターなのでPCの値を読み出してそれに4を加えてPCに戻すとそのアドレスにジャンプします
4はメモリーアドレスの増加分です
たとえばPCの値が0000とすればPC+4=0004ということです

2、問題はCPUの形式によって異なるのでお使いのCPUの命令セットを買い求めて調べてください

投稿日時 - 2010-05-05 16:52:24

補足

CPUの形式は指定されていないんです。用意されている命令セットを全て教えれば分かりますか?

投稿日時 - 2010-05-05 20:03:17

あなたにオススメの質問