СообЧа > База Знаний > Программирование > Assembler

Вопрос

В бэйсике есть такая вещь: динамические массивы, а как тоже самое реализовать на ассемблере?

Ответ

Есть такое хорошее прерывание — int 21h называется. А у этого прерывания есть такие хорошие функции:

(номер функци заносится в ah)
(параграф = 16 байт)
48h — выделение блока памяти:
bx — число выделяемых параграфов;

На выходе получаем: сf=1 — ошибка (код в ax)

cf=0 — нет ошибки. В ax — сегментный адрес памяти, bx — размер наибольшего свободного участка (в параграфах);
49h — освобождение блока памяти:
es — сегментный адрес освобождаемого блока;
на выходе cf=1 — ошибка (код в ax)

4ah — изменение длинны выделенного участка памяти:
es — сегментный адрес блока памяти; bx — нужное число параграфов на выходе: cf=1 — ошибка (код в ax)

Саму память ты можешь интерпретировать как душе пожелается — хоть массив байт, хоть массив слов и т.д.

Из конференции Expert_FAQ

Или если про мастдай то юзай HeapCreate, HeapAlloc, HeapReAlloc, HeapFree, HeapDestroy



Copyright © 2000-2004 Сообщество Чайников
Контактная информация