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