重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

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

A 回答 (7件)

>回答ありがとうございます。

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

それこそ設計次第です。少なくても最大命令長は必要でしょう。
最近のプロセッサは命令レジスタを多段化した命令パイプラインで命令自体も加工して処理するのが当たり前ですのでバイト数で語ること事態無意味です。
http://oshiete1.goo.ne.jp/kotaeru_reply.php3?q=5 …
上記サイトにも書いてありますがPentium 4とか31段もあります。

「コンピュータアーキテクチャの話」から興味ある話題を拾い読みしてください。
http://journal.mycom.co.jp/column/architecture/i …
    • good
    • 0

>すみません。

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

ざっとは理解しているつもりですが、ちゃんと分かっているのはZ80ぐらい古いCPUでしょうね。あの時代のCPUなら自分でデジタル回路を設計してFPGAで再現できる自信はあります。

どのぐらい意識してプログラムしているかと言うとコンピュータアーキテクチャは複雑なので、特に普段は意識しません。得にx86系はCPU毎にパイプラインアーキテクチャや命令実行アーキテクチャが違うので深く意識してもしょうがないです。
機械語命令が2バイトなのか5バイトなのかと言った問題も、パイプラインやらキャッシュやらの働きで隠蔽されてしまうので意識しなくても速度は出てくれます。
それよりは、アルゴリズムを工夫して速度を出す方法を考えるほうが建設的です。
まぁ、データのバウンダリの問題やfloatやdouble、intのデータ型の違いで起こるデータ型変換のロスや文字列比較コードの遅さってのはCPUの特性を理解していないと意識できない問題でしょうね。あとは仮想記憶を駆使する場合やらマルチCPUでマルチスレッドする場合にはハードやOSの知識があったほう効率的なコードを組める事は間違いないでしょう。
ただ、初心者ならそんな事を今から考えるより、速度で困ったときに勉強しても遅く無いと思うんですけどね。

それと、どのCPUでも意識しなくて良いかと言うとPS3のCELLの様にCPUのアーキテクチャをちゃんと理解してやらないと性能を発揮できない場合は意識してやる必要がありますよ。
    • good
    • 0
この回答へのお礼

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

お礼日時:2009/12/07 17:37

ついでに言っておくと、アセンブラ初心者がやるべき事はちゃんとアセンブラ命令の働きを覚えてプログラムを組む事です。


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

もし、本当にコンピュータアーキテクチャに興味があり理解がしたいなら、デジタル回路の知識から身につけるべきだと思います。ただ、CPUの動きが良く分からないから更に細かく調べれば理解できると思っているのなら際限が無いのでほどほどにしておくべきです。

この回答への補足

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

補足日時:2009/12/07 16:32
    • good
    • 0
この回答へのお礼

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

お礼日時:2009/12/07 16:27

>3バイトを越えるものがあるということでしょうか?


訂正で命令部が3バイトのものもある様です。

pentiumを含めたIA-32アーキテクチャの日本語資料です。
http://download.intel.com/jp/developer/jpdoc/IA3 …
http://download.intel.com/jp/developer/jpdoc/IA3 …

IA-32は命令の変化が激しいので命令長がちゃんと把握しきれてません。命令長は命令部を含めて最短1バイトから、たしか最大15?バイトまで変化するはずです。
上記資料を隅から隅まで読めば分かるとは思いますけどね。
    • good
    • 0
この回答へのお礼

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

お礼日時:2009/12/07 12:11

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



普通って考え方が間違い。
CPUごとに設計が違うので、命令部が何ビットかは設計次第。
ちなみにPEN4なら命令部は1か2バイト。オペランド部は、それはもう千差万別。

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

COMETIIの仕様なら下記PDFの11ページを見てもらうとして、
http://www.jitec.ipa.go.jp/1_00topic/topic_20081 …
命令部が8ビット、レジスタ2つで8ビット、アドレスで16ビットで合計32ビットです。

ちなみにPS1とPS2に採用されたマイクロプロセッサMIPSだと
http://www.ps.d.dendai.ac.jp/lecture/comp_arch/2 …
前にも書いた通り命令部が6ビット。オペランドの形式は2種類(命令部でどちらの形式か決まる)。
    • good
    • 0
この回答へのお礼

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

お礼日時:2009/12/06 21:55

アドレス方式ってオペランド数の事かな?


>命令部とアドレス部はどうなるんでしょうか?
CPUの設計によるのでは?
MIPSとか命令部が6bitしかない物もあります。
RISCとして設計されているものの方が命令部はコンパクトでしょうね。

どのCPUの話を書いているか分からないので答えようが無いです。

この回答への補足

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

補足日時:2009/12/06 19:44
    • good
    • 0
この回答へのお礼

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

お礼日時:2009/12/06 19:26

えぇと, そもそも「32ビットCPUでADD ansの1アドレスでやる場合、命令部16ビットと番地アドレス部16ビットとされると思

いますが」からして間違い... というか, 1アドレス命令な 32ビット CPU って何があったっけ? IA-32 とか Z380, Z80000 とかくらい?

この回答への補足

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

補足日時:2009/12/06 19:38
    • good
    • 0
この回答へのお礼

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

お礼日時:2009/12/06 19:22

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