Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Asm: Общие вопросы > Передача управления другой проге |
Автор: PoluBOG1 24.4.2002, 14:47 |
Передача управления другой проге , как ето реализовать![]() |
Автор: Melancholy 24.4.2002, 14:56 |
грузишь код в память по адресу seg:100h потом делаешь call far seg:100h это будет работать правильно, ести код расчитан на приращение 100h (COM файл), с EXE'шничком прийдется помудохаться... если это будет выполнятся с боот сектора, то учти, что пользоваться тебе прийдется только биосовскими интераптами. ЗЫ че изобретаем то? |
Автор: PoluBOG1 24.4.2002, 18:07 |
А как загрузить код по адресу (как енто реализовать)? Я просто делаю я пародию на ось :-) |
Автор: PoluBOG1 24.4.2002, 21:08 |
Может кто поможет!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! |
Автор: Chingachguk 25.4.2002, 03:11 |
Ну так если твой код, как выше сказали, лежит в com-файле, то его можно разместить в памяти и передать ему управление. Как это сделать ? Допустим, ты предполагаешь разместить этот com в нескольких секторах дискеты. Например, в Цилиндр=1, Голова=0, сектора с 1 по ... ну сколько у тебя там их ... Разместил. После того, как твой бут получил управление, читай эти сектора(можно по 1-му, можно сразу все) в выбранную тобой память, например - seg:=8000h, ofs:=0. После чтения передавай управление смело на seg:100h - или на seg:0h, если твой ком сгенерен с директивой org 0... |
Автор: Melancholy 25.4.2002, 10:38 |
Да и еще: 1. с EXE'шником запаришся! 2. Не юзай досовские инты - их тем нет вообще. 3. Для выхода из подпрограммы пиши (в коде) retf ну вроде главное написал... может че и забыл. |
Автор: PoluBOG1 25.4.2002, 20:40 |
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 25.4.2002, 22:39 |
Байт в секторе - 512 Значения цилиндра - 0..79 Значения секторов - 1..18 Значения головки - 0..1 типа получается, что секторов на диске 80*18*2 = 2880 а размер 2880*512 = 1474560 |
Автор: Melancholy 25.4.2002, 22:43 |
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 25.4.2002, 23:29 |
А как узнать где в памяти етот insert находится будет |
Автор: ? 25.4.2002, 23:33 |
И ещё : Чем кластер от сектора отличается? |
Автор: Chingachguk 26.4.2002, 01:56 |
А я что хочу сказать по этому поводу ? ![]() А вот чего: 1) Число секторов, цилиндров и головок на дискете можно узнать ДИНАМИЧЕСКИ - те от БИОСА, например, так, как делет вирус(выше) - тоже через вызов Int 13h или параметры дискеты валяются в памяти, адрес этой памяти в каком-то векторе, не помню, каком, но для винта он в int 41h; Это отвяжет тебя от необходимости жестко задавать координты секторов. 2) При чтениии/записи сектора адрес буфера должен быть в ES:bx, так что команды lea bx, buffer будет достаточно только тогда, когда ES настроен; 3) А вот про кластеры я и сам бы хотел узнать. Думаю, что это минимальное число секторов, которое ось отводит под файлы и вообще при приращении файла за размер кластера она опять выделяет кластер-число секторов. Те к биосу это отношения не имеет. ? |
Автор: Melancholy 26.4.2002, 09:40 |
Кластер, это 1 и более сектор. Колличество секторов рассчитывается так, что бы весь диск разбивался на эти кластеры и количество кластеров не должно превышать 65536. Вроде бы так... PS Надеюсь, что понятно написал, хотя сам бы не понял... ![]() |
Автор: Melancholy 26.4.2002, 09:43 |
И по поводу числа секторов, цилиндров и головок на дискете. есть такая функция в биосе, но помоему она читает нулевую дорожку с флопа и от туда берет все данные... но может я и ошибся. |
Автор: Gav 12.6.2006, 13:58 |
Помогите, пожалуйста! Зачем нужны кластеры? |
Автор: ds29 12.6.2006, 15:45 |
Gav, http://forum.vingrad.ru/index.php?showtopic=637&view=findpost&p=3502 гг, подробней в Гугле. |