Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Выделение памьяти 
:(
    Опции темы
joker332
Дата 20.12.2007, 22:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 90
Регистрация: 26.10.2007

Репутация: нет
Всего: нет



Приведите код выделения сегмента оперативной памьяти.Этот код не работает.Всегда возвращает С=1.Плиз Помогите
Код

.model small
.stack 100h
.data

msg_s db 'Enter any symbol  $'
msg_r db 'Error  $'

.code
    mov ax, @data
    mov ds, ax


    mov ah, 0
    mov al, 3
    int 10h
    

;memory
mov ah, 48h
mov bx, 40
int 21h
jc error



jmp rt
error:
    mov ah, 09h
    lea dx, msg_r
    int 21h
rt:
mov ah, 1
int 21h
mov ah, 4ch
int 21h
end

PM MAIL   Вверх
dumb
Дата 20.12.2007, 23:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


sceloglauxalbifacies
****


Профиль
Группа: Экс. модератор
Сообщений: 2929
Регистрация: 16.6.2006

Репутация: 7
Всего: 158



DOS пытается выделить программе памяти столько, сколько указано в заголовке .exe по смещению 0Ch(в параграфах) - называется поле 'Maximum memory'(в интерпретации программы hiew). по умолчанию там стоит FFFFh параграфов(1 параграф = 10h(16)байт). т.е. FFFFh*10h = FFFF0h = 1048560. максимум. дос выделяет самый большой непрерывный блок. в случае .com-файлов никакого заголовка нет, соответственно .com-программе сразу выделяется максимальный блок.

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

есть два пути:
1. меняем поле в .exe-заголовке на значение, которое стоит в предыдущем поле(Minimum memory). у тебя там должно быть 11h.
2. меняем размер выделенного блока "руками":
Код

...
.code
    mov bx, lastseg ; получаем адрес(сегментную часть) последнего сегмента в программе
    mov ax, es ; берем адрес начала выделенного для программы блока 
;(в начале исполнения этот адрес лежит в ds и es)
    sub bx, ax ; вычитаем из конца начало, чтоб получить размер в параграфах
    mov ah, 4ah ; функция изменения размера выделенного блока (reallocate)
    int 21h

    mov ax, @data
...
mov ah, 4ch
int 21h

lastseg segment ; "псевдо"-сегмент для получения адреса "конца программы".
lastseg ends
end

PM MAIL   Вверх
joker332
Дата 21.12.2007, 00:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 90
Регистрация: 26.10.2007

Репутация: нет
Всего: нет



А как выделить в com файле??Можно пожалусста код.ПЛИЗ
PM MAIL   Вверх
dumb
Дата 21.12.2007, 05:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


sceloglauxalbifacies
****


Профиль
Группа: Экс. модератор
Сообщений: 2929
Регистрация: 16.6.2006

Репутация: 7
Всего: 158



Код

.model tiny
.data
msg_s db 'Enter any symbol  $'
msg_r db 'Error  $'
.code
org 100h
start:
    mov bx, sp
    shr bx, 4
    inc bx
    mov ah, 4ah
    int 21h

    mov ah, 0
    mov al, 3
    int 10h
    
;memory
mov ah, 48h
mov bx, 40
int 21h
jc error
jmp rt
error:
    mov ah, 09h
    lea dx, msg_r
    int 21h
rt:
mov ah, 1
int 21h
mov ah, 4ch
int 21h

end start

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Asm для начинающих"
MAKCim
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой КОД.
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim.

 
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Asm для начинающих | Следующая тема »


 




[ Время генерации скрипта: 0.1385 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.