Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.11.27;
Скачать: CL | DM;

Вниз

Глюк со стеком   Найти похожие ветки 

 
aimsyslv ©   (2003-11-18 18:03) [0]

Дано описание процедуры в Паскале:
procedure jhgjhjk(b:char; m:byte; var c:byte);

По логике вещей перед тем как передать управление процедуре
компилятор скидывает в стек аргументы:
b, m, указатель на с, ip
m должен занимать один байт, но вот b находится в стеке
со смещением sp+8 (Это я проверил 100%)
Почему ?


 
HolACost! ©   (2003-11-18 18:07) [1]

Дизассемблер есть:)))
посмотри что он делает там - поймёшь :)))


 
VMcL ©   (2003-11-18 18:10) [2]

>>aimsyslv © (18.11.03 18:03)

Стек в 16-битных системах всегда выравнивается по границе 2-х байт
(младший бит SP равен 0), в 32-битных - по границе 4-х байт (младшие 2 бита SP равны 0).


 
VMcL ©   (2003-11-18 18:10) [3]

Oops, sorry!

>>в 32-битных - по границе 4-х байт (младшие 2 бита ESP равны 0).


 
Skier ©   (2003-11-18 18:13) [4]


> Глюк со стеком

Никакого глюка нет. Есть пробелы в знаниях.


 
han_malign ©   (2003-11-18 18:13) [5]

> со смещением sp+8 (Это я проверил 100%)
- если такой продвинутый, мог бы и по CPU View прйтись в отладчике.
При включенной оптимизации, прааметры вообще, по идее, должны лежать в AL,AH,EDX...
Опять таки, какое соглашение о вызовах - stdcall - параметры запихиваются начиная с левого, cdecl - с правого (по моему, в лом уточнять).

З.Ы. Надесь, что операнд с - передается как 32-битный указатель, напоминать не надо?


 
Skier ©   (2003-11-18 18:16) [6]

>han_malign © (18.11.03 18:13) [5]
и stdcall и cdecl запихивают параметры в стек справа-налево.
разница лишь в том кто этот стек потом балансирует.


 
han_malign ©   (2003-11-18 18:29) [7]

> stdcall и cdecl запихивают параметры в стек справа-налево
- попутал с pascal, который, впрочем - "The pascal convention is maintained for backward compatibility."

З.Ы. Насколько я знаю, разница еще в оформлении(decoration) экспортируемых имен функций, но это уже из другой оперы.


 
aimsyslv ©   (2003-11-18 18:29) [8]

Я что-то пока вижу ответы, которые к вопросу относятся косвенно.
>>VMcL
Стек то может и выравнивается, но ведь данные, то в нем нет (относительно стека)

Да, кстати какая опция в Паскале делает так, шоб в отладчике
исходный код видно было ({$D+} не работает)


 
Skier ©   (2003-11-18 18:30) [9]


> но это уже из другой оперы.

Угу. :)


 
Skier ©   (2003-11-18 18:33) [10]


> Да, кстати какая опция в Паскале делает так, шоб в отладчике
> исходный код видно было

Правая кнопка мыши | Debug | View CPU


 
sniknik ©   (2003-11-18 18:43) [11]

Skier © (18.11.03 18:33) [10]
в Турбо паскале 7.0 этого нет.

aimsyslv © (18.11.03 18:29) [8]
просто включи в настройках
у Debugger - Integrated и Standalone
и у компилера Debug Information и Local Symbols
(все в опциях)


 
Skier ©   (2003-11-18 18:46) [12]

>sniknik © (18.11.03 18:43) [11]

> в Турбо паскале 7.0 этого нет.

Ой ! А я уже так привык что это форум по Delphi ! :)



Страницы: 1 вся ветка

Текущий архив: 2003.11.27;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.073 c
14-90132
SergP
2003-10-28 21:44
2003.11.27
Странные тормоза Винды... Как вылечить?


7-90139
Basil
2003-09-08 18:08
2003.11.27
Помогите спрятать прогу от CTRL+ALT+DEL в NT!


3-89783
Chel
2003-11-10 17:41
2003.11.27
NCOCI


14-90105
Rouse_
2003-11-04 09:48
2003.11.27
Антология Мастера Улабаются


3-89695
Михаил
2003-11-06 10:06
2003.11.27
поле NUMERIC(15, 5) не работатет с 5-ым знаком после запятой