-PR-
解決済み

SH3のアセンブラの表記について

  • 暇なときにでも
  • 質問No.46263
  • 閲覧数853
  • ありがとう数4
  • 気になる数0
  • 回答数2
  • コメント数0

お礼率 0% (0/15)

 SH3のマニュアルでは、MOVの表記は、MOV.L@(disp,PC),Rnになっています。
ところが、エミュレータの逆アセンブラの表記は、MOV.L@(xxxx:8,PC),Rn
となっています。xxxxのアドレスから、どのアドレスの値を持ってくるの
でしょうか????
通報する
  • 回答数2
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

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

  • 回答No.2
レベル9

ベストアンサー率 35% (23/65)

>逆アセンブラで、1000番地にMOV.L@(0018:8,PC),R15と表記されているとき
>これを実行後、R15の値は、PC+001Cつまり101Cから4バイトがR15に
>入ってしまうのですが、どういう計算なのでしょうか?。
確たる自信をもってはいませんがSHは完全RISCパイプラインアーキテクチャ
のため、1000番地に上記命令があり、これを「実行している」とき既にPCは
2個先の命令のデコードの所にあり1004になっているからではないですか?
1004+0018->101Cということです。
ちなみにSHの遅延分岐は御存知ですか?例えば
MOV#0,R0
BRALABEL
MOV#1,R0
LABEL:
ADD#1,R0
<- この時点でR0は2になる。
これもBRA命令の「実行の時点」でPCは+4されていると考えられない
でしょうか?
# SHでアセンブラ書くのは、これだから嫌~ン。
-PR-
-PR-

その他の回答 (全1件)

  • 回答No.1
レベル9

ベストアンサー率 35% (23/65)

エミュレータおよびアセンブラの表記によって違いは在るかも知れませんが、
'mov.l @(disp,PC),Rn'は(PC & fffffffc) + disp * 4で求まったアドレスの
内容をRnに入れることです。ここでdispはSHの命令長の関係上8ビット値になり
ます(詳しくは日立のページあたりからデータブックを取ってきてみてください)。
大抵のアセンブラの例を挙げると(インデントが入らないので見づらいですが)、
mov.l@(INDEX,pc),r0
mov.l@r0,r1
- 省略 -
INDEX:
.longTABLE
TABLE:
.long1
とすると、R0にはTABLEのアドレスが入り、R1には1が入ります。
アセンブラが現在PC値からINDEXの相対アドレスを計算してくれるのでその辺は
気にしなくていいです。当然8ビットで届かなければアセンブルエラーになりますが。
補足コメント
sekinegoobro

お礼率 0% (0/15)

逆アセンブラで、1000番地にMOV.L@(0018:8,PC),R15と表記されているとき
これを実行後、R15の値は、PC+001Cつまり101Cから4バイトがR15に
入ってしまうのですが、どういう計算なのでしょうか?。
投稿日時 - 2001-03-01 12:52:14


このQ&Aで解決しましたか?
AIエージェント「あい」

こんにちは。AIエージェントの「あい」です。
あなたの悩みに、OKWAVE 3,500万件のQ&Aを分析して最適な回答をご提案します。

関連するQ&A
-PR-
-PR-
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


専門家があなたの悩みに回答!

-PR-

ピックアップ

-PR-
ページ先頭へ