Я был в плену двух заблуждений:
1) Стек растет вверх.
На самом деле он растет вниз в сторону уменьшения адресов. Кстати вот тут можно почитать немного http://avtehnika.ru/content/view/477/33/
2) Стек можно размещать только в конце программы.
П.2 логически проистекал из п.1
На самом деле стек можно размещать где угодно в программах Колибри.
Мои заблуждения проистекали из нередких заголовков в программах для Menuet, например:
Spoiler:
Code: Select all
use32
org 0x0
db 'MENUET01' ; 8 byte id
dd 0x01 ; header version
dd START ; start of code
dd I_END ; size of image
dd 0x1000000 ; memory for app
dd 0x7FFFFFF ; esp
dd 0x0,0x0 ; I_Param , I_Icon
Сейчас же меня интересует другой вопрос:
Много раз встречаю, что указатель стека устанавливается не на ровную границу, а на границу и -1 байт. Казалось бы область для стека выровнена на границу 4 байта и это идеально, но почему же люди сдвигают на 1 байт назад? Может есть какая-то особая уличная магия и я ее не знаю? Или есть в тонкостях документации что-либо по этому поводу. Я прошу тех кто в курсе прояснить ситуацию.
Я не наблюдаю никакой падучести программы при например такой установке:
Spoiler:
Code: Select all
use32
org 0x0
db 'MENUET01' ; 8 byte id
dd 0x01 ; header version
dd START ; start of code
dd I_END ; size of image
dd 0x20000 ; memory for app
dd 0x20000 ; esp
dd 0x0,0x0 ; I_Param , I_Icon
Spoiler:
Code: Select all
use32
org 0x0
db 'MENUET01' ; 8 byte id
dd 0x01 ; header version
dd START ; start of code
dd IM_END ; size of image
dd I_END ; memory for app
dd stacktop ; esp
dd temp_area ; I_Param
dd path ; APPLICATION PACH