• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:PICの命令 ADDWF f,d のメモリアクセス)

PICのADDWF命令のメモリアクセスについて

このQ&Aのポイント
  • PICの命令ADDWF f,dについて、f1のメモリにアクセスしてW+f1を行うための命令です。
  • ADDWF f1,fの実行には1命令サイクルで2度メモリアクセスが必要です。
  • MOVWF fは1命令サイクルで実行されますが、メモリに一度だけアクセスします。

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

  • ベストアンサー
  • koujikuu
  • ベストアンサー率43% (429/993)
回答No.3

PIC16F193Xのデーターシートで説明します http://www.microchip.jp/docs/41364B_JP.pdf 「26.1 Read-Modify-Write 操作」で説明されていますが、ADDWF Freg ,d (F or W)格納先指定により演算結果をF=ファイルレジスタかW=Wレジスタに格納するかの違いです 「図 1-1: PIC16F193X/LF193X のブロック図」により演算はALUで行われWregとFreg(RAM)は同じバス上にあり同じ扱いです、(ALUからFregへデータを直接転送可能) PICはシステムクロックの1/4が命令実行サイクスになります。 (20MHz動作時は命令サイクル5MHz,1命令実行時間200nS)

masterfour
質問者

お礼

ありがとうございます。 read-modify-writeを読んだ記憶だけありましたが理解せずにおりました。 今回,意味がわかりました。 回答No.2 さんで気付いたのですが,回答No.3さんで,よりはっきりしました。

その他の回答 (2)

  • ninoue
  • ベストアンサー率52% (1288/2437)
回答No.2

http://www.piclist.com/images/www/hobby_elec/pic.htm http://www.piclist.com/images/www/hobby_elec/pic3_2.htm#addlw f1(f)はファイルレジスタ:0-127とされていますが、他のCPUのメインメモリ相当では無く、レジスタ相当となっています。 レジスタ数が8,16,32等のCPUがありますが、それが128個まで増やされており、CPU内蔵で1クロックアクセス(リード、ライト同時アクセス)が可能な構成になっていると考える事が出来ます。 レジスタ、或はフリップフロップは読み出しパスと書き込みパスが別々に設けられており、命令クロックの立ち上がりサイクルでそれまでのデータを読み出しが行われ、1クロックの間その値を読み出し続けます。 一方同一サイクル内の先頭のクロック立ち上がり時点で、(前サイクルのCPU演算結果の)書き込みパスのデータ取り込みもパラに可能です。 但し、書き込まれたデータが安定して読みだされるまでには時間が掛かるので、書き込まれたデータを次のサイクルで使用しようとした場合には、CPU内部でチェックしてダミーサイクルの挿入が行われます。 (最近のインテルCPU等では、このような場合もダミーサイクル無しで実行出来るようにCPU内蔵のテンポラリレジスタが追加される等の強化が行われているようです) 前サイクルでの書き込みfレジスタ番号と、次のサイクルの読み出しfレジスタ番号が別番号の場合には、1命令1サイクルで命令の実行が続けられます。 http://www.microchip.jp/docs/DS39703A_JP.pdf 第2章CPU 2.11.1 書き込み後読み取り従属関係ルール 一方通常のメインメモリでは読み出しパスと書き込みパスとして同一のパスが使われており、メインメモリに同一サイクルで読み出しと書き込みをパラに実行する事は不可能で、ロード関係命令とストア命令とは別サイクルで実行されます。

masterfour
質問者

お礼

ありがとうございます。 read-modify-writeを読んだ記憶だけありましたが,今回,わかりました。

  • iruiru298
  • ベストアンサー率32% (13/40)
回答No.1

調べていませんが、 PCIではパイプライン処理してませんか? 次の命令実行中に、2度目のメモリアクセスをしているのだと思いますよ。

関連するQ&A