Assembly x86汇编编程(GAS语法):尝试打印寄存器值时寄存器名称错误

Assembly x86汇编编程(GAS语法):尝试打印寄存器值时寄存器名称错误,assembly,x86,att,sasm,Assembly,X86,Att,Sasm,我正在编写一个程序,将EAX寄存器的值打印到控制台上。然而,当我执行程序的代码时,我收到一系列错误,表示寄存器(rax、rdi、rsi和rdx)不存在。这似乎很奇怪,因为我认为这些寄存器存在于x86计算机体系结构上 下面是我的汇编代码(x86使用GAS/AT&T语法): 以下是错误的输出: /tmp/SASM/program.asm: Assembler messages: /tmp/SASM/program.asm:5: Error: bad register name `%rax' /tmp

我正在编写一个程序,将EAX寄存器的值打印到控制台上。然而,当我执行程序的代码时,我收到一系列错误,表示寄存器(rax、rdi、rsi和rdx)不存在。这似乎很奇怪,因为我认为这些寄存器存在于x86计算机体系结构上

下面是我的汇编代码(x86使用GAS/AT&T语法):

以下是错误的输出:

/tmp/SASM/program.asm: Assembler messages:
/tmp/SASM/program.asm:5: Error: bad register name `%rax'
/tmp/SASM/program.asm:6: Error: bad register name `%rdi'
/tmp/SASM/program.asm:7: Error: bad register name `%rsi'
/tmp/SASM/program.asm:8: Error: bad register name `%rdx'
您(或SASM)大概是以32位代码的形式进行组装的,比如使用
gcc-m32
。这些寄存器名在32位模式下无效,仅在64位代码中有效。此外,带有32位或64位寄存器的
movb
显然是无效的
b
表示“字节”操作数大小。只需使用
mov
,并让寄存器暗示操作数大小。
/tmp/SASM/program.asm: Assembler messages:
/tmp/SASM/program.asm:5: Error: bad register name `%rax'
/tmp/SASM/program.asm:6: Error: bad register name `%rdi'
/tmp/SASM/program.asm:7: Error: bad register name `%rsi'
/tmp/SASM/program.asm:8: Error: bad register name `%rdx'