![]() |
|
![]() ![]() ![]() |
|
PoluBOG1 |
|
|||
Unregistered |
Передача управления другой проге , как ето реализовать
![]() |
|||
|
||||
Melancholy |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 43 Регистрация: 1.4.2002 Репутация: нет Всего: нет |
грузишь код в память по адресу seg:100h потом делаешь call far seg:100h
это будет работать правильно, ести код расчитан на приращение 100h (COM файл), с EXE'шничком прийдется помудохаться... если это будет выполнятся с боот сектора, то учти, что пользоваться тебе прийдется только биосовскими интераптами. ЗЫ че изобретаем то? |
|||
|
||||
PoluBOG1 |
|
|||
Unregistered |
А как загрузить код по адресу (как енто реализовать)?
Я просто делаю я пародию на ось :-) |
|||
|
||||
PoluBOG1 |
|
|||
Unregistered |
Может кто поможет!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
|||
|
||||
Chingachguk |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1232 Регистрация: 25.3.2002 Где: Москва Репутация: нет Всего: 18 |
Ну так если твой код, как выше сказали, лежит в com-файле, то его можно разместить в памяти и передать ему управление. Как это сделать ?
Допустим, ты предполагаешь разместить этот com в нескольких секторах дискеты. Например, в Цилиндр=1, Голова=0, сектора с 1 по ... ну сколько у тебя там их ... Разместил. После того, как твой бут получил управление, читай эти сектора(можно по 1-му, можно сразу все) в выбранную тобой память, например - seg:=8000h, ofs:=0. После чтения передавай управление смело на seg:100h - или на seg:0h, если твой ком сгенерен с директивой org 0... -------------------- I don't like the drugs (but the drugs like me). M.Manson. |
|||
|
||||
Melancholy |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 43 Регистрация: 1.4.2002 Репутация: нет Всего: нет |
Да и еще:
1. с EXE'шником запаришся! 2. Не юзай досовские инты - их тем нет вообще. 3. Для выхода из подпрограммы пиши (в коде) retf ну вроде главное написал... может че и забыл. |
|||
|
||||
PoluBOG1 |
|
|||
Unregistered |
1)Скоко секторов на 1.44?
2)У меня есть код чтения секторов в книжке: mov ah,02 ;Запрос на чтение mov al,01 ; Одного сектора lea bx,insert ; Буфер ввода* mov ch,05 ;Дорожка 05 mov cl,03 ;Сектор 03 mov dh,00 ; Сторона 00 mov dl,01 ;дисковод 01 (В) Int 13h ; * Как описать етот буфер? Ето адресс? Или что? (Я чесно не знаю HELP PLEEEEEEES!!!!!!!!!!!! ![]() |
|||
|
||||
Melancholy |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 43 Регистрация: 1.4.2002 Репутация: нет Всего: нет |
Байт в секторе - 512
Значения цилиндра - 0..79 Значения секторов - 1..18 Значения головки - 0..1 типа получается, что секторов на диске 80*18*2 = 2880 а размер 2880*512 = 1474560 |
|||
|
||||
Melancholy |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 43 Регистрация: 1.4.2002 Репутация: нет Всего: нет |
mov ah,02 ;Запрос на чтение
mov al,01 ; Одного сектора lea bx,insert ; Буфер ввода* mov ch,05 ;Дорожка 05 mov cl,03 ;Сектор 03 mov dh,00 ; Сторона 00 mov dl,01 ;дисковод 01 (В) Int 13h ; ... insert db 512 dup(?) ;можешь больше 512 в зависимости от того, сколько секторов будешь читать ; а так сколько попало... |
|||
|
||||
PoluBOG1 |
|
|||
Unregistered |
А как узнать где в памяти етот insert находится будет
|
|||
|
||||
? |
|
|||
Unregistered |
И ещё : Чем кластер от сектора отличается?
|
|||
|
||||
Chingachguk |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1232 Регистрация: 25.3.2002 Где: Москва Репутация: нет Всего: 18 |
А я что хочу сказать по этому поводу ?
![]() А вот чего: 1) Число секторов, цилиндров и головок на дискете можно узнать ДИНАМИЧЕСКИ - те от БИОСА, например, так, как делет вирус(выше) - тоже через вызов Int 13h или параметры дискеты валяются в памяти, адрес этой памяти в каком-то векторе, не помню, каком, но для винта он в int 41h; Это отвяжет тебя от необходимости жестко задавать координты секторов. 2) При чтениии/записи сектора адрес буфера должен быть в ES:bx, так что команды lea bx, buffer будет достаточно только тогда, когда ES настроен; 3) А вот про кластеры я и сам бы хотел узнать. Думаю, что это минимальное число секторов, которое ось отводит под файлы и вообще при приращении файла за размер кластера она опять выделяет кластер-число секторов. Те к биосу это отношения не имеет. ? -------------------- I don't like the drugs (but the drugs like me). M.Manson. |
|||
|
||||
Melancholy |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 43 Регистрация: 1.4.2002 Репутация: нет Всего: нет |
Кластер, это 1 и более сектор. Колличество секторов рассчитывается так, что бы весь диск разбивался на эти кластеры и количество кластеров не должно превышать 65536.
Вроде бы так... PS Надеюсь, что понятно написал, хотя сам бы не понял... ![]() |
|||
|
||||
Melancholy |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 43 Регистрация: 1.4.2002 Репутация: нет Всего: нет |
И по поводу числа секторов, цилиндров и головок на дискете.
есть такая функция в биосе, но помоему она читает нулевую дорожку с флопа и от туда берет все данные... но может я и ошибся. |
|||
|
||||
Gav |
|
|||
Новичок Профиль Группа: Участник Сообщений: 1 Регистрация: 12.6.2006 Репутация: нет Всего: нет |
Помогите, пожалуйста! Зачем нужны кластеры?
|
|||
|
||||
![]() ![]() ![]() |
Правила форума "Asm: Общие вопросы" | |
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Asm: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |