Имена регистров x86, режимы адресации, смещение и хранение - PullRequest
3 голосов
/ 31 августа 2011

У меня есть несколько вопросов о сборке, которые я изучаю, и меня это смущает.

  1. В чем разница между bx и bp и ss и sp?В книге сказано, что bx - это базовый регистр, а bp - это базовый указатель.Означает ли это, что это одно и то же?
  2. В чем разница с mov ax, bx, mov ax, [bx], mov ax, bp и mov ax, [bp]?
  3. Что означает disp в индексированномрежим адресации?Например mov al, disp[bx]?или mov al, disp[si]?В книге не объясняется значение disp.
  4. Регистр находится в ЦП, а не в ОЗУ, верно?

    Пожалуйста, извините за мой английский, это не мой первый язык.

Ответы [ 2 ]

8 голосов
/ 31 августа 2011

О боже, эти 16-битные регистры устарели в 1984 году. Извините, у вас есть старая книга.Тем не менее, современные процессоры все еще используют эти вещи, поэтому ваш вопрос имеет смысл.Я на самом деле написал 16-битную сборку, и, как ни странно, я это помню.Yikes.

  1. BX, BP, SS и SP - это всего лишь четыре отдельных регистра.BX, BP и SP - это регистры общего назначения (другие 16-битные GPR - это AX, CX, DX, SI и DI), а SS - это сегментный регистр, который вы не используете слишком часто (он неявно используется, когдаВы ссылаетесь на БП и ИП).Полный ответ на вопрос о том, насколько далеко расположен каждый из этих регистров, занял бы гораздо больше места, чем обычный ответ SO.Но чтобы ответить на ваш конкретный вопрос, BX и BP - это два разных регистра, а не один и тот же.BP обычно используется для индексации кадров стека, а BX обычно используется для индексации в структурах или массивах.

  2. MOV AX, BX перемещает содержимое BX в AX, а MOV AX, [BX] перемещаетсодержимое ячейки памяти, значение которой находится в DS: BX в AX.То есть, если BX содержал значение 500, то первая инструкция перемещает 500 в AX, а вторая перемещает содержимое адреса 500 (технически 500 байтов после начала сегмента DS) в AX.(Обратите внимание, что существуют некоторые тонкие различия в том, как подобные инструкции MOV интерпретируются в разных ассемблерах, таких как MASM и NASM.)

  3. DISP - это просто сокращение от «смещение»,число добавляется к значению в регистре, чтобы вычислить что-то вроде адреса переменной в стековом фрейме или элемента в структуре.В таких инструкциях, как MOV AX, [BX+25], смещение равно 25.

  4. Да, регистры являются частью ЦП.

2 голосов
/ 17 ноября 2011

4: В архитектуре x86 регистры действительно находятся в ЦП, а не в ОЗУ.Хорошо, я не знаю ни одной архитектуры после 1970 года, где регистры не проявляются в ЦП, но я знаю архитектуры (например, 8051), где регистры находятся в том же адресном пространстве, что и ОЗУ, или, по крайней мере,регистры являются подадресным пространством: команды, которые обращаются к ОЗУ, могут так же легко получать доступ к регистрам, используя точно такие же коды команд, и то, будет ли доступ вне оперативной памяти к ОЗУ или остается внутри микросхемы к регистрам, зависит только от адресаиспользуемый.В x86, однако, действующие значения регистров вообще не доступны с помощью инструкций, ссылающихся на память.(Если вы сначала явно или неявно не сохраните их в памяти, но мы не будем говорить об этом здесь.)

...