1

私は自分自身を教えています/アセンブリについて読んでいます。アセンブリに関する書籍のほとんどは x86 を参照しています。コード内のすべてのレジスタ名は、(x86-64 のように) "r" ではなく "e" で始まります。ただし、私は 64 ビット Linux を使用しており、x86-64 について言及していないため、これらの本に価値があるかどうか疑問に思っていました。

要するに、これらのリソースを使用して x86-64 を学習する価値は本当にあるのでしょうか。または、別の言い方をすれば、レジスタの命名規則の違い以外に、x86 マテリアルからの学習を困難にする可能性のある 2 つの違いはありますか?

4

2 に答える 2

0

呼び出し規則とスタック管理が単純なため、32 ビットでアセンブリを学ぶのは確かに少し簡単です。

64 ビットでは、ABI について心配する必要があります。それだけでなく、すべての OS で規則が同じというわけではありません。たとえば、Mac OS X の ABI ルールは Windows のルールとは異なります (レジスタは同じではなく、Windows では 4 つのレジスタしか使用しません)。

アセンブラ (as) で -arch i386 を使用して、アセンブリ コードをコンパイルできます。clang または gcc を使用すると、-m32 を使用できます (Linux では使用していないため、少なくとも Mac OS X では)。ビット数が異なるモジュール (32 ビットと 64 ビット) をリンクすることはできません。

プログラムを 64 ビット用に切り替えるかコンパイルする準備ができたら、スタックを処理するときに、32 ビットのワードではなく 64 ビットのワードをプッシュする必要があることを確認する必要がありますが、それは言うまでもありません。

于 2013-11-05T01:03:02.283 に答える