回答編集履歴

1 誤字修正

catsforepaw

catsforepaw score 5823

2018/02/18 10:20  投稿

> 使用しているCPUあるいはGPUの構造を細かい部分(メモリ、レジスタ、演算回路など)を把握したうえでアセンブリ言語を扱っているのでしょうか?
> 逆にハードウェアの知識が浅いとアセンブリ言語は理解できないのでしょうか?
ここでいう「ハードウェア」が「メモリ、レジスタ、演算回路など」のCPU内部構成のことだとするなら、それが把握できなければアセンブラは使いこなせません。少なくとも、メモリやレジスタ関連は命令と直結しているので理解する必要があります。
それに加えて、もし高速化のためにアセンブラを使うのなら、キャッシュや命令パイプラインなどの仕組みも理解する必要があります。ただし、その辺は同じ命令セットのCPUでもメーカーや型番によって違いがあるので、ちゃんと把握していないと、あるCPUでは高速化したつもりが別のCPUではそれほどでもない(むしろパフォーマンス低下)という現象も起こり得ます。
> そしてどちらにしてもなぜアセンブリ言語を使っているのか教えていただけると勉強になります。
デバイスドライバーは別として、一般のアプリでアセンブラを使う理由は「高速化」ですね。
ただし、ロジックをアセンブラで組むのは今となってはナンセンスです。今時のCPUは内部構造が複雑化しているので、人間がアセンブラで効率的なプログラムを書くのは至難の業です(書けたとしてもその作業行程が超絶非効率です)。
では何のためにアセンブラを使うかというと「C/C++が言語でサポートしていない機能を利用する」ためです。一番判りやすいのがSIMD命令ですかね。x86でいうところのSSEやAVXです。組み込み関数の形(実はインライン展開)で利用できるようになっています。
では何のためにアセンブラを使うかというと「C/C++が言語でサポートしていない機能を利用する」ためです。一番判りやすいのがSIMD命令ですかね。x86でいうところのSSEやAVXです。組み込み関数の形(実はインライン展開)で利用できるようになっています。

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る