Господа, посмотрите пожалуйста проектик.
Ошибка в команде lidt
mismatch in operand sizes
Но, самое интересное, что если убрать -Anasmelf, то компилит без ошибок.
Как заставить его компилироваться без ошибок?
Спасибо.
Добавлено спустя 3 часа 27 минут 16 секунд:
И второй вопрос походу останется без ответа.
Может я пишу не понятно?
ошибка во в assembler процедуре
Модератор: Модераторы
-
smartmaster
- новенький
- Сообщения: 13
- Зарегистрирован: 27.03.2010 14:56:30
ошибка во в assembler процедуре
У вас нет необходимых прав для просмотра вложений в этом сообщении.
- Sergei I. Gorelkin
- энтузиаст
- Сообщения: 1409
- Зарегистрирован: 24.07.2005 14:40:41
- Откуда: Зеленоград
Ошибка mismatch in operand sizes чаще всего означает отсутствие указания размера (byte ptr/word ptr/dword ptr) перед операндом.
Кроме того, вывод в текстовый формат nasm едва ли кто-то когда-то отлаживал, поэтому при использовании -Anasmelf можно наловить каких угодно косяков.
Кроме того, вывод в текстовый формат nasm едва ли кто-то когда-то отлаживал, поэтому при использовании -Anasmelf можно наловить каких угодно косяков.
-
smartmaster
- новенький
- Сообщения: 13
- Зарегистрирован: 27.03.2010 14:56:30
Спасибо, что откликнулись Сергей, а то я уж думал, что никто ничего не скажет.
-Anasmelf я выбрал потому, что в таком режиме можно заглянуть в *.s файлы подключая режим -a
Если выбрать ассемблер по умолчанию то он не может скомпилить сгененрированный файл.
Например оставим режим -al без -Anasmelf в этом же проекте.
выдает ошибки(ниже). Самое интересное, что при отключенном режиме -al все компилится без ошибок. Може можно как нибудь скомпилить без ошибок (любым ассемблером ), что бы можно было посмотреть какой код генерит компилятор?
obj\asmproc.s: Assembler messages:
obj\asmproc.s:11: Warning: .type pseudo-op used outside of .def/.endef ignored.
obj\asmproc.s:11: Error: junk at end of line, first unrecognized character is `A
'
obj\asmproc.s:31: Warning: .size pseudo-op used outside of .def/.endef ignored.
obj\asmproc.s:31: Error: junk at end of line, first unrecognized character is `A
'
obj\asmproc.s:36: Warning: .type pseudo-op used outside of .def/.endef ignored.
obj\asmproc.s:36: Error: junk at end of line, first unrecognized character is `A
'
obj\asmproc.s:46: Warning: .size pseudo-op used outside of .def/.endef ignored.
obj\asmproc.s:46: Error: junk at end of line, first unrecognized character is `A
'
obj\asmproc.s:51: Warning: .type pseudo-op used outside of .def/.endef ignored.
obj\asmproc.s:51: Error: junk at end of line, first unrecognized character is `A
'
obj\asmproc.s:68: Warning: .size pseudo-op used outside of .def/.endef ignored.
obj\asmproc.s:68: Error: junk at end of line, first unrecognized character is `A
'
obj\asmproc.s:75: Warning: .type pseudo-op used outside of .def/.endef ignored.
obj\asmproc.s:75: Error: junk at end of line, first unrecognized character is `T
'
obj\asmproc.s:80: Warning: .size pseudo-op used outside of .def/.endef ignored.
obj\asmproc.s:80: Error: junk at end of line, first unrecognized character is `T
'
obj\asmproc.s:178: Error: junk at end of line, first unrecognized character is `
-Anasmelf я выбрал потому, что в таком режиме можно заглянуть в *.s файлы подключая режим -a
Если выбрать ассемблер по умолчанию то он не может скомпилить сгененрированный файл.
Например оставим режим -al без -Anasmelf в этом же проекте.
выдает ошибки(ниже). Самое интересное, что при отключенном режиме -al все компилится без ошибок. Може можно как нибудь скомпилить без ошибок (любым ассемблером ), что бы можно было посмотреть какой код генерит компилятор?
obj\asmproc.s: Assembler messages:
obj\asmproc.s:11: Warning: .type pseudo-op used outside of .def/.endef ignored.
obj\asmproc.s:11: Error: junk at end of line, first unrecognized character is `A
'
obj\asmproc.s:31: Warning: .size pseudo-op used outside of .def/.endef ignored.
obj\asmproc.s:31: Error: junk at end of line, first unrecognized character is `A
'
obj\asmproc.s:36: Warning: .type pseudo-op used outside of .def/.endef ignored.
obj\asmproc.s:36: Error: junk at end of line, first unrecognized character is `A
'
obj\asmproc.s:46: Warning: .size pseudo-op used outside of .def/.endef ignored.
obj\asmproc.s:46: Error: junk at end of line, first unrecognized character is `A
'
obj\asmproc.s:51: Warning: .type pseudo-op used outside of .def/.endef ignored.
obj\asmproc.s:51: Error: junk at end of line, first unrecognized character is `A
'
obj\asmproc.s:68: Warning: .size pseudo-op used outside of .def/.endef ignored.
obj\asmproc.s:68: Error: junk at end of line, first unrecognized character is `A
'
obj\asmproc.s:75: Warning: .type pseudo-op used outside of .def/.endef ignored.
obj\asmproc.s:75: Error: junk at end of line, first unrecognized character is `T
'
obj\asmproc.s:80: Warning: .size pseudo-op used outside of .def/.endef ignored.
obj\asmproc.s:80: Error: junk at end of line, first unrecognized character is `T
'
obj\asmproc.s:178: Error: junk at end of line, first unrecognized character is `
- Sergei I. Gorelkin
- энтузиаст
- Сообщения: 1409
- Зарегистрирован: 24.07.2005 14:40:41
- Откуда: Зеленоград
Смотреть, что получается, можно с использованием -Anasmelf -al, а компилировать рабочий вариант без этих ключей. Код в обеих случаях генерится один и тот же.
Так, чтобы и посмотреть, и потом скомпилировалось ассемблером, скорее всего можно с ключом -Aas. Но ассемблерный текст будет в непривычном формате AT&T.
Так, чтобы и посмотреть, и потом скомпилировалось ассемблером, скорее всего можно с ключом -Aas. Но ассемблерный текст будет в непривычном формате AT&T.
-
smartmaster
- новенький
- Сообщения: 13
- Зарегистрирован: 27.03.2010 14:56:30
; [22] lidt word ptr [idt]
lidt word [eax]
в asmproc.s комплилятор делает по своему.
потом nasm не может это разобрать.
Странно почему не работает опция -RDirect? в -h показывает, а реально не работает.
lidt word [eax]
в asmproc.s комплилятор делает по своему.
потом nasm не может это разобрать.
Странно почему не работает опция -RDirect? в -h показывает, а реально не работает.
