AMD64 ISA

読み:エイエムディーろくじゅうよんアイエスエイ
外語:AMD64 ISA: AMD64 Instruction Set Architecture
品詞:名詞

AMDが開発したx86上位互換の64ビット命令セットアーキテクチャ。まずAMDのOpteronで採用された。旧称は「x86-64」だが、後にAMD64 ISAに改名された。

AMD64は、既存のx86命令セット(IA-32)を拡張し、既存のソフトウェアとの互換性を保ちつつ64ビット環境を実現したものである。

この64ビット環境をロングモード、従来のx86環境(IA-32)をレガシーモードという。

対抗するIntelも、Intel 64(旧称EM64T)として、同じ命令セットを採用することとなった。

なお、64ビット対応であっても、これをIA-64とは呼ばない。IA-64はItaniumで採用された、IA-32とは一切互換性がない新規の命令セットである。

拡張点

ロングモード環境では、次のような特徴を有する。

  • 64ビットのフラット仮想アドレッシング
  • 従来の8個のレジスタ(EAX/EBX/ECX/EDX/EBP/ESI/EDI/ESP)の64ビット化
  • 新たな8個のレジスタ(R8〜R15)の追加
  • 命令ポインタは32ビットから64ビットに拡張
  • 8個の新たなSSEレジスタを追加

命令の特徴

具体的には、ロングモードでは標準で32ビットレジスタ参照となり、従来の32ビット動作と互換性がある。

例えば、次の命令を例とする。

  • 01 C3 ‐ ADD EBX, EAX

16ビットの場合は「66」のプリフィックスを付ける。ここまではIA-32と同様である。

  • 66 01 C3 ‐ ADD BX, AX

64ビット演算の場合は、REXプリフィックスを付けてビット長を制御する。この点がIA-32との違いである。例えば「48」のプリフィックスを付けると、次のようになる。

  • 48 01 C3 ‐ ADD RBX, RAX

この目的のため、1バイト目が40H〜4FHの範囲は、従来のx86命令と互換性がない。

なお、8ビットの場合はIA-32と同様、1バイト目のWフィールドを0にして表現する。

  • 00 C3 ‐ ADD BL, AL

注意点等

REXプリフィックスのため、0x40〜0x4fから始まる旧来のx86命令(INC reg16、DEC reg16)はロングモードでは使用できず、これはロングモードでは機械語コードが変更されている。

プログラム動作中にロングモードかどうかを確認するには、IA32_EFERレジスタのビット8を参照し(但し特権命令(RING 0)でないと参照できない)、ここが1ならロングモードと判断する。