|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
11.06.2010, 11:36 | #1 |
Участник клуба Подтвердите свой е-майл
Регистрация: 19.11.2007
Сообщений: 1,022
|
Процедуры.
Не давно занялся assembler. Дошел по книге до процедур, вот пример из книги:
Код:
|
11.06.2010, 12:27 | #2 |
Участник клуба
Регистрация: 11.01.2010
Сообщений: 1,139
|
profi
В начале процедуры стоит sub esp,8 это автор отвел восемь байт под две локальные переменные, каждая по 4 байта [ebp-4] и [ebp-8]; ассемблер автоматически сгенерировал пролог push ebp / mov ebp,esp а вместо ret 8 был сгенерирован эпилог pop ebp / retn 8; ret 8 стоит чтобы очистить стек от переданных процедуре StrDisp переменных StrAddr и StrSz Последний раз редактировалось Mikl___; 11.06.2010 в 12:30. |
11.06.2010, 12:33 | #3 |
Участник клуба Подтвердите свой е-майл
Регистрация: 19.11.2007
Сообщений: 1,022
|
Все понял, спс.
Последний раз редактировалось profi; 11.06.2010 в 12:44. |
11.06.2010, 12:47 | #4 |
Участник клуба
Регистрация: 11.01.2010
Сообщений: 1,139
|
profi
В ассемблере существует правило "нагадил, подотри за собой" то что простительно при программировании на Delphi, C, Basik'e в ассемблере может и не проканать. Поставь вместо ret (это не команда, а макрос) команду retn и ассемблер от переданных процедуре параметров ничего очищать не будет, для короткой программы может быть ошибки и не увидишь а в длинных программах ошибки накапливаются и программа начинает себя вести неодекватно, вплоть до синего экрана смерти (BSOD) |
11.06.2010, 15:05 | #5 |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
а почему BSOD то в прикладной программе?
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
11.06.2010, 17:31 | #6 |
Старожил
Регистрация: 15.02.2010
Сообщений: 15,772
|
Потому что мелкомягкие стали "ужесточать ошибки". Например, в одной из версий ядра (ВИн ХП) был БСОД при попытке вторичного очищения памяти...
|
21.06.2010, 17:27 | #7 |
Форумчанин
Регистрация: 23.04.2009
Сообщений: 346
|
чего?! ужесточать ошибки?! при вторичном обращении к памяти бсод это ужесточать ошибки?! принесите и мне то чего вы курите!
Нет, ну правда..
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Управляющие структуры, процедуры Function и процедуры Sub | Natalo4ka | Помощь студентам | 0 | 17.05.2010 22:00 |
Процедуры | Hilda | Помощь студентам | 9 | 23.12.2009 11:22 |
процедуры | shelest | Помощь студентам | 1 | 19.12.2009 20:12 |
процедуры | Maxxx 83 | Помощь студентам | 3 | 02.10.2009 19:16 |
Запуск процедуры из процедуры с дополнением | 1sal1 | Общие вопросы Delphi | 3 | 06.10.2008 21:54 |