dro*_*oob 1 assembly x86-64 nasm
我正在尝试学习如何使用汇编语言来改变牌组.我精通java,我可以很容易地将java翻译成C,但我在ASM上遇到了困难.这是我现在遇到的代码块:
MOV R8, [RDI+RSI*4]
MOV R9, [RDI+RDX*4]
MOV [RDI+RSI*4], R9
MOV [RDI+RDX*4], R8
Run Code Online (Sandbox Code Playgroud)
我一直在
error: impossible combination of address sizes
Run Code Online (Sandbox Code Playgroud)
它是用命令运行的
nasm -f elf FILE-NAME.asm
Run Code Online (Sandbox Code Playgroud)
我猜它与我正在使用的寄存器有问题,但我不知道汇编中的规则.我正在学习使用tutorialspoint但是如果有人对其他地方有任何建议我可以更好地学习它,这将是有帮助的.我也在这个答案上看到所有使用的寄存器都有相同的大小,为什么会出错呢?
您正在编写64位代码,但您的-f elfNASM将处于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)
Run Code Online (Sandbox Code Playgroud)