Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Asm: Общие вопросы > ESP, EBP, EIP, ESI


Автор: XSInet 11.1.2006, 16:18
Пожалуйста разъясните поподробнее об этих регистрах. Их функции, работа с ними. Привидите пару примеров пожалуйста. Только поподробнее ! smile smile

Автор: XSInet 12.1.2006, 11:53
Разве никто не знает ? rsm ответь пожалуйста ! Ты мне уже три раза помог, за что я тебе очень благодарен !

Автор: rsm 12.1.2006, 19:11
Цитата(XSInet @ 12.1.2006, 13:53 Найти цитируемый пост)
rsm ответь пожалуйста !

Да тута я, здеся.

ESP - расширенный регистр указателя стека. С помощью этого регистра происходит обращение к данным, хранящимся в стеке. Пример использования:
Код

      mov eax,[esp+0C]


EBP - расширенный регистр указателя стекового фрейма. Обычно используется при вызове функций для указания на аргументы функции и для ссылок на локальные переменные. Пример использования:
Код

proc DialogProc ; HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam
      mov eax,[ebp+08] ; mov eax,hDlg
      mov eax,[ebp+0C] ; mov eax,uMsg
      mov eax,[ebp+10] ; mov eax,wParam
      mov eax,[ebp+14] ; mov eax,lParam
;...
endp


EIP - регистр указателя команд. Содержит адрес команды, которая будет выполнена следом за текущей. Напрямую используется довольно редко. Один из вариантов использования - при работе с функцими DebugApi для управления отлаживаемой программой. Или вот еще пример самой маленькой программы (2 байта), намертво вешающей Win9х:
Код

      jmp eip ; бесконечный цикл


ESI - расширенный индексный регистр источника. Используется для быстрой пересылки данных из одной области памяти в другую. Пример использования:
Код

      array rb 4
      ; ...
      mov esi,array
      mov al,byte [esi]
      mov ax,word [esi]
      mov [esi],eax

Автор: XSInet 13.1.2006, 16:05
Чё та плохо понял. Объсни пожалуйста "на пальцах".
Например:
Код

array1  db  7
array2  db  6

push array1
push array2


как можно поместить в EAX и EBX из стека array1 и array2, кроме pop eax, pop ebx ???
Так же что делает команда mov ESI, 10 ? Плохо прям понял как то.

Автор: rsm 14.1.2006, 00:48
Цитата(XSInet @ 13.1.2006, 18:05 Найти цитируемый пост)
как можно поместить в EAX и EBX из стека array1 и array2

Не понял вопроса - у тебя array1 & 2 это переменные размером 1 байт. Причем тут стек?

Автор: XSInet 14.1.2006, 11:23
Просто хочу на конкретных примерах разобраться. Просто чтоб мне по понятнее было

Автор: rsm 14.1.2006, 13:57
ОК, вот три программы-примера.
Код

        ; определение длины строки

         string db 'Some string...',0
         ; ...         
         
         mov esi,string
         xor ecx,ecx
_next:
         lodsb
         inc ecx
         or al,al
         jnz _next
         dec ecx
         xchg eax,ecx
         ; в eax - длина строки

Код

        ; то же, как это делает виндовая функция lstrlenA

         string db 'Some string...',0
         ; ...         
         
         mov edi,string
         or ecx,-1
         xor al,al
         repne scasb
         not ecx
         dec ecx
         xchg eax,ecx
         ; в eax - длина строки

Код

         ; простейшее шифрование строки

         string db 'Some string...',0
         enc_str rb 10h
         ; ...         
         
         mov esi,string
         mov edi,enc_str
_next:
         lodsb
         or al,al
         jz _exit
         xor al,78h
         stosb
         jmp _next
_exit:
         stosb

Автор: XSInet 14.1.2006, 15:31
Спасибо, теперь буду разбираться

Автор: Tyler Durden 31.1.2006, 01:39
Цитата
jmp eip

OMFG ? smile Как это ты eip так лихо прописал ? smile Так не бывает к счастью/сожелению smile

Автор: rsm 31.1.2006, 06:47
Цитата(Tyler Durden @ 31.1.2006, 03:39 Найти цитируемый пост)
Как это ты eip так лихо прописал ?

А что не нравится?

Автор: Tyler Durden 31.1.2006, 10:13
Такого регистра не существует, во всяком случае в опкодах ia32

Автор: Romikgy 31.1.2006, 10:33
Цитата(Tyler Durden @ 31.1.2006, 09:13 Найти цитируемый пост)

Такого регистра не существует

Есть, есть... smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)