zoomzoomzoom

解決方法の共有に主眼を置くブログ・他雑談

大熱血!アセンブラ入門part4メモ

part2の延長の章?という印象。様々なCPUのアセンブラを読む。

 

知っていると役に立つアセンブラ業界用語

・インライン展開:関数の中で他の関数の呼び出しをしている場合に、その「他の関数」の内容を、呼び出し元の関数の内容として埋め込んでしまうこと。呼び出し処理がいらなくなる。

・積和演算:MAC演算とも呼ばれる。積の和を求める演算の事。

・飽和演算:上限で止める演算の事。

・ベクトル演算:SIMD命令とも呼ばれる。4つの加算をへ並列で一気に行う演算。この演算をするCPUでは演算だけでなくロード/ストアも並列に行う。

プログラマ:内蔵フラッシュROMへの書き込み器のこと。

・rot:ローテート命令。ビットシフトすることではみ出したビット部分を、反対側に戻す処理を行う。

FPGAField Programmable Gate Array。ソフトウェアCPU。内部回路をソフトウェア的に組み替え可能なデバイスの事。

・ISA:Instruction Set Architecture。命令セットアーキテクチャ。利用できる命令(機械語コード)、レジスタの数、種類、割り込み方式、例外処理方式、メモリ領域の方式などを定めたもの。ISAが同じなら異なるCPU上でも機械語コードを動作させることが出来る。

・ゼロページ:アドレスが0x0000-0x00ffの256バイトの領域のみ、アドレス指定を1バイトとした小さいサイズの命令で読み書きできるというもの。

 

 

これからのアセンブラリーディングの際、覚えておくべき情報:

gcc -gオプションを利用すると、実行ファイルにデバッグ情報が付加される。

コンパイラの過剰な最適化はデバッグ時のアセンブラリーディングの際に、障害となる。(インライン処理になってしまい、ブレークが適切にできない等。)

・最適化されているソースのデバッグ時は、表示されている引数や自動変数の値を信用することはできない。

・関数末尾にjmp命令=呼び出し先の関数をそのまま返す処理だな、という推測が出来る。

・命令によっては、複数の処理を1命令で行ってしまうものもある。例えば、レジスタ復旧、スタックフレーム解放、戻り先アドレス取り出し、そこへジャンプまでを1命令で行う場合がある。

・実際のプログラムでは、演算命令は少ない。反対にデータ転送命令が多い。

・セミコロンの行(コメント行)を省いてみると読みやすくなる。

・旧来のマイコンでは、よく使われる命令を1バイトにして、機械語コードのサイズを節約していた。

アセンブラを理解するために、CPUのエミュのソースコードを読むという方法もある。