【问题标题】:error: impossible combination of address sizes错误:地址大小的不可能组合
【发布时间】:2019-07-07 15:52:57
【问题描述】:

我正在尝试学习如何使用汇编语言来洗牌。我精通java,我可以很容易地将java翻译成C,但我在使用ASM时遇到了困难。这是我现在遇到问题的代码块:

MOV R8, [RDI+RSI*4]

MOV R9, [RDI+RDX*4]

MOV  [RDI+RSI*4], R9

MOV  [RDI+RDX*4], R8

我一直在努力

error: impossible combination of address sizes

它是用命令运行的

nasm -f elf FILE-NAME.asm

我猜我正在使用的寄存器有问题,但我不知道汇编中的规则。我正在学习使用tutorialspoint,但如果有人对其他地方有任何建议,我可以更好地了解它,那会很有帮助。我在这个answer 上也看到了所有使用的寄存器都有相同的大小,那么为什么会出错呢?

【问题讨论】:

    标签: assembly nasm x86-64


    【解决方案1】:

    您正在编写 64 位代码,但您的 -f elf 会将 NASM 置于 32 位模式。请改用elf64

    $ cat foo.asm
    MOV R8, [RDI+RSI*4]
    
    $ nasm -f elf foo.asm
    foo.asm:1: error: impossible combination of address sizes
    
    $ nasm -f elf64 foo.asm
    (no output)
    

    【讨论】:

    • 或者更好,nasm -f elf64
    • @Jester 不仅仅是“或更好”。其实BITS 64并没有解决问题。
    • 请注意,原始问题中没有提到使用-f elf 甚至涉及nasm
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-26
    相关资源
    最近更新 更多