Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > 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

гг, подробней в Гугле. 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)