Вопрос № 28862: добрый день, уважаемые кодеры! обращаюсь к вам вот с таким вопросом:
компиляция программы (из книги уважаемого Калашникова) fasm'ом (fasm for dos, ver. 1.64) проходит успешно, но при запуске программы из xp-ной консоли, винда возвращает ошибку:<b...
Вопрос № 28.862
добрый день, уважаемые кодеры! обращаюсь к вам вот с таким вопросом:
компиляция программы (из книги уважаемого Калашникова) fasm'ом (fasm for dos, ver. 1.64) проходит успешно, но при запуске программы из xp-ной консоли, винда возвращает ошибку:
"процессор NTVDM обнаружил недопустимую инструкцию.
CS:0ddb IP:1220 OP:63 73 65 73 73"
если запускать программу в dosbox, то она просто "виснет".
будьте любезны, подскажите, пожалуйста, что неправильно.
подозреваю, что проблема связана с буфером.
очень признателен за внимание и помощь!
Приложение:
Отправлен: 03.11.2005, 21:10
Вопрос задал: kb_08h (статус: Посетитель)
Всего ответов: 4 Мини-форум вопроса >>> (сообщений: 3)
Отвечает: Sager
Здравствуйте, kb_08h!
С fasm'om я не работал да и под рукой нету, но есть способ проверить на какой инструкции вылазит ошибка. Берешь две команды:
mov ah,10h
int 16h
и поочередно вставляешь после каждой(нескольких) команды, например так:
mov ax,3d00h
mov dx,file_name
int 21h
;--
mov ah,10h
int 16h
Если ошибка вылазит до того, как ты нажмешь какую-либо клавишу - значит ошибка выше, если нет, то убираешь mov ah,10h/int 16h и ставишь на несколько инструкций ниже и тд.(да и еще я не знаю как там у fasm'a, но вроде вместо mov dx,file_name нужно писать lea dx,file_name)
Ответ отправил: Sager (статус: Студент)
Отправлен: 03.11.2005, 21:20
Отвечает: Лысков Игорь Витальевич
Здравствуйте, kb_08h!
Я fasm-ом не пользуюсь, но крепко подозреваю, что
проблема в следующих командах:
buffer equ 0 надо buffer equ $
mov ds,[buffer] тут две ошибки, надо mov dx, buffer
Почему, думаю догадаешься сам :)
Отвечает: Undertaker
Здравствуйте, kb_08h!
Не задана точка входа со всеми вытекающими.
Пожалуйста, добавьте в начало инструкцию jmp begin.
Ответ отправил: Undertaker (статус: 5-ый класс)
Отправлен: 04.11.2005, 02:47
Отвечает: Юра Устинов
Здравствуйте, kb_08h!
Программу я вашу не отлаживал, но подскажу с буфером. Вы создали com программу, значит она у вас в реальном режиме, а насколько мне известно, то в реальном режиме вы имеете возможность работать с памятью в пределах сегмента, а значит с 65535 ячейками. Вы же записываете в ваши ячейки 65000 байт, 256 байт PSP - сегментный префикс программы, это уже 65256, и свой код со стеком и данными.
Сомневаюсь что ваша программа будет 279 байт. Советую делать exe-шник там сегменты данных, кода и стека не объединены.
Удачи! FASM - Forever :)
--------- Спасём Россию!!!
Ответ отправил: Юра Устинов (статус: 4-ый класс)
Отправлен: 05.11.2005, 11:57