Главная страница
    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.008 c
1-89978
madm
2003-11-13 18:08
2003.11.27
RichEdit->FindText() Проблемы


1-89932
Nucl
2003-11-17 18:02
2003.11.27
Картинки из TImageList


1-89878
Dmitriy M. Volkov
2003-11-14 10:44
2003.11.27
Диалог открытия папки


14-90070
aVast
2003-11-05 14:32
2003.11.27
а знаете ли вы что такое DELPHI?


14-90127
zerro_nuz
2003-11-03 17:52
2003.11.27
Помогите пожалуйста !!!





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский