#assembly #x86-64 #nasm
#сборка #x86-64 #nasm
Вопрос:
Сегодня я написал одну из своих самых первых программ на ассемблере, но я продолжаю получать сообщение об ошибке.
Я использую ОС win64 и ассемблер nasm.
Это мой код:
section .data
section .bss
rcxOfFirst resq 1d
rdxOfFirst resq 1d
section .text
global _main
_main:
mov ah,2ch ; display system time
int 21h
mov rcxOfFirst,RCX
mov rdxOfFirst,RDX
time2.asm: 18: ошибка: недопустимая комбинация кода операции и операндов; Мое сообщение об ошибке
time2.asm: 19: ошибка: недопустимая комбинация кода операции и операндов
Комментарии:
1. Возможно, вам понадобятся квадратные скобки вокруг вашего операнда для разыменования указателя:
mov [rcxOfFirst],RCX
2. Также обратите
int 21h
внимание на 16-разрядную функцию DOS, в то время как вы, похоже, пишете 64-разрядный код для другой ОС (который вы забыли указать вместе с используемым ассемблером). Это не сработает. Кроме того, ваша программа не имеет конца, она завершится сбоем, даже если вы соберете ее и свяжете.3. Как вы вызываете nasm?
4. Немедленным не может быть назначение, только память или регистр.
mov rcxOfFirst,RCX
в основном то же самое, что иmov 12345, RCX
, но компоновщик заполняет адрес символа во время компоновки.
Ответ №1:
В синтаксисе Intel регистр / адрес назначения стоит первым в списке операндов, а источник — вторым.
mov rcx, rcxofFirst ; loads rcx with rcxofFirst.
Вы перепутали порядок своих операндов.
Также вы, кажется, пишете 16-разрядную сборку с ‘int 21h’, которая использовалась в DOS.