- ベストアンサー
SHの命令の意味について
SHの、 MOV.L @(H'104:8,PC),R6 の意味がソフトウェアマニュアルをみてもよくわかりません。 ソフトウェアマニュアルをみると、PCに0x104を加えた値をR6にムーブ すると読めるのですが、PC(0x000017DC)に対してR6は0xFFFFE6B0に なります。 0x000017DC+0x104のメモリをみましたが、0xFFFFE6B0は見当たりません。 どなたかアドバイスお願いします。
- みんなの回答 (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相対番地でレジスタに読み込む ようになっているようです。
その他の回答 (1)
- kusa_mochi
- ベストアンサー率76% (1597/2087)
自分は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 となるべきだと思うのだが、どうだろう。 #マニュアルは良く読もうね
お礼
はい。よく読みます。 回答ありがとうございます。
お礼
もう一度メモリの内容をよくみてみます。 回答ありがとうございました。