|
|
| Посл.отвђт | Сообщен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. |
|
Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.063 |