Здравствуйте! у меня такая проблема: необходимо выделить кусок памяти под массив m*n (m и n задаются) порядка 100 кб, м.б. больше. прерывание 48h int 21h такого количества памяти не даёт. Используется .model small. Подскажите, как можно таки выделить этот кусок средствами операционной системы.... Заранее спасибо =)
marara прерывание 48h int 21h такого количества памяти не даёт Была ли перед ее использованием освобождена неиспользуемая память (при помощи int21 fn=4Ah)?
ага... значит, сначала я освобождаю необходимый размер памяти ф-ией 4ah и затем использую 48h? спасибо =)
Размер адресуемого сегмента в ДОС-режиме 64 Кбайта. Потребуется манипуляция сегментыми регистрами для нормальной работы. На фига вообще ДОС-режим при таких объемах?
не знаю)))))) по заданию - выделить память под массив blc 100 кБ ))) я вот наваял что-то blc dw ? .................. push ax push bx mov ah, 4ah; узнаем сколько параграфов занимает прога mov bx, 0ffffh int 21h ; их число теперь в bx mov ah, 4ah mov bx, 1900h ; 6400 параграфов 100 кБ int 21h mov ah,48h mov bx, 1900h int 21h mov blc, ax pop bx pop ax смотрю в отладчике - просле прерывания 21h устанавливает cf в 1, но почему-то в bx не заносит макс доступное кол-во параграфов, убей не пойму почему =( и что за манипуляция с сегментными регистрами?
адресовать одним регистром сегментным можно только 64кб в реальном режиме, уже сказали. поэтому сегментные регистры придется время от времени перезагружать чтобы адресовать всю твою память, если тебе ее в конце концов все-таки дадут =)
ну ладно 100кБ, но даже если пишу mov ah, 4ah mov bx, 0010h int 21h всё равно получается ошибка и память не выделяется.....
marara Функция 4Ah предназначена для изменения размера ранее выделенного блока памяти, а не для определения "сколько параграфов занимает прога #5" и не для выделения нового блока памяти #7.
marara Пример освобождения неиспользуемой памяти Код (Text): ;; ;; foo.asm ;; ;; ml.exe /nologo /Cp /W3 /WX foo.asm ;; .model small .stack .code .startup ;; если удалить комментарии, то в BX можно будет увидеть, ;; размер максимального свободного блока в параграфах ;; я смотрел под cmd + debug, получилось 0007h, т.е. 112 байт ; mov ah,48h ; mov bx,-1 ; int 21h mov ax,es mov bx,ss sub bx,ax mov cl,4 shl bx,cl add bx,sp jc error add bx,0Fh jc error shr bx,cl mov ah,4Ah int 21h jc error ;; если удалить комментарии, то в BX можно будет увидеть, ;; размер максимального свободного блока в параграфах ;; я смотрел под cmd + debug, получилось 89CAh, т.е. 564'384 байта ; mov ah,48h ; mov bx,-1 ; int 21h error: .exit 0 end