错误:地址大小不可能组合

时间:2019-02-13 17:54:37

标签: assembly nasm x86-64

我正在尝试学习如何使用汇编语言来洗牌。我精通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上看到所有使用的寄存器都具有相同的大小,那么为什么会出错呢?

1 个答案:

答案 0 :(得分:6)

您正在编写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)