Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.02.2012, 07:19   #21
ABCDEF1551
Пользователь
 
Регистрация: 11.02.2012
Сообщений: 10
По умолчанию

BP привязан к сегменту стека? Т.е. mov eax, [BP] получится как mov eax, [SS:BP]?
ABCDEF1551 вне форума Ответить с цитированием
Старый 15.02.2012, 08:10   #22
DiemonStar
Старожил
 
Регистрация: 08.02.2012
Сообщений: 2,173
По умолчанию

Цитата:
Сообщение от ABCDEF1551 Посмотреть сообщение
BP привязан к сегменту стека? Т.е. mov eax, [BP] получится как mov eax, [SS:BP]?
компилятор сделает именно так, если явно не указать другой сегмент.
Правильно поставленная задача - три четверти решения.
DiemonStar вне форума Ответить с цитированием
Старый 15.02.2012, 09:09   #23
Mikl___
Участник клуба
 
Регистрация: 11.01.2010
Сообщений: 1,139
По умолчанию

Цитата:
BP привязан к сегменту стека? Т.е. mov eax, [BP] получится как mov eax, [SS:BP]?
для use16
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
Цитата:
The addressing modes that do not involve bp use the data segment by default. Those that have bp as an operand use the stack segment by default.
для use32 не актуально, так как cs=ds=ss=es
Mikl___ вне форума Ответить с цитированием
Старый 15.02.2012, 20:40   #24
VintProg
not
Участник клуба
 
Аватар для VintProg
 
Регистрация: 27.06.2009
Сообщений: 1,399
По умолчанию

А какая разница какой регистр?
На практике от них не какой роли, за исключением ESP (указатель верхушки стека, так как на прямую нельзя обращатся к EIP) просто EBP обычно используют компиляторы, как для локальных переменных, а ECX для передачи "this-ов" объекта. Это компиляторы у них такое правило. А регистры все одинаковые (за исключением ESP).

Есть книжка "Красного дракона" можете почитать....
VintProg вне форума Ответить с цитированием
Старый 17.02.2012, 01:43   #25
ABCDEF1551
Пользователь
 
Регистрация: 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.
ABCDEF1551 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
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