Линкер выдает ошибку Error: Fixup overflow

Низкоуровневое программирование портов, микроконтроллеров и т.д.

Модератор: Andy

Ответить
Blind Guardian
Сообщения: 5
Зарегистрирован: 16 фев 2008, 17:51

Здравствуйте. Делаю лабку на асме. Писал себе спокойно, тестировал попутно. Но в один момент линкер (после успешной компиляции) стал выдавать вот такое дело:

Код: Выделить всё

Turbo Link  Version 5.1 Copyright (c) 1992 Borland International
Error: Fixup overflow at PROGRAM_TEXT:00C9, target = PROGRAM_TEXT:0000 in module PROGRAM.ASM
Error: Fixup overflow at PROGRAM_TEXT:013A, target = PROGRAM_TEXT:0000 in module PROGRAM.ASM
Error: Fixup overflow at PROGRAM_TEXT:0161, target = PROGRAM_TEXT:0000 in module PROGRAM.ASM
Error: Fixup overflow at PROGRAM_TEXT:0188, target = PROGRAM_TEXT:0000 in module PROGRAM.ASM
Error: Fixup overflow at PROGRAM_TEXT:01CD, target = PROGRAM_TEXT:0000 in module PROGRAM.ASM
Error: Fixup overflow at PROGRAM_TEXT:01F4, target = PROGRAM_TEXT:0000 in module PROGRAM.ASM
Error: Fixup overflow at PROGRAM_TEXT:021B, target = PROGRAM_TEXT:0000 in module PROGRAM.ASM
Я поискал, почитал в инете. Так понял, что, видимо, моя программка немного разрослась и её теперь надо разбивать на модули какие-то, а то линковщик перестал видеть че то. В общем, подскажите, что делать, чтобы продолжить работу.

Использую TASM (Turbo Assembler Version 3.1) и TLINK (Turbo Link Version 5.1)
Аватара пользователя
somewhere
Сообщения: 1858
Зарегистрирован: 31 авг 2006, 17:14
Откуда: 71 RUS
Контактная информация:

Текст программы сюда выложите
It's a long way to the top if you wanna rock'n'roll
Blind Guardian
Сообщения: 5
Зарегистрирован: 16 фев 2008, 17:51

В общем моя программа довольно великовата, чтобы всё выкидывать сюда в текстовое поле. Поэтому я приложил архив с файлами. Программа состоит из нескольких файлов, это всё для большей структурированности кода.
Короче :
файлы с расширением .mac -- файлы с макросами
файлы с расширением .pro -- файлы с процедурами
файлы с расширением .dat -- файлы с данными (то, что должно быть в разделе data)
файлы с расширением .con -- файлы с константами

Вот код главного файла программы:

Код: Выделить всё

ifndef __PROGRAM__
__PROGRAM__ = 1

include pseudo.mac
include tools.con
include tools.mac
include menu.mac

include books.con
include books.mac ; если это закомментировать то будет линковаться

.model huge

.stack 500	

.data

	include tools.dat
	include books.dat ;если это закомментировать то будет линковаться

	n1 db 'case1$'
	n2 db 'case2$'
	n3 db 'case3$'
	n4 db 'case4$'
	
	menuText	db ' 1) menuItem1',RN
				db ' 2) menuItem2',RN
				db ' 3) menuItem3',RN
				db ' 4) menuItem4',RN,'$'

.code

include tools.pro
include books.pro ; если это закомментировать то будет линковаться


proc1 proc  
	print n1
	ret 
endp

proc2 proc 
	print n2
	ret 
endp

proc3 proc 
	print n3
	ret 
endp

proc4 proc 
	print n4
	ret 
endp

begin:	
	_prolog	

	menu 0, menuText, 4
		menuItem 0, 0, proc1, 4
		menuItem 0, 1, proc2, 4
		menuItem 0, 2, proc3, 4
		menuItem 0, 3, proc4, 4		

	_finish
end begin

ENDIF
Ща в следующих нескольких постах дам tlink и tasm, а то большие слишком они.
--------------------------------------------------------------------------------
Добавлено сообщение
--------------------------------------------------------------------------------
Короче, вот ссылка на архив со всей рабочей папкой: http://postdownload.filefront.com/13656 ... c47d9dae31
Вложения
Lab2.zip
(4.26 КБ) 50 скачиваний
Аватара пользователя
somewhere
Сообщения: 1858
Зарегистрирован: 31 авг 2006, 17:14
Откуда: 71 RUS
Контактная информация:

Fixup overflow, frame = xxxxh, target = xxxxh,
offset=xxxxh module XXXXXXXX

(переполнение корректировок, граница =xxxxh, цель=xxxxh, смеще-
ние=xxxxh модуль ХХХХХХХХ)

Это сообщение указывает на то, что в загруженном для компо-
новки модуле неправильные данные, либо неправильная ссылка. В по-
ле Fixup находится имя, на которое производится ссылка, а также
имя сегмента, где оно должно находится. Значение поля frame - это
сегмент, где должно находиться имя в объектном файле. Значением
поля target является сегмент, в котором находится это имя в нас-
тоящее время. В поле offset указано смещение внутри сегмента
target для имени.

Это сообщение часто появляется при неправильном определении
моделей памяти, а также если генерируется near-вызов для перемен-
ной. Для того, чтобы разобраться в причинах, вызвавших это сооб-
щение, необходимо получить карту (map) загрузочного модуля при
помощи параметра /m. По значениям target и offset надо найти имя,
на которое производится ссылка. Если это сделать не удалось, то
надо взять имя, ближайшее к этому адресу. Затем выяснить по текс-
ту исходного модуля в чем же дело.
А размер вашей программы ничтожно мал и не является причиной возникновения этой ошибки. В моих программах, размер которых доходил до 250К исходного текста, ничего подобного не возникало.
It's a long way to the top if you wanna rock'n'roll
Blind Guardian
Сообщения: 5
Зарегистрирован: 16 фев 2008, 17:51

Я нашел решение. Если у кого будет такая же проблема, то одним из её решений является смена программы-линкера на более современную. Например вот:
http://alink.sourceforge.net/
ftp://ftp.microsoft.com/Softlib/MSLFILES/LNK563.EXE

Вторую ссылку я не пробовал, так как первая помогла.


somewhere,
Тогда как же можно объяснить причину возникновения проблемы именно в этом случае?
Ответить