9-1.ソース・ビルド・インストールアセンブラでエンディアン変換(その2) 前回は、アセンブラで試行錯誤してエンディアン変換してみました。 先人たちは、どのようにエンディアン変換をプログラミングしているのか気になります。 標準ライブラリのhtonlのソースを読んで、確認したいと思います。 htonlとは、... 2018.10.209-1.ソース・ビルド・インストール
9-1.ソース・ビルド・インストールアセンブラでエンディアン変換 アセンブラでエンディアン変換してみます。 32bitの変数aのエンディアン変換です。EAXとEBXレジスタを使います。 まずは1Byteのコピーから。 コピーして8bitシフトします。 これを繰り返します。 ... 2018.10.199-1.ソース・ビルド・インストール
9-1.ソース・ビルド・インストールレジスタを使ったマスク AL/AHレジスタを使ってマスク処理をアセンブラで書いてみます。 まずは、代入するだけの処理。 変数aに0x12345678を代入します。 実行。 さきほどのプログラムをベースに、ALレジスタを用いて下位8bit... 2018.10.189-1.ソース・ビルド・インストール
9-1.ソース・ビルド・インストールビットシフトをアセンブラで書く Cソースの一部アセンブラ化に慣れてきました。 今回はビットシフトをアセンブラに置き換えてみます。 では、元ソース。0xffを左に1ビットシフトするプログラムです。 実行すると、最下位bitには0が入って0x1feになります... 2018.10.179-1.ソース・ビルド・インストール
9-1.ソース・ビルド・インストールアセンブラからみた効率のよい戻り値の型 今回は戻り値の型でアセンブラがどう変わるか確認します。 まずは戻り値がchar型の場合。 func1の戻り値はEAXに格納されるようです。char型の戻り値であっても、32bitのレジスタが使用されるんですね。 main側... 2018.10.169-1.ソース・ビルド・インストール
9-1.ソース・ビルド・インストールアセンブラからみた効率のよい引数の型 C言語の関数の引数ですが、どんな型にすると効率が良いのでしょう。 ALレジスタを見ると、8bitアクセスなので、一見効率がよさそうに見えます。 引数なし、8bit、16bit、32bit、64bitの型の引数の関数を呼び出しした... 2018.10.159-1.ソース・ビルド・インストール
9-1.ソース・ビルド・インストールポインタ引数の割り当てレジスタ 前回C言語のプログラムをディスアセンブルしたソースを参考に、アセンブラを埋め込みました。関数の引数に割り当たるレジスタもおぼろげながら分かってきました。 ポインタ引数の場合、どのレジスタに割り当たるのでしょうか。 配列コピーのプログ... 2018.10.149-1.ソース・ビルド・インストール