|
|
| Посл.отвђт | Сообщенiе |
|
|
Дата: Июн 18, 2004 00:06:32 Какие регистры могут изменяться при winapi процедурах. например в eax может момещаться возвращаемое значение а какие еще регистры могут быть изменены winapi функциями? а то не все же регистры перед ними в стек загонять |
|
|
Дата: Июн 18, 2004 00:16:55 если в поиске набрать "eax ebx ecx edx" то можно набрести вот на это :) http://wasm.ru/forum/index.php?action=vthread&forum=4&topic=5215 почитай |
|
|
Дата: Июн 18, 2004 07:38:21 Все функции Win32 API сохраняют EBX,ESI,EDI. Все CALLBACK функции которые ты пишешь сам - должны сохранять тот же набор регистров: EBX,ESI,EDI. Твои собственные функции (не являющиеся CALLBACK-ами) могут ничего не сохранять. Кстати, вопрос сохранения регистров процедурами: а надо ли? Компилятор "С", например ничем таким не занимается, если не указать *. Пример кода: f1 proc push dx ; ... use DX in some way pop dx ret f1 endp f2 proc ; ... use DX in some way ret f2 endp ; Using f1 mov dx, var1 call f1 ; DX is restored as 'var1' again call f1 ; Using f2 mov dx, var1 call f2 mov dx, var1 call f2 Функция f1 сохраняет и восстанавливает DX. Функция f2 этого не делает. При использовании обеих функций видно, что за исчезновение четырёх операций со стеком (два PUSH и два POP) мы платим одной перезагрузкой регистра DX. |
|
|
Дата: Июн 18, 2004 07:44:03 · Поправил: q_q AsmGuru62 Все функции Win32 API сохраняют EBX,ESI,EDI. A ebp? |
|
|
Дата: Июн 18, 2004 08:09:04 Ну, EBP обычно не используется, как регистр, в котором можно что-то держать постоянно. Конечно, он тоже сохраняется. |
|
|
Дата: Июн 18, 2004 13:23:17 Также неплохо защищает от непредвиденных глюков восстановление (если меняется) DF в своих процедурах. |
|
Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.072 |