Вопрос № 85682: Здравствуйте уважаемые Эксперты!
У меня проблема со сборкой программы на ассемблере
Turbo Link Version 1.6.71.0 Copyright (c) 1993,1996 Borland International
выдает ошибку:
Fatal: Bad loc for fixupp in module 'hex.obj' near file ...
Вопрос № 85.682
Здравствуйте уважаемые Эксперты!
У меня проблема со сборкой программы на ассемблере
Turbo Link Version 1.6.71.0 Copyright (c) 1993,1996 Borland International
выдает ошибку:
Fatal: Bad loc for fixupp in module 'hex.obj' near file offset 123
Что она значит?
Как это исправить?
Помогите мне пожалуйста!
С уважением,
Андрей Кашин
Приложение:
Отправлен: 06.05.2007, 12:10
Вопрос задал: Felixu (статус: Посетитель)
Всего ответов: 2 Мини-форум вопроса >>> (сообщений: 1)
Отвечает: Лысков Игорь Витальевич
Здравствуйте, Felixu!
Ошибка в том, что модель flat не годится для досовской программы
1) Давай определимся, под что пишем: под ДОС или WIN32?
Очевидно, что под ДОС, а тогда модель flat не для нас. Годится small
Т.е. пишем .model small,STDCALL
Причем эту строчку надо поставить перед .586, иначе модель автоматом будет flat
2)Непонятно, каким образом формируется и передается параметр в hextodec
Если DWORD через стек, то надо arg x:dword.
Можно в EAX, тогда вообще лишнее и arg, и строчка mov eax,x
Ну и совсем лишнее local x (x - это local или arg?)
3)mov dx,seg y - лишнее
mov eax,offset y - в 16-битных сегменте даст ошибку, кроме того, по смыслу, тут надо
mov dx,offset y
4)Мелкие ошибочки: в конце ф-и, по смыслу должно быть xor al,30h
Кстати, почему xor, а не or?
5)Завершать программы по int 20h годится только для модели tiny, для всех остальных лучше использовать
mov ah,4ch
int 21h (Можно использовать макро .exit <код возврата>
Т.к. int 20h предполагает, что CS равен сегменту PSP
--------- Удачи!
Ответ отправил: Лысков Игорь Витальевич (статус: Практикант)
Ответ отправлен: 07.05.2007, 11:46 Оценка за ответ: 5 Комментарий оценки: Большое спасибо Игорь Витальевич!
Отвечает: Зенченко Константин Николаевич
Здравствуйте, Felixu!
Наличие подпрограммы hextodec наводит на мысль, что программа должна переводить 16-е числа в 10-е числа.
функция 21h/0ah вводит строку символов, поэтому добавлена подпрограмма
chartohex которая переводит строку в число.
Смотрите приложение.
Удачи!
Приложение:
--------- И только наступив на грабли мы преобретаем драгоценный опыт!
Ответ отправил: Зенченко Константин Николаевич (статус: Студент)
Ответ отправлен: 07.05.2007, 14:18 Оценка за ответ: 5 Комментарий оценки: Спасибо Огромное! :-)