Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: программирование на языке Assembler


Информационный Канал Subscribe.Ru

РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / Assembler

Выпуск № 173
от 30.06.2005, 12:20

Администратор:Калашников О.А.
В номере:Вопросов: 1, Ответов: 3


Вопрос № 22631: чем отличается смещение от базы, что-то я запутался. Что за адресация по базе со сдвигом. Каково назначение регистра BP, чем же он отличается от SP ...

Вопрос № 22.631
чем отличается смещение от базы, что-то я запутался.
Что за адресация по базе со сдвигом.
Каково назначение регистра BP, чем же он отличается от SP

Приложение:

Отправлен: 25.06.2005, 11:21
Вопрос задал: Терсков Алексей Николаевич (статус: Посетитель)
Всего ответов отправлено: 3

Отвечает: ASMодей
Здравствуйте, Терсков Алексей Николаевич!
Посмотри здесь: http://zeroos.narod.ru/hard/cpu/intel/addr.htm
Ответ отправил: ASMодей (статус: Профессионал)
Отправлен: 25.06.2005, 12:36

Отвечает: Евгений Иванов
Здравствуйте, Терсков Алексей Николаевич!
это всё адреса. тебе нужен адрес, а он высчитывается по необходимости.
смещение, база - это всё числа. они суммируются для вычисления эффективного адреса.
ebp - обычный регистр, причём работает по умолчанию с сегментом SS, в отличии от других регистров общего назначения. ESP - указывает на вершину стека, тоже через SS.

---------
Что имеем - не храним, потерявши - плачем
Ответ отправил: Евгений Иванов (статус: Профессор)
Отправлен: 25.06.2005, 12:56
Оценка за ответ: 5
Комментарий оценки:
А как конкретно использовать регистр bp и sp
можете привести пример

Отвечает: Ayl
Здравствуйте, Терсков Алексей Николаевич!

Смещение - это константа, которая указывается непосредственно в команде, например:
mov ax, OFFSET label

OFFSET label - это как раз смещение метки label

База - это значение базового регистра (bx или bp). Используется при косвенной адресации. Например, mov ax, [bx] - загрузить в регистр ax содержимое памяти, адресуемое через регистр bx. Дополнительно можно указать и смещение: mov ax, [bx + 4].

Также есть еще индексные регистры di и si. Они также могут использоваться вместе с указанием смещения. Кроме этого, в строковых командах эти регистры автоматически изменяются для указания на следующее значение в строках.

Используя базовый и индексный регистры, а также смещение, можно сформировать такие варианты адресации:
mov ax, OFFSET label - только смещение
mov ax, [bx] - только база
mov ax, [bx + 4] - база + смещение
mov ax, [si] - только индекс
mov ax, [si + 4] - индекс + смещение
mov ax, [bx + si] - база + индекс
mov ax, [bx + si + 4] - база + индекс + смещение

Нельзя в одной команде использовать 2 базовых или 2 индексных регистра:
mov ax, [si + di]
mov ax, [bx + bp]

Кроме этого, в 32-разрядных режимах можно использовать комбинацию база + индекс*множитель + смещение, т.е.

mov ax, [ebx + 4*esi + 4]

Регистр BP отличается от регистра SP только тем, что регистр BP можно использовать где угодно и как угодно, а регистр SP аппаратно используется для доступа к стеку. Поэтому его использование затруднительно. Кроме того, регистр SP не может использоваться в качестве базового.

Использовать регистр BP можно, например, так:

push BP
mov BP, SP
mov AX, [BP + 6] - первый параметр в дальней процедуре

а можно просто как регистр для хранения любого значения.

Регистр SP можно использовать только для переопределения стека либо для резервирования/очистки в стеке места для локальных параметров процедуры:

push BP
mov BP, SP
sub SP, 100 - выделили в стеке 100 байт
...
add SP, 100 - восстановили
pop BP
ret


---------
Трудное - то, что можно сделать немедленно. Невозможное - то, для выполнения чего требуется немного больше времени
Ответ отправил: Ayl (статус: Профессор)
Отправлен: 27.06.2005, 13:03


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2005, RusFAQ.ru, Россия, Москва. Все права защищены.
Идея, дизайн, программирование, авторское право: Калашников О.А.

Яндекс


Subscribe.Ru
Поддержка подписчиков
Другие рассылки этой тематики
Другие рассылки этого автора
Подписан адрес:
Код этой рассылки: comp.soft.prog.faq
Отписаться
Вспомнить пароль

В избранное