20 / 16 / 7
Регистрация: 27.02.2012
Сообщений: 742
|
||||||
1 | ||||||
Процедуры, прерывания [FASM]14.11.2013, 00:09. Показов 8342. Ответов 53
Метки нет (Все метки)
Выделил то, что не понятно или не реализовано. Впервые сталкиваюсь с прерываниями и процедурами и как следствие, творение рук моих не работает... где ошибся?
0
|
14.11.2013, 00:09 | |
Ответы с готовыми решениями:
53
[Вопрос] Перехват прерывания прямым доступом к вектору прерывания Обработчик прерывания int 21h (по книге Калашникова) Реализация функции 42h прерывания 13h на FASM [FASM] Переделка процедуры |
336 / 18 / 1
Регистрация: 15.05.2012
Сообщений: 22
|
|
14.11.2013, 02:26 | 2 |
Satansoft, путь решение этой проблемы мне видится таким:
o Разобраться с основными архитектурными различиями MS DOS и Windows. o Какие бывают режими работы процессора. o Все же определиться, под какую платформу нужно написать программу. Не иначе.
1
|
20 / 16 / 7
Регистрация: 27.02.2012
Сообщений: 742
|
|
14.11.2013, 02:33 [ТС] | 3 |
это DOS: прерывания и FASM'овские особенности объявления процедур. В то время, как процедуры относительно ясны, в использовании прерываний я юный падаван, от того требуется взор опытного мастера-джедая.
0
|
336 / 18 / 1
Регистрация: 15.05.2012
Сообщений: 22
|
|
14.11.2013, 03:05 | 4 |
Satansoft,
Почитайте прилагающуюся к fasm справочку, особенно главу 2.4.1 MZ executable.
2
|
644 / 148 / 31
Регистрация: 11.02.2013
Сообщений: 277
|
|
14.11.2013, 04:53 | 5 |
Товарищ rotas уже всё сказал. Но попробую по другому объяснить.
Процедуры DOS'осовские, а заголовок и конец Windows'кий. Так работать, не будет! Если пишешь для DOS, то всё должно быть DOS'овское. Тоже правило и для других осей.
2
|
20 / 16 / 7
Регистрация: 27.02.2012
Сообщений: 742
|
||||||
14.11.2013, 23:02 [ТС] | 6 | |||||
Видимо я изначально понимал о чем речь, но ось у меня x64 и х16 программы не работают, из положения можно выйти используя API и высокоуровневые функции?
Добавлено через 4 часа 54 минуты Новая версия фолианта, который даже в отладчике не проверишь из-за 64-битности, DOSbox же и вовсе зависает. Ввод/вывод синтаксически верен? НЕ ясен нюанс максимальной и фактической длины строки на ввод...как система вообще различает где что?
0
|
644 / 148 / 31
Регистрация: 11.02.2013
Сообщений: 277
|
|
15.11.2013, 00:15 | 7 |
Да, можно на API написать.
И немудрено! Код не правельный, изначально. Мне пока тоже.
0
|
20 / 16 / 7
Регистрация: 27.02.2012
Сообщений: 742
|
|
15.11.2013, 00:20 [ТС] | 8 |
0
|
644 / 148 / 31
Регистрация: 11.02.2013
Сообщений: 277
|
|
15.11.2013, 00:31 | 9 |
Ну например, строка 3. DOS 16 битная. Во-вторых, адрес передаётся без скобочек. Ещё строки 13 и 14, неверны.
1
|
20 / 16 / 7
Регистрация: 27.02.2012
Сообщений: 742
|
|||||||||||
15.11.2013, 00:38 [ТС] | 10 | ||||||||||
0
|
20 / 16 / 7
Регистрация: 27.02.2012
Сообщений: 742
|
|
15.11.2013, 00:40 [ТС] | 11 |
После корректировок ругается на содержимое регистра сегмента кода.
0
|
644 / 148 / 31
Регистрация: 11.02.2013
Сообщений: 277
|
|
15.11.2013, 00:53 | 12 |
В 16 битном режиме, 32 битные регистры не используются по определению.
Добавлено через 11 минут Строки: 22, 27, 33, 38, тоже не в тему. Зачем расширять знаком, адрес?
1
|
20 / 16 / 7
Регистрация: 27.02.2012
Сообщений: 742
|
||||||||||||||||
15.11.2013, 00:54 [ТС] | 13 | |||||||||||||||
Как организовывается ввод?
Функция 0Ah 21h прерывания требует: Максимальную длину буфера (без учета 0dh) Действительную длину буфера и сам буфер (с учетом 0dh) Но как компилятор ориентируется где что? Вариант объявления:
Актуальный код:
0
|
644 / 148 / 31
Регистрация: 11.02.2013
Сообщений: 277
|
||||||
15.11.2013, 01:14 | 14 | |||||
Как я понял, должно быть так (для ф.0Ah 21h):
0
|
20 / 16 / 7
Регистрация: 27.02.2012
Сообщений: 742
|
|
15.11.2013, 01:28 [ТС] | 15 |
Загоняет в этот самый буфер черт знает что... equ заменено на db
Ругаецо на размерности... не понятно как это работает)
0
|
644 / 148 / 31
Регистрация: 11.02.2013
Сообщений: 277
|
||||||
15.11.2013, 04:22 | 16 | |||||
Nf-lf
Добавлено через 6 минут Спать хочу. Ошибки полезли. Добавлено через 5 минут Щас всё будет. Добавлено через 2 часа 29 минут Вот, переделал малость. Работает, но без мерцания. Функцию мерцания надо делать отдельно. Та что используется, скорее всего, у тебя работать не будет (у меня, не работает). Может завтра сделаю, если получится, а сейчас спать буду (с ног валюсь).
1
|
20 / 16 / 7
Регистрация: 27.02.2012
Сообщений: 742
|
|
15.11.2013, 15:55 [ТС] | 17 |
Вы таки решили функцией посимвольного ввода реализовать?
Что за строки? Сама программа не запускается, окно открывается и сразу гаснет...
0
|
644 / 148 / 31
Регистрация: 11.02.2013
Сообщений: 277
|
|
15.11.2013, 16:06 | 18 |
Именно так.
Пишет число 1, в строку line: db 'String :', CRLF. Странно... у меня работает замечательно.
1
|
20 / 16 / 7
Регистрация: 27.02.2012
Сообщений: 742
|
|
15.11.2013, 16:08 [ТС] | 19 |
На виртуалке мигнуло, в DOSbox выбило 2 раза String и висяк... панико-панико...
0
|
644 / 148 / 31
Регистрация: 11.02.2013
Сообщений: 277
|
|
15.11.2013, 16:14 | 20 |
Вот скрины и бинарник.
1
|
15.11.2013, 16:14 | |
15.11.2013, 16:14 | |
Помогаю со студенческими работами здесь
20
Добавление процедуры прерывания в класс Вызываю dll (написанную на vc++2008) из Fasm. Через 40 секунд вылет из программы.Без вызова dll из Fasm программа не вылетает. Вычислить адрес вектора прерывания по номеру прерывания. Вызов прерывания в обработке прерывания Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |