いいえ、それは正しくありません。
EAX is the full 32-bit value
AX is the lower 16-bits
AL is the lower 8 bits
AH is the bits 8 through 15 (zero-based)
したがって、AX は AH:AL の半分で構成され、それ自体が EAX の下位半分です。(EAX の上半分は 16 ビット レジスタとして直接アクセスできません。取得したい場合は、EAX をシフトまたはローテーションできます。)
完全を期すために、32 ビット CPU に基づく上記に加えて、64 ビット Intel/AMD CPU には
RAX, which hold a 64-bit value, and where EAX is mapped to the lower 32 bits.
これはすべて、EBX/RBX、ECX/RCX、および EDX/RDX にも当てはまります。EDI/RDI などの他のレジスタには DI 下位 16 ビット部分レジスタがありますが、上位 8 部分はなく、下位 8 DIL は 64 ビット モードでのみアクセスできます。64 ビット アーキテクチャのアセンブリ レジスタ
AL、AH、または AX を書き込むと、歴史的な理由から、完全な AX/EAX/RAX の他のバイトは変更されません。たとえば、新しい AL を完全な RAX にマージする必要があります。(32 ビットまたは 64 ビットのコードでは、このマージが特に必要ない場合は、movzx eax, byte [mem]
またはロードを優先してください:なぜ GCC は部分レジスタを使用しないのですか? )movzx eax, word [mem]
EAX ゼロ拡張を RAX に書き込む。( 32 ビット レジスタの x86-64 命令が完全な 64 ビット レジスタの上位部分をゼロにするのはなぜですか? )
繰り返しますが、これはすべて RAX だけでなく、すべてのレジスターに適用されます。たとえば、DI または DIL を書き込むと古い RDI にマージされ、EDI を書き込むと完全な RDI がゼロ拡張されて上書きされます。R10B または R10W の書き込みも同様で、R10D を書き込み、古い R10 値から独立した R10 を残します。