11

最近、プログラムなどのデバッグを容易にするために、基本的なx86アセンブリを試してみる価値があると判断しました。そこで(約1週間前に)x86アセンブリの学習を開始し、その間にコンピューターをにアップグレードしました。 8GBのRAMなので、明らかに私のx86 Windows XPインストールはそのすべてのメモリを浪費していました。現在、x64 Windows 7コピーを実行しているので、問題は次のとおりです。

x64オペレーティングシステムでx86アセンブリを操作することは可能ですか?エミュレータで正しく動作しますか?または、x64アセンブリを学ぶ必要がありますか?

4

3 に答える 3

19

x64オペレーティングシステムでx86アセンブリを操作することは可能ですか?エミュレータで正しく動作しますか?

はい、それは可能であり、正しく実行されます。命令セットアーキテクチャは常に下位互換性があります。

x86-64のレジスタ:

代替テキスト
(ソース:usenix.org

rax例:ここでは、これが新しい64汎用レジスタであることがわかりますが、のeax下位32ビットを参照しているため引き続き使用できますrax

または、x64アセンブリを学ぶ必要がありますか?

x86-32アーキテクチャは、x86-64のサブセットです。最初にx86を学び、次にx86-64アセンブリの新機能を見つけてください。x86asmを学習したら。次に、これは有用なリソースになります:http ://www.cs.cmu.edu/~fp/courses/15213-s06/misc/asm64-handout.pdf

于 2010-01-24T04:36:25.327 に答える
14

はい、もちろん。ほとんどのプログラムはまだ 32 ビットであり、64 ビットの Windows システムで問題なく動作します。これらのプログラムは機械語であり、アセンブリと 1 対 1 でマッピングされます (x86 アセンブリ コードに簡単に逆アセンブルできます)。

于 2010-01-24T04:32:09.607 に答える
2

コンパイル オプションが次の場合、Linux は 32 ビット サポートを明示的に実装します。

CONFIG_IA32_EMULATION=y

が設定されています。

これは、Ubuntu 14.04 を含むほとんどのまともなディストリビューションで行われます。

もちろん、32 ビット エミュレーションが可能なのは、x86-64 プロセッサが、カーネルが使用方法を認識している 32 ビット エミュレーション モードを介して 32 ビット実行可能ファイルと下位互換性を持つように設計されているためです。

もう 1 つ心配しなければならないのはライブラリです。32 ビット プログラムをコンパイルするには、32 ビット ライブラリが必要です。Ubuntu 14.04 AMD64 の場合:

sudo apt-get install gcc-multilib

次に、hello world で簡単にテストできます。

#include <stdio.h>
#include <stdlib.h>

int main() {
    puts("hello world");
    return EXIT_SUCCESS;
}

と:

gcc -m32 hello_world.c
./a.out

どちらが印刷されますか:

hello world

と:

file a.out

32 ビットであることを確認します。

ELF 32-bit LSB  executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.24, BuildID[sha1]=358f7969deeb2f24a8dd932a0d296887af4eae30, not stripped
于 2015-09-20T18:49:00.837 に答える