Консультация № 66143
08.12.2006, 18:33
0.00 руб.
0 6 1
s segment
org 100h
start:

mov ah, 09
mov dx, offset string
int 21
int 20

string db ‘PRIVET$‘

s ends
end start

Программа вроде верно написана
Но вот при линковке(использую MASM под виндоус) пишет следующее

asmmmmmm.obj:fatal error LNK1190: invalid fixup found, type 0x0001
_
Link Error

В чем дело?

поравьте, если что не так
спасибо

Обсуждение

Неизвестный
08.12.2006, 18:55
общий
Единственное, к чему придерусь: INT 21H и INT 20h, всё-таки подразумевались шестнадцатеричные номера прерываний.TASM+TLINK реагирует вполне нормально (Warning: no stack)
Неизвестный
08.12.2006, 19:10
общий
если их исправить на INT 21H и INT 20hничего не изменится пробовал несколько разне знаете что означает эта ошибка?invalid fixup found
Неизвестный
09.12.2006, 01:16
общий
это ответ
Здравствуйте, дим!
Компилятор и линкер проглотят и INT 21H, и INT 21.
Но правильнее INT 21H, потому что это нужный номер прерывания. А если задавать просто 21, то когда запустите исполняемый модуль, то он зависнет (если тянет на десятичные номера, пишите 33).
А насчёт "invalid fixup found" - насколько я помню это ругательство на неверный номер. (типа запихнуть 257 в однобайтовую ячейку и т.п.). В коде на первый взгляд проблем нет. Единственное предложение - перенаберите на всякий случай все цифры ещё раз, может там буква "о" вместо нуля где-то.... (или ещё что-то такое, может русская буква вместо латиницы. А ещё посмотрите на номер строки, на которую ругается)
Попробуйте также сделать пустую програму, т.е. начало и сразу выход. Если и дальше будет ругаться, то ошибку будет легче найти (меньше вариантов), а если не будет - то добавляйте нужные строки в уже работающий код (и если заглючит - будете знать, что ошибка в них).
(P.S. сам знаю что ответ плохой, но вдруг поможет?)
Неизвестный
09.12.2006, 01:26
общий
ох, кажется сильно ошибся. Если компилирует нормально и выдаёт obj, то в тексте наверно ошибок нет. Ошибки при линковке, а я проглядел.... Проверьте какой линкер и ассемблер вы используете, может быть они разных типов, 16 и 32-битные?И ещё, проверьте - вы задаёте именно скомпилированный ассемблером obj-файл, а не какой-нибудь переименованный в obj некомпилированный текстовый файл? (Простите если несправиедливо подозреваю вас в ошибке, но мне кажется что если бы линкеру задать текстовый файл, то он ругался бы подобным образом).И ещё одна бредовая идея- проверьте одинаковй ли формат у obj-файлов. Вроде бы есть COFF-формат и ещё какой-то, и они несовместимы. Если вдруг ассемблер и линкер настроены на разные форматы, то я думаю линкер ругался бы подобным образом.
Неизвестный
09.12.2006, 03:16
общий
>не знаете что означает эта ошибка?>invalid fixup foundhttp://msdn2.microsoft.com/en-us/library/ha0f0278.aspxError Message:invalid fixup found, type typeSolution:The object file is corrupt. Recompile.Т.е. это сообщение говорит об испорченом объектном модуле (*.obj), может возникнуть при ошибке в библиотеках (*.lib) линковщика.Посмотрите ответы на вопрос № 18207http://rusfaq.ru/info/question/18207PS:исправил номера прерываний и TASM 4.1 "проглатил":tasm /m9 a.asmtlink /t a.asm
давно
Советник
419
1011
14.12.2006, 18:13
общий
установите формат объектног офайла один и тот же для ассемблера, и для связного
Форма ответа