Поиск:

Ответ в темуСоздание новой темы Создание опроса
> использование ф-ий HIMEM.SYS в проге на ASMe, описание и применение фун-ий драйвера 
:(
    Опции темы
antonov_roman
  Дата 11.10.2003, 23:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 11.10.2003

Репутация: нет
Всего: нет



Может кто-нибудь объяснить принцип работы из ASM-проги с драйвером HIMEM.SYS? Как, например, скопировать с дискеты 1,4Мб в расширенную память в ДОСе, а потом из неё на другую дискету. Видимо или объяснить никто ничего по этой теме не может (по причине ламерства своего) или спят как сурки. Ладно немного подождём знающего человека, может быть такие ещё не совсем вымерли!? Остался н свете хотя бы один настоящий гуру ASMa, или только ламеры называющие себя знатоками.

Это сообщение отредактировал(а) antonov_roman - 12.10.2003, 01:20
PM MAIL   Вверх
NightGoblin
Дата 12.10.2003, 08:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1021
Регистрация: 24.11.2002
Где: 127.0.0.1

Репутация: 1
Всего: 11



Хм... не слишком ли резко для начала?...

Ладно, подскажу что смогу smile.gif Сразу оговариваюсь: за источник взята широко известная книга Зубкова smile.gif

Обращение к памяти за границами 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 байта = смещение в блоке-приемнике (адрес для обычной памяти)


Ну вот, пока вроде все... Еще что нибудь? smile.gif


--------------------
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
PM MAIL WWW ICQ   Вверх
oleg1973
Дата 13.10.2003, 17:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


asm fanat
****


Профиль
Группа: Экс. модератор
Сообщений: 3283
Регистрация: 16.7.2003
Где: Italy

Репутация: 7
Всего: 34



а не проше сделать флат режим?smile.gif
и драйверов никаких не нада пиши че хочеш куда хочешsmile.gif)


--------------------
SST 465555
icq 200-512-712
PM MAIL WWW ICQ   Вверх
antonov_roman
Дата 13.10.2003, 18:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 11.10.2003

Репутация: нет
Всего: нет



Нет flat нельзя, т.к. задание на курсовой использовать драйвер HIMEM.SYS.
PM MAIL   Вверх
antonov_roman
Дата 13.10.2003, 20:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 11.10.2003

Репутация: нет
Всего: нет



Спасибо за ответ NightGoblin. Но вот хочу уточнить:
-во-первых, точно ли функция 9h возвращает ID в регистр ВХ. У меня в книге Пирогова в DX и притом описатель(хотя если честно я не знаю есть ли разница между описателем и ID - не подскажешь?);
-во-вторых, если мы пишем прогу для процессора 8086, то в какие регистры и как ф-ия 88h будет выдавать данные?;
-в-третьих, в той же книге Пирогова ф-ия 0Bh возвращает в DS:SI указатель на данные, причём структура её если честно - чушь(два дескриптора источника и адреса источника ), а вход DX- описатель. Твоя версия мне нравится больше, по крайней мере реально. Только вопрос не мог бы ты написать по подробнее что такое ID, что указывать в источнике, если файл надо скопировать с дискеты в память, и для пересылки на другую дискету сохранённые данные в памяти пользоваться той же ф-ией? Напиши много ли полезного по этой теме в книге Зубкова. Может быть стоит мне её приобрести, а то я нащёл только единственную книгу с данной информацией - Пирогова, да там мало и похоже есть глюки. Все магазины облазил, а курсач то делать надо. Спасибо тебе за ответ, хоть ещё немного полезной и ценной информации. Да, кстати, если у тебя есть книга Зубкова или другая информация в электронном виде если не трудно пришли мне по адресу '[email protected]' или на форум. Выручай!!!
Заранее спасибо.
P.S.
Я не со зла про ламеров на сайте. Извиняюсь
PM MAIL   Вверх
NightGoblin
Дата 13.10.2003, 22:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1021
Регистрация: 24.11.2002
Где: 127.0.0.1

Репутация: 1
Всего: 11



antonov_roman, хм.... хорошо. Давай по порядку.

1) Как и что возвращает эта функция - я со 100%-ной вероятностью сказать, конечно же, не могу, ибо сам с HIMEM'ом я не работал, а в книгах иногда бывают опечатки, в том числе и в таких важных местах. Попробуй, если не сработает BX - бери из DX smile.gif

2) Функция 88h работает начиная с версии 3 XMS: до нее была (ну и, естественно, осталась, я просто не думал, что тебе понадобится 8086 smile.gif) 08h:

Функция 08h: Определить объем памяти
Параметры: BL = 00h
Возвращаемое значение: AX = размер максимального доступного блока в кб; DX = размер XMS-памяти всего в кб; BL = код ошибки (A0h если вся XMS-память занята)

3) ID == идентификатор, просто сократил; описатель - то же самое. По поводу копирования с дискеты - думаю, тебе надо будет читать по частям в обычную память, а потом копировать в расширенную, соответственно, при записи - наоборот.

4) В книге Зубкова (Зубков С. В., Assembler. Для DOS, Windows и Unix. - М.: ДМК, 1999) по теме XMS/EMS не так уж и много - всего 6 страниц, включая исходник проги, определяющей количество доступной памяти по XMS и EMS. Воообще книга объясняет и рассказывает очень многое, но не сильно углубляясь в детали (все-таки размер книги ограничен smile.gif) Вообще, я бы тебе советовал ее купить, полезная вещь.

Ну и последнее - в электронном виде я этой книги, к сожалению, не видел, так что придется поискать в магазинах. Попробуй в онлайновых - там вполне может быть, книга очень популярная.



--------------------
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
PM MAIL WWW ICQ   Вверх
antonov_roman
Дата 14.10.2003, 15:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 11.10.2003

Репутация: нет
Всего: нет



NightGoblin благодарю за информацию и разъяснение глупому студенту и будущему программисту (надеюсь годика через четыре) некоторых вещей(некоторые из них как оказалось были очевидны). Наверное уже пора начинать заниматься курсачом, да и лабами всякими.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Asm: Общие вопросы"
MAKCim
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой КОД.
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim.

 
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Asm: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0450 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.