![]() |
|
|
![]()
|
|
| antonov_roman |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 11.10.2003 Репутация: нет Всего: нет |
Может кто-нибудь объяснить принцип работы из ASM-проги с драйвером HIMEM.SYS? Как, например, скопировать с дискеты 1,4Мб в расширенную память в ДОСе, а потом из неё на другую дискету. Видимо или объяснить никто ничего по этой теме не может (по причине ламерства своего) или спят как сурки. Ладно немного подождём знающего человека, может быть такие ещё не совсем вымерли!? Остался н свете хотя бы один настоящий гуру ASMa, или только ламеры называющие себя знатоками.
Это сообщение отредактировал(а) antonov_roman - 12.10.2003, 01:20 |
|||
|
||||
| NightGoblin |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1021 Регистрация: 24.11.2002 Где: 127.0.0.1 Репутация: 1 Всего: 11 |
Хм... не слишком ли резко для начала?...
Ладно, подскажу что смогу Обращение к памяти за границами 1-го мегабайта в реальном режиме осуществляется либо через EMS, либо XMS. HIMEM.SYS использует интерфейс XMS. Ниже вкратце описаны основные функции для работы с ним. INT 2Fh, AX = 4300h: проверить наличие XMS. Если HIMEM.SYS загружен, возвращается AH=80h; INT 2Fh, AX = 4310h: получить точку входа XMS. Вывод: ES:BX = адрес точки входа. Далее обращение к драйверу идет через точку входа дальним CALL. Номер функции указывается в AH. Функция 00h: Определить номер версии. Параметры: нет Возвращаемое значение: AX = номер версии в неупакованном BCD формате; BX = внутренний номер модификации; DX=наличие HMA (1 - есть, 0 - нет) Функция 88h: Определить объем памяти (начиная с XMS 3.0) Параметры: нет Возвращаемое значение: EAX=размер максимального доступного блока памяти в кб; BL=ошибка (A0h- память занята); ECX=физический адрес последнего байта в памяти; EDX=размер всей XMS-памяти в кб Функция 09h: Выделить память Параметры: DX=размер запрашиваемого блока в кб Возвращаемое значение: BX = ID блока если AX = 1; если AX = 0: в BL - код ошибки (A0h - не хватает памяти) Функция 0Ah: Освободить память Параметры: DX = ID блока Возвращаемое значение: AX=1, если все нормально; AX=0 и BL=код ошибки (A2h - неверный ID, ABh - участок заблокирован) Функция 0Fh: Изменить размер блока Параметры: BX=новый размер; DX = ID блока Возвращаемое значение: AX=1 - все нормально; AX=0 - и BL=код ошибки Функция 0Bh: Пересылка данных Параметры: DS:SI = адрес структуры, описывающей пересылку (16 байт) Возвращаемое значение: AX = 1 если все нормально, иначе 0 (код ошибки в BL) Структура, описывающая пересылку данных: +00h: 4 байта = число байт для пересылки +04h: слово = ID источника (0 для обычной памяти) +06h: 4 байта = смещение в блоке-источнике (адрес для обычной памяти) +0Ah: слово = ID приемника (0 для обычной памяти) +0Ch: 4 байта = смещение в блоке-приемнике (адрес для обычной памяти) Ну вот, пока вроде все... Еще что нибудь? -------------------- Kernel panic: /dev/null overflow! GCS/IT/MU/O d-@ s: a- C++$>++++$ ULSB(+++) P+++ L+++>++++ !E W++(-) N o? K w-- O? M>+ V? PS+ PE Y+ PGP+>+++ t- 5 X+ R- !tv b+ DI+ D+ G e++ h--- r++ y? B4F1 54B6 8738 26CD 5125 0581 B923 9273 FE59 1981 |
|||
|
||||
| oleg1973 |
|
|||
![]() asm fanat ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3283 Регистрация: 16.7.2003 Где: Italy Репутация: 7 Всего: 34 |
а не проше сделать флат режим?
и драйверов никаких не нада пиши че хочеш куда хочеш -------------------- SST 465555 icq 200-512-712 |
|||
|
||||
| antonov_roman |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 11.10.2003 Репутация: нет Всего: нет |
Нет flat нельзя, т.к. задание на курсовой использовать драйвер HIMEM.SYS.
|
|||
|
||||
| antonov_roman |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 11.10.2003 Репутация: нет Всего: нет |
Спасибо за ответ NightGoblin. Но вот хочу уточнить:
-во-первых, точно ли функция 9h возвращает ID в регистр ВХ. У меня в книге Пирогова в DX и притом описатель(хотя если честно я не знаю есть ли разница между описателем и ID - не подскажешь?); -во-вторых, если мы пишем прогу для процессора 8086, то в какие регистры и как ф-ия 88h будет выдавать данные?; -в-третьих, в той же книге Пирогова ф-ия 0Bh возвращает в DS:SI указатель на данные, причём структура её если честно - чушь(два дескриптора источника и адреса источника ), а вход DX- описатель. Твоя версия мне нравится больше, по крайней мере реально. Только вопрос не мог бы ты написать по подробнее что такое ID, что указывать в источнике, если файл надо скопировать с дискеты в память, и для пересылки на другую дискету сохранённые данные в памяти пользоваться той же ф-ией? Напиши много ли полезного по этой теме в книге Зубкова. Может быть стоит мне её приобрести, а то я нащёл только единственную книгу с данной информацией - Пирогова, да там мало и похоже есть глюки. Все магазины облазил, а курсач то делать надо. Спасибо тебе за ответ, хоть ещё немного полезной и ценной информации. Да, кстати, если у тебя есть книга Зубкова или другая информация в электронном виде если не трудно пришли мне по адресу '[email protected]' или на форум. Выручай!!! Заранее спасибо. P.S. Я не со зла про ламеров на сайте. Извиняюсь |
|||
|
||||
| NightGoblin |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1021 Регистрация: 24.11.2002 Где: 127.0.0.1 Репутация: 1 Всего: 11 |
antonov_roman, хм.... хорошо. Давай по порядку.
1) Как и что возвращает эта функция - я со 100%-ной вероятностью сказать, конечно же, не могу, ибо сам с HIMEM'ом я не работал, а в книгах иногда бывают опечатки, в том числе и в таких важных местах. Попробуй, если не сработает BX - бери из DX 2) Функция 88h работает начиная с версии 3 XMS: до нее была (ну и, естественно, осталась, я просто не думал, что тебе понадобится 8086 Функция 08h: Определить объем памяти Параметры: BL = 00h Возвращаемое значение: AX = размер максимального доступного блока в кб; DX = размер XMS-памяти всего в кб; BL = код ошибки (A0h если вся XMS-память занята) 3) ID == идентификатор, просто сократил; описатель - то же самое. По поводу копирования с дискеты - думаю, тебе надо будет читать по частям в обычную память, а потом копировать в расширенную, соответственно, при записи - наоборот. 4) В книге Зубкова (Зубков С. В., Assembler. Для DOS, Windows и Unix. - М.: ДМК, 1999) по теме XMS/EMS не так уж и много - всего 6 страниц, включая исходник проги, определяющей количество доступной памяти по XMS и EMS. Воообще книга объясняет и рассказывает очень многое, но не сильно углубляясь в детали (все-таки размер книги ограничен Ну и последнее - в электронном виде я этой книги, к сожалению, не видел, так что придется поискать в магазинах. Попробуй в онлайновых - там вполне может быть, книга очень популярная. -------------------- Kernel panic: /dev/null overflow! GCS/IT/MU/O d-@ s: a- C++$>++++$ ULSB(+++) P+++ L+++>++++ !E W++(-) N o? K w-- O? M>+ V? PS+ PE Y+ PGP+>+++ t- 5 X+ R- !tv b+ DI+ D+ G e++ h--- r++ y? B4F1 54B6 8738 26CD 5125 0581 B923 9273 FE59 1981 |
|||
|
||||
| antonov_roman |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 11.10.2003 Репутация: нет Всего: нет |
NightGoblin благодарю за информацию и разъяснение глупому студенту и будущему программисту (надеюсь годика через четыре) некоторых вещей(некоторые из них как оказалось были очевидны). Наверное уже пора начинать заниматься курсачом, да и лабами всякими.
|
|||
|
||||
![]()
|
| Правила форума "Asm: Общие вопросы" | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Asm: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |