Board.KolibriOS.org
http://board.kolibrios.org/

Какое наибольшее количество памяти можно выделить программе?
http://board.kolibrios.org/viewtopic.php?f=32&t=1157
Page 1 of 1

Author:  exst [ Fri Oct 24, 2008 6:53 am ]
Post subject:  Какое наибольшее количество памяти можно выделить программе?

Всем доброго утра! пробовал выделить 3МБ - не получается (((.
Планировал переписать программку, моделирующую электростатическое поле под Колибри.

Author:  <Lrz> [ Fri Oct 24, 2008 7:01 am ]
Post subject:  Re: Какое наибольшее количество памяти можно выделить программе?

Код в студию ) После этого можно будет что-либо говорить

Author:  exst [ Fri Oct 24, 2008 7:13 am ]
Post subject:  Re: Какое наибольшее количество памяти можно выделить программе?

Да кода пока еще нету. Как описано в документации создаю окно:

Code:
db 'MENUET01'  ; 1. идентификатор исполняемого файла (8 байт)
dd 0x01        ; 2. версия формата заголовка исполняемого файла
dd START       ; 3. адрес, на который система передаёт управление
dd I_END       ; 4. размер приложения
dd 0x3000000   ; 5. объём необходимой приложению памяти
dd 0x3000000   ; 6. вершина стека в диапазоне памяти, указанном выше
dd 0x0          ; 7. указатель на строку с параметрами.
dd 0x0          ; 8. указатель на строку, в которую записан путь,

START:
   call draw_window

event_wait:
   mov eax, 10
   int 0x40
   cmp eax, 1
   je  redraw
   cmp eax, 2
   je   key
   cmp eax, 3
   je   button
   
   jmp event_wait

redraw:
   call draw_window
   jmp event_wait
   
key:
   mov eax, 2
   int 0x40
   jmp event_wait

button:
   mov eax, 17
   int 0x40
   cmp ah , 1
   jne noclose
   mov eax, -1
   int 0x40

noclose:
   jmp event_wait
   
draw_window:   
mov   eax,12            ; функция 12: сообщить системе о
                  ; состоянии перерисовки окна
mov   ebx,1            ; подфункция 1, начало перерисовки
int   0x40
mov   eax,0            ; функция 0: определите и выведите окно
mov   ebx,10*65536+640     ; [x начальный] *65536 + [x размер]
mov   ecx,10*65536+480     ; [y начальный] *65536 + [y размер]
mov   edx,0x02ffffff         ; цвет рабочей области RRGGBB
                  ; 0x02000000 = тип окна 2 (что это
                  ; значит, я объясню в следующий раз)
mov   esi,0x808899ff         ; цвет области заголовка RRGGBB
                  ; 0x80000000 = цвет перетекает
mov   edi,0x008899ff         ; цвет рамки RRGGBB
int   0x40
                  ; НАДПИСЬ в заголовке
mov   eax,4            ; функция 4: написать текст в окне
mov   ebx,8*65536+8         ; [x начальный] *65536 + [y начальный]
mov   ecx,0x00ddeeff         ; цвет текста RRGGBB
                  ; старший байт (0x00) - размер шрифта
                  ; (маленький)
mov   edx,text         ; указатель на начало текста
mov   esi,text_end-text      ; длина текста в байтах
int   0x40
                  ; КНОПКА
mov   eax,8            ; функция 8: определить и вывести кнопку
mov   ebx,(640-19)*65536+12 ; [x начальный] *65536 + [x размер]
mov   ecx,5*65536+12         ; [y начальный] *65536 + [y размер]
mov   edx,1            ; идентификатор кнопки
mov   esi,0x6677cc         ; цвет кнопки RRGGBB
int   0x40

mov   eax,12            ; функция 12: сообщить системе о
                  ; состоянии перерисовки окна
mov   ebx,2            ; подфункция 2, перерисовка окончена
int   0x40
 
ret
   
text db 'Модель электростатического поля'
text_end:
I_END:


Память понадобится под хранение (640x480x8 = 2457600 Б) массива дробных чисел.
смыщает то, что код уже на данном этапе не запускается. Пожет я загнул с 3000000 в заголовке?

Author:  <Lrz> [ Fri Oct 24, 2008 7:37 am ]
Post subject:  Re: Какое наибольшее количество памяти можно выделить программе?

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

Функция 64 - перераспределить память приложения.
Параметры:
eax = 64 - номер функции
ebx = 1 - единственная подфункция
ecx = новый размер памяти
Возвращаемое значение:
eax = 0 - успешно
eax = 1 - недостаточно памяти

Author:  exst [ Fri Oct 24, 2008 7:47 am ]
Post subject:  Re: Какое наибольшее количество памяти можно выделить программе?

Спасибо. Буду пробовать.

Author:  exst [ Fri Oct 24, 2008 9:03 am ]
Post subject:  Re: Какое наибольшее количество памяти можно выделить программе?

Получилось! )

Author:  mike.dld [ Fri Oct 24, 2008 10:09 am ]
Post subject:  Re: Какое наибольшее количество памяти можно выделить программе?

Для сведения, могло бы получиться и без 64-й функции. Проблема в том, вероятно, что 0x3000000 != 3МБ, 0x3000000 == 48МБ. Не нужно путать 16 и 10 СС.

Author:  exst [ Fri Oct 24, 2008 2:24 pm ]
Post subject:  Re: Какое наибольшее количество памяти можно выделить программе?

Да-да... Я заметил... )

Author:  exst [ Fri Oct 24, 2008 7:29 pm ]
Post subject:  Re: Какое наибольшее количество памяти можно выделить программе?

Нарисовался ещё вопрос: в какой области теперь находится стёк?

Author:  <Lrz> [ Mon Oct 27, 2008 7:43 am ]
Post subject:  Re: Какое наибольшее количество памяти можно выделить программе?

В программах используется плоская модель памяти, а это означает, что стек, данные, код находятся в одном адресном пространстве.
Т.е. cs=ds=ss сегмент кода, данных, стека равны.
Стек находиться в области, где ты его установишь т.е. по какому смещению

Page 1 of 1 All times are UTC+03:00
Powered by phpBB® Forum Software © phpBB Limited
https://www.phpbb.com/