Форум: "Основная";
Текущий архив: 2003.11.27;
Скачать: [xml.tar.bz2];
ВнизГлюк со стеком Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.008 c