· Начало · Отвђтить · Статистика · Поиск · FAQ · Правила · Установки · Язык · Выход · WASM.RU · Noir.Ru ·

 WASM Phorum —› WASM.VIROLOGY —› Вопросик.

. 1 . 2 . >>

Посл.отвђт Сообщенiе


Дата: Янв 10, 2004 14:56:07

Господа!!!

Есть код:
mov ax,0f0000h
mom bx,1997
int 2fh

Не понимаю, что должно произойти при таком раскладе?
В проге где этот отрывок используется в al воовращает-
ся нули.
Что означает f0.
На всякий случай посылаю исходник где этот кусок встречается в
cтроке 63.

Ну, а кто желает может пару слов сказать про строки 90-94.
А то чо то невъеду.
Ну и само собой спасибо за внимание.


_335122165__REZIDENT.LST


Дата: Янв 10, 2004 14:57:15

Черт, вместо mom надеюсь догадались mov
cорри за невнимательность


Дата: Янв 10, 2004 15:26:59

EvilsInterrupt
должно произойти при таком раскладе? …встречается в строке 63
При каком раскладе? Ты неправильно переписал. Надо mov ax,0f000h.

В проге где этот отрывок используется в al воовращается нули.
Это значит, что еще не установлен обработчик int2Fh

про строки 90-94
Это обычный (для DOS) способ получить (в BX) размер (в параграфах) наибольшего свободного участка памяти.


Дата: Янв 10, 2004 15:31:09

Int 21H
Function 4AH (74) - Resize memory block
Call with:
AH = 4AH
BX = desired new block size in paragraphs
ES = segment of block to be modified
Returns:
If function successful

Carry flag = clear

If function unsuccessful

Carry flag = set
AX = error code
BX = maximum block size available(paragraphs)


Дата: Янв 10, 2004 18:00:30

q_q
Cорри за дурость.
В моем талмуде прерываний сказано что в ah с 80-0ffh(доступно для других процессов) и на этом все! Там еще сказано что помимо al,ah прочие но подробней нет.

Уважаемый гоблин!
Спасибо буду переводить.
Было бы круто ежели языке росов выразился.
НО тем не менее офигительное спасибо.


Дата: Янв 10, 2004 19:20:56

Добавлю:
q_q
В Брауне:
INT 2F U - 4MAP - INSTALLATION CHECK
AX = F000h
Return: AX = 00FFh
Program: 4MAP is a keybinding program for 4DOS
(see AX=D44Dh) by Ho-Ping Tseng Note: returns
AX=00FFh for any value of AL not listed here
SeeAlso: AX=D44Dh,AX=F001h,AX=F002h

Но при чем здесь: mov bx,1997?

Чего точнее делает:
mov ax,0f000h
mov bx,1997
int 2fh

К hGoblin:
Resize memory block - сжать или расширить?
BX = desired new block size in paragraphs

Что мы хотим: желаемый размер блока в 16-бай-
товых параграфах?

ES = segment of block to be modified
Куда поместится сегмент распределенного блока
памяти?

Все ли я правильно понял?
Ну, проблемы у меня с инглишом! Фак его!


Дата: Янв 10, 2004 20:20:58 · Поправил: Sickle

старый прием проверки на резидентность - вызываем int 2fh с параметрами ax=0f000h, bx=1997. если виря в памяти нет - вернется черт знает что, а если он в памяти, то int 2fh им перехвачен и при вызове этого прерывания, он проверяет - если ax равен 0f000h, а bx=1997 то он соображает: ага, запущена ишшо одна моя копия и грит ей - 0ffh (стр. 467)- в смысле, отвали, я уже в памяти... вторая копия это дело хавает (стр. 68) и выгружается... ооот...


Дата: Янв 10, 2004 23:09:56

Resize memory block - сжать или расширить?
Re-size значит пере-размерить. Сжать или расширить это уж как Бог на душу положит.
Что мы хотим: желаемый размер блока в 16-бай-
товых параграфах?

Ага.
Куда поместится сегмент распределенного блока
памяти?

Дык, там же и останется :)


Дата: Янв 10, 2004 23:14:10

hGoblin
А если воспользоваться 48h?
Sickle
Cпасибо.


Дата: Янв 10, 2004 23:47:05

А если воспользоваться 48h?
48h резервирует новый блок памяти где хочет, а нам нужно в определенном сегменте.


Дата: Янв 11, 2004 00:32:35

Первое: 2fh в запускающем файле ни ax,
ни bx не меняет, какого фига?

Второе:
segment of block to be modified
дословно:
сегмент блок видоизмененный
И шо енто значит?
В es кидается сегмент в нашем случае prg
и он же после демона и остается. Токо ax
меняется на 0008 да cf=1, bx=7b7d. То что
аель ето ошибка ето я знаю, но вота про
Е ЭС ну, ни как чо то не пойму?
И в каких случаях происходит сжатие памяти?

Третье опосля 107 строки нам в ax=cs=es=ds,
почему? Не понимаю что закидывается в ax в
случае удачного выполнения прерывания. Я ви-
жу что туда кидают prg. Но какого фига?


Дата: Янв 11, 2004 00:47:35 · Поправил: Sickle

первое- а оно и не должно меняться, т.к. пока виря в памяти нет, обработчик 2fh состоит из одной команды - iret.
второе- сегмент видоизменяемого блока. в es должен находиться адрес сегмента (я правильно выразился?), в котором находится блок, тобою изменяемый. если ты про стр. 90 - то там хапается заведомо невгребенный блок, шо вызывает ошибку, ну а в в bx вертается размер реально доступного блока...
третье- в ax, вероятно, кидается адрес сегмента... хотя документация по этому поводу молчит.


Дата: Янв 11, 2004 00:53:51

segment of block to be modified
дословно: сегмент блок видоизмененный

Дословно - сегмент блока быть измененным
Если по-русски - сегмент блока, который надо изменить (ресайзнуть).

В es кидается сегмент в нашем случае prg и он же после демона и остается. Токо ax меняется на 0008 да cf=1, x=7b7d. То что аель ето ошибка ето я знаю, но вота про
Е ЭС ну, ни как чо то не пойму?

Грхм. Ну ясно же написано - cf=1, значит failed. И правильно, ведь bx=ffff, а 65535 параграфов в сегменте просто нет! ax в этом случае error code.
Смотрим в RBIL
08h (8) insufficient memory, "Недостаточно памяти", что и требовалось доказать.

И в каких случаях происходит сжатие памяти?
Чего?


Дата: Янв 11, 2004 12:33:03

hGoblin

Вот допустим еся память на рисунке крас-
ная занята, зеленная свободная. Вызывая
mov ah,4ah
mov bx,0ffffh
система как я понял расматривает бло-
ки 1,2,3 и видит что в параграфах блок 1
больше остальных и говорит нам, что ты чу-
вак охренел таку емкость просить и есть
блок 1 с (b-a) параграфами, куда может по-
меститься сегмент es.
Прав ли я, если нет, то в чем. И как на са-
мом деле ведет себя dos?

1325416437__4ah.JPG


Дата: Янв 12, 2004 02:08:06

...куда может поместиться сегмент es...
сегмент es никуда не может поместиться. это сегмент и все тут. а функция вернет тебе размер максимально возможного блока по адресу es:0000.

. 1 . 2 . >>


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.063