![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#21 |
Пользователь
Регистрация: 11.02.2012
Сообщений: 10
|
![]()
BP привязан к сегменту стека? Т.е. mov eax, [BP] получится как mov eax, [SS:BP]?
|
![]() |
![]() |
![]() |
#22 |
Старожил
Регистрация: 08.02.2012
Сообщений: 2,173
|
![]()
компилятор сделает именно так, если явно не указать другой сегмент.
Правильно поставленная задача - три четверти решения.
|
![]() |
![]() |
![]() |
#23 | ||
Участник клуба
Регистрация: 11.01.2010
Сообщений: 1,139
|
![]() Цитата:
mov ax,[BP+disp]==mov ax,ss:[BP+disp] mov ax,[BP+DI]==mov ax,ss:[BP+DI] mov ax,[BP+SI]==mov ax,ss:[BP+SI] mov ax,[BP+DI+disp]==mov ax,ss:[BP+DI+disp] mov ax,[BP+SI+disp]==mov ax,ss:[BP+SI+disp] как написано здесь раздел 4.6.2.4 Based Indexed Addressing Modes Цитата:
|
||
![]() |
![]() |
![]() |
#24 |
not
Участник клуба
Регистрация: 27.06.2009
Сообщений: 1,399
|
![]()
А какая разница какой регистр?
На практике от них не какой роли, за исключением ESP (указатель верхушки стека, так как на прямую нельзя обращатся к EIP) просто EBP обычно используют компиляторы, как для локальных переменных, а ECX для передачи "this-ов" объекта. Это компиляторы у них такое правило. А регистры все одинаковые (за исключением ESP). Есть книжка "Красного дракона" можете почитать.... |
![]() |
![]() |
![]() |
#25 |
Пользователь
Регистрация: 11.02.2012
Сообщений: 10
|
![]()
Наверное разобрался.
EBP заносится в стек для сохранения значения SP, если я правильно понял, для сохранения смещения параметров предыдущей процедуры. Код HTML:
push eax <!--сохраняем регистр на всякий случай, т.к. высокоуровневый компилятор--> push 03 <!-- параметры --> push 02 push 01 call @proc1 jmp @exit @proc1: push ebp mov ebp, esp mov eax, [ebp+8] <!-- 0-ebp,4-call,8-param1 --> push 02 <!-- параметры второй процедуры --> push 01 call @proc2 pop ebp ret 12 <!-- по идее освобождаем стек от параметров --> @proc2: push ebp <!-- нужно --> mov ebp, esp add eax, [ebp+12] <!-- плюсуем второй параметр, т.е. 02 --> pop ebp <!-- восстанавливаем для продолжения предыдущей процедуры --> ret 8 <!-- освобождаем стек от параметров --> @exit: mov [i], eax <!-- пишем значение eax в переменную типа integer 4 байта--> pop eax Последний раз редактировалось ABCDEF1551; 17.02.2012 в 02:05. |
![]() |
![]() |
![]() |
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
C++/Абсолютный адрес регистра Ebp | coNsept | Общие вопросы C/C++ | 6 | 29.03.2011 12:56 |
Запись в регистр | Vitek-pm | Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM | 10 | 17.02.2010 04:00 |
Регистр в таблицах БД | Alexij | БД в Delphi | 3 | 17.04.2008 13:38 |
Регистр символов | Никки | Общие вопросы Delphi | 1 | 22.12.2007 20:14 |
регистр | vitalik007 | Общие вопросы Delphi | 2 | 15.09.2007 02:41 |