「みんな教えて! 選手権!!」開催のお知らせ

SHの、
MOV.L @(H'104:8,PC),R6
の意味がソフトウェアマニュアルをみてもよくわかりません。

ソフトウェアマニュアルをみると、PCに0x104を加えた値をR6にムーブ
すると読めるのですが、PC(0x000017DC)に対してR6は0xFFFFE6B0に
なります。

0x000017DC+0x104のメモリをみましたが、0xFFFFE6B0は見当たりません。

どなたかアドバイスお願いします。

A 回答 (2件)

SHはあんまり得意じゃないのですが、



SH2のソフトウエアマニュアルを見てみました。

計算方法としては、
現PC&0xfffffffc)+4 + 0x104 を指す中身をR6にムーブ 
になり
実際には、
(0x17DC & 0xfffffffc)+4+(0x104) = 0x17E0+0x104 = 18E4

*(0x18E4)が 0xffffe6b0
になっているんじゃないでしょうか?

一応シミュレータで確認済みです。
#さらにSH3,4の場合はキャッシュがあるのですぐに反映されないよう
#です。

以下蛇足:
アセンブラおよびDisassemblerの仕様により、ディスプレースメントが
スケーリングされている場合、されていない場合があります。
本来8bit長なわけで、最大0xff ですので超えています。
4倍がすでにされているので、そのまま加算します。
R社純正以外にもサードパーティ製のアセンブラの場合には考慮が必要な
場合があります。

riscプロセッサなので、命令長が固定のため、イミディエイト命令が
2byte長 4byte長は命令内にかけないので、
ROM上にデータを置いて、PC相対番地でレジスタに読み込む
ようになっているようです。
    • good
    • 0
この回答へのお礼

もう一度メモリの内容をよくみてみます。
回答ありがとうございました。

お礼日時:2008/07/30 14:16

自分はSHシリーズを使った事は無いが、アセンブラは齧った事があるのでちょっとだけ突っ込みを。



以下のマニュアルにざっと目を通してみた。

 http://documentation.renesas.com/jpn/products/mp …

MOV.L @(disp:8,PC),Rnの命令の動作を見ると、質問者殿の説明と微妙に異なり

 (disp×4+PC)→Rn

と書かれている。
自分はSHのアセンブラを知らないので、ディスプレースメント(H'104)の意味に今一確信が持てないんだが、もしも想像通り16進でのイミディエイト値であるなら

 ( 0x104 × 4 + PC ) → R6

となるべきだと思うのだが、どうだろう。

#マニュアルは良く読もうね
    • good
    • 0
この回答へのお礼

はい。よく読みます。
回答ありがとうございます。

お礼日時:2008/07/30 14:17

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


おすすめ情報