ошибка: невозможна комбинация размеров адресов - PullRequest
0 голосов
/ 13 февраля 2019

Я пытаюсь научиться перетасовывать колоду, используя язык ассемблера.Я свободно говорю на 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

IЯ предполагаю, что это имеет проблемы с регистрами, которые я использую, но я понятия не имею о правилах в сборке.Я учусь, используя tutorialspoint , но если у кого-нибудь есть какие-либо рекомендации о других местах, я мог бы узнать об этом лучше, это было бы полезно.На этом ответе я также видел, что все используемые регистры имеют одинаковый размер, так почему же ошибка?

1 Ответ

0 голосов
/ 13 февраля 2019

Вы пишете 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)
...