Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.01 c
6-90026
Tol-123
2003-10-01 14:07
2003.11.27
Широковещательный TCP пакет


11-89797
Bartov
2003-02-25 01:26
2003.11.27
Кому нужен KOL-Help


14-90088
ИМХО
2003-11-04 00:57
2003.11.27
gsdll32.dll


14-90066
ZeroDivide
2003-11-05 16:54
2003.11.27
Ладно, пусть будет с обоснованиеми и без инвенктивной лексики


8-90007
pasha676
2003-07-30 14:32
2003.11.27
WDM капчур. Свойства фильтров





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский