• ベストアンサー

2アドレス方式について

アセンブラ初心者なのですが、2アドレス方式について教えてください。 32ビットCPUでADD ansの1アドレスでやる場合、命令部16ビットと番地アドレス部16ビットとされると思いますが、ADD ans,bの場合(2アドレス)の場合、命令部とアドレス部はどうなるんでしょうか?

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

  • ベストアンサー
  • zwi
  • ベストアンサー率56% (730/1282)
回答No.5

>回答ありがとうございます。質問を少し変えますが、命令レジスターは何バイトまで持つことが出きるのでしょうか? それこそ設計次第です。少なくても最大命令長は必要でしょう。 最近のプロセッサは命令レジスタを多段化した命令パイプラインで命令自体も加工して処理するのが当たり前ですのでバイト数で語ること事態無意味です。 http://oshiete1.goo.ne.jp/kotaeru_reply.php3?q=5497620 上記サイトにも書いてありますがPentium 4とか31段もあります。 「コンピュータアーキテクチャの話」から興味ある話題を拾い読みしてください。 http://journal.mycom.co.jp/column/architecture/index.html

その他の回答 (6)

  • zwi
  • ベストアンサー率56% (730/1282)
回答No.7

>すみません。最後に1つ質問いいでしょうか?失礼な質問なのデスが、zwiさんはいろいろなCPUの動作にについてわかってらっしゃるのでしょうか? ざっとは理解しているつもりですが、ちゃんと分かっているのはZ80ぐらい古いCPUでしょうね。あの時代のCPUなら自分でデジタル回路を設計してFPGAで再現できる自信はあります。 どのぐらい意識してプログラムしているかと言うとコンピュータアーキテクチャは複雑なので、特に普段は意識しません。得にx86系はCPU毎にパイプラインアーキテクチャや命令実行アーキテクチャが違うので深く意識してもしょうがないです。 機械語命令が2バイトなのか5バイトなのかと言った問題も、パイプラインやらキャッシュやらの働きで隠蔽されてしまうので意識しなくても速度は出てくれます。 それよりは、アルゴリズムを工夫して速度を出す方法を考えるほうが建設的です。 まぁ、データのバウンダリの問題やfloatやdouble、intのデータ型の違いで起こるデータ型変換のロスや文字列比較コードの遅さってのはCPUの特性を理解していないと意識できない問題でしょうね。あとは仮想記憶を駆使する場合やらマルチCPUでマルチスレッドする場合にはハードやOSの知識があったほう効率的なコードを組める事は間違いないでしょう。 ただ、初心者ならそんな事を今から考えるより、速度で困ったときに勉強しても遅く無いと思うんですけどね。 それと、どのCPUでも意識しなくて良いかと言うとPS3のCELLの様にCPUのアーキテクチャをちゃんと理解してやらないと性能を発揮できない場合は意識してやる必要がありますよ。

79562
質問者

お礼

そうなんですか。そうですね今は考えないほうがいいですね。回答ありがとうございました。

  • zwi
  • ベストアンサー率56% (730/1282)
回答No.6

ついでに言っておくと、アセンブラ初心者がやるべき事はちゃんとアセンブラ命令の働きを覚えてプログラムを組む事です。 興味本位に命令部のビット数とか命令レジスタとか細かい事を調べてもデジタル回路設計の知識も無いのに理解できるとは思えません。もしそれを理解したとしても、プログラミングの技術力向上にさほど影響を与えるとは思えません。 ※ 例えば、命令パイプラインの深さとかCPU毎に違うので、どれかのパイプラインに合わせてプログラムを作られても、そのCPUでしか最高のパフォーマンスを発揮しなくなってしまいます。 そこまで深く調べて意味のある人は、自分でデジタル回路設計が出来てオリジナルCPUを設計したい人とか、OSやドライバレベルのソフトウェア開発を行う人、組み込み業界の人でハード設計と密接なソフトを開発している人ぐらいだと思います。それでも命令レジスタのバイト数は意味無いと思いますけどね。 もし、本当にコンピュータアーキテクチャに興味があり理解がしたいなら、デジタル回路の知識から身につけるべきだと思います。ただ、CPUの動きが良く分からないから更に細かく調べれば理解できると思っているのなら際限が無いのでほどほどにしておくべきです。

79562
質問者

お礼

回答ありがとうございます。忠告ありがとうございます。そうなんですか、そんな複雑ならあまり考えずアセンブラの命令の働きを覚えたいと思います。本当にありがとうございました。

79562
質問者

補足

すみません。最後に1つ質問いいでしょうか?失礼な質問なのデスが、zwiさんはいろいろなCPUの動作にについてわかってらっしゃるのでしょうか?

  • zwi
  • ベストアンサー率56% (730/1282)
回答No.4

>3バイトを越えるものがあるということでしょうか? 訂正で命令部が3バイトのものもある様です。 pentiumを含めたIA-32アーキテクチャの日本語資料です。 http://download.intel.com/jp/developer/jpdoc/IA32_Arh_Dev_Man_Vol2A_i.pdf http://download.intel.com/jp/developer/jpdoc/IA32_Arh_Dev_Man_Vol2B_i.pdf IA-32は命令の変化が激しいので命令長がちゃんと把握しきれてません。命令長は命令部を含めて最短1バイトから、たしか最大15?バイトまで変化するはずです。 上記資料を隅から隅まで読めば分かるとは思いますけどね。

79562
質問者

お礼

回答ありがとうございます。質問を少し変えますが、命令レジスターは何バイトまで持つことが出きるのでしょうか?

  • zwi
  • ベストアンサー率56% (730/1282)
回答No.3

>あともう一つ質問なのですが、CPUによって違いがあるみたいですが普通は何ビットなのでしょうか? 普通って考え方が間違い。 CPUごとに設計が違うので、命令部が何ビットかは設計次第。 ちなみにPEN4なら命令部は1か2バイト。オペランド部は、それはもう千差万別。 >間違えました。COMETの場合どうなるのでしょうか? COMETIIの仕様なら下記PDFの11ページを見てもらうとして、 http://www.jitec.ipa.go.jp/1_00topic/topic_20081027_hani_yougo.pdf 命令部が8ビット、レジスタ2つで8ビット、アドレスで16ビットで合計32ビットです。 ちなみにPS1とPS2に採用されたマイクロプロセッサMIPSだと http://www.ps.d.dendai.ac.jp/lecture/comp_arch/2005/pdf/Chapter04_2005.pdf 前にも書いた通り命令部が6ビット。オペランドの形式は2種類(命令部でどちらの形式か決まる)。

79562
質問者

お礼

回答ありがとうございます。 >オペランド部は、それはもう千差万別。 3バイトを越えるものがあるということでしょうか?

  • zwi
  • ベストアンサー率56% (730/1282)
回答No.2

アドレス方式ってオペランド数の事かな? >命令部とアドレス部はどうなるんでしょうか? CPUの設計によるのでは? MIPSとか命令部が6bitしかない物もあります。 RISCとして設計されているものの方が命令部はコンパクトでしょうね。 どのCPUの話を書いているか分からないので答えようが無いです。

79562
質問者

お礼

回答ありがとうございます。そうなんですか。。。では、Pentium4の場合どうなるのでしょうか?回答よろしくおねがいします。

79562
質問者

補足

間違えました。COMETの場合どうなるのでしょうか?

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

えぇと, そもそも「32ビットCPUでADD ansの1アドレスでやる場合、命令部16ビットと番地アドレス部16ビットとされると思いますが」からして間違い... というか, 1アドレス命令な 32ビット CPU って何があったっけ? IA-32 とか Z380, Z80000 とかくらい?

79562
質問者

お礼

回答ありがとうございます。では、どういうのは1アドレス方式、2アドレス方式なのでしょうか?回答よろしくお願いします。

79562
質問者

補足

あともう一つ質問なのですが、CPUによって違いがあるみたいですが普通は何ビットなのでしょうか?

関連するQ&A

専門家に質問してみよう