• ベストアンサー

SHの命令の意味について

SHの、 MOV.L @(H'104:8,PC),R6 の意味がソフトウェアマニュアルをみてもよくわかりません。 ソフトウェアマニュアルをみると、PCに0x104を加えた値をR6にムーブ すると読めるのですが、PC(0x000017DC)に対してR6は0xFFFFE6B0に なります。 0x000017DC+0x104のメモリをみましたが、0xFFFFE6B0は見当たりません。 どなたかアドバイスお願いします。

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

  • ベストアンサー
  • R32C
  • ベストアンサー率39% (115/290)
回答No.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相対番地でレジスタに読み込む ようになっているようです。

noname#99417
質問者

お礼

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

その他の回答 (1)

  • kusa_mochi
  • ベストアンサー率76% (1597/2087)
回答No.1

自分はSHシリーズを使った事は無いが、アセンブラは齧った事があるのでちょっとだけ突っ込みを。 以下のマニュアルにざっと目を通してみた。  http://documentation.renesas.com/jpn/products/mpumcu/rjj09b0228_shprogram.pdf MOV.L @(disp:8,PC),Rnの命令の動作を見ると、質問者殿の説明と微妙に異なり  (disp×4+PC)→Rn と書かれている。 自分はSHのアセンブラを知らないので、ディスプレースメント(H'104)の意味に今一確信が持てないんだが、もしも想像通り16進でのイミディエイト値であるなら  ( 0x104 × 4 + PC ) → R6 となるべきだと思うのだが、どうだろう。 #マニュアルは良く読もうね

noname#99417
質問者

お礼

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

関連するQ&A