· Начало · Отвђтить · Статистика · Поиск · FAQ · Правила · Установки · Язык · Выход · WASM.RU · Noir.Ru ·

 WASM Phorum —› WASM.WIN32 —› Какие регистры могут изменяться при winapi процедурах.

Посл.отвђт Сообщен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