Assembly Gnu汇编程序提供意外的内存操作数

Assembly Gnu汇编程序提供意外的内存操作数,assembly,x86-64,gnu,gnu-assembler,yasm,Assembly,X86 64,Gnu,Gnu Assembler,Yasm,GNU汇编程序在汇编英特尔语法代码时提供了意外的内存操作数 我已经把我的bug减少到了一行代码,在过去的三天里,我尝试了一切去理解为什么GNU汇编程序会产生一些我无法理解的东西。我知道这一定(或应该)是微不足道的,但我不知所措 文件code.asm中包含以下文本: .intel_syntax noprefix .global somecode somecode: int 3 mov rax,qword [rcx] ret .att_syntax 组装和分

GNU汇编程序在汇编英特尔语法代码时提供了意外的内存操作数

我已经把我的bug减少到了一行代码,在过去的三天里,我尝试了一切去理解为什么GNU汇编程序会产生一些我无法理解的东西。我知道这一定(或应该)是微不足道的,但我不知所措

文件code.asm中包含以下文本:

.intel_syntax noprefix
.global somecode
somecode: 
    int 3
    mov        rax,qword [rcx]
    ret
.att_syntax
组装和分解code.asm时使用:

as code.asm -o code1.obj -64 
objdump -Mintel -d code1.obj > code1.asm
code1.asm(带反汇编代码)的内容为:

code2.asm的内容是:

code2.obj:     file format pe-x86-64
Disassembly of section .text:
0000000000000000 <somecode>:
   0:   cd 03                   int    0x3
   2:   48 8b 01                mov    rax,QWORD PTR [rcx]
   5:   c3                      ret
code2.obj:文件格式pe-x86-64
第节的分解。正文:
0000000000000000 :
0:cd 03 int 0x3
2:48 8b 01 mov rax,QWORD PTR[rcx]
5:c3 ret

关于内存操作数,这是我所期望的。我怎样才能指示GNU也这样做呢?

您需要编写
mov-rax,qword-ptr[rcx]
。显然,
qword
本身就决定了大小,即
8
,因此您的代码组合为
mov-rax,8[rcx]
。实际上,
mov-rax,qword
也作为
mov-rax,8
进行汇编


有趣的是,您的“交叉检查”使用了正确的语法:)

非常简单,这是有意义的,而且有效,thanx。这是一块真正的虫子磁铁。应该有一些警告。。。
yasm -f x64 -o code2.obj --parser=gas code.asm
objdump -Mintel -d code2.obj > code2.asm
code2.obj:     file format pe-x86-64
Disassembly of section .text:
0000000000000000 <somecode>:
   0:   cd 03                   int    0x3
   2:   48 8b 01                mov    rax,QWORD PTR [rcx]
   5:   c3                      ret