2010-09-29 3 views
4

Почему регистры общего назначения упорядочены по своему усмотрению (eax, ecx, edx, ebx)? Например, для «ИНК» Поручение опкоды являются:Регистры общего назначения - заказ

inc eax - 40 
inc ecx - 41 
inc edx - 42 
inc ebx - 43 

Есть причина, почему они упорядочиваются таким образом?

+0

Не знаю, почему вы думаете, что они должны быть в любой определенный порядок, если, конечно, они не попадают в стек. Кроме того, это зависит от того, что вы делаете, «слова», «байт» и т. Д. Целевое хранилище может быть как ячейкой памяти, так и регистром. – EKet

+0

Как это EAX, EBX и т. Д. Это 32-битные регистры ... И хорошо, кроме ebx, они кажутся алфавитами, нет? – 0x90

ответ

0

Есть 8 регистров, поэтому каждый из них получил порядковый номер от 0 до 7.

Я не понимаю вопроса. «Почему они не заказываются в лексикографическом порядке?» Это потому, что буквы a, b, c, d означают аккумулятор, базу, счетчик и данные и являются не только первыми четырьмя буквами алфавита.

+0

И почему они получили цифры таким образом? Вы просто говорите, почему их называют такими, какие они есть. – 0x90

+0

Многорежимные операции, такие как mul и div, используют edx: eax, поэтому я ожидал, что они будут как минимум смежными номерами. IIRC в 16-битной версии вы могли бы использовать bx для адресации, но не ax, cx, dx, так что это может быть причиной того, что она находится в верхней части с другими индексами. – Rup

+0

@NOP Почему это имеет значение? у вас есть 8 регистров, поэтому вам нужно назначить им разные номера. это все. Возможно, это зависит от некоторых внутренних деталей реализации x86, но это не имеет значения. – ruslik

4

Нечетные размещение (E) BX, вероятно, из-за способа, что 8086 эволюционировала от 8080.

8080 имеет аккумулятор (A) и 6 общего назначения регистрирует B, C, D, E, H и L, где B/C, D/E и H/L могут использоваться вместе парами, и, в частности, H/L может использоваться как адрес для доступа к памяти. 8086 был спроектирован таким образом, что существующий код 8080 можно было легко перевести на него; Я предполагаю, что это казалось логичным карту регистров в следующем порядке:

8080 register A -> 8086 internal register 0 
       B,C ->      1 
       D,E ->      2 
       H,L ->      3 
       SP ->      4 

Как отмечалось в другом ответе, AX, BX, CX и DX в 8086 не просто произвольные имена 4 регистров общего назначения - они имеют мнемонические значения для специальных функций, которые имеют эти регистры: «аккумулятор», «база», «счет» и «данные». Учитывая приведенное выше сопоставление, имеет смысл назначить функцию «аккумулятора» внутреннему регистру 0, а «базовую» функцию - на внутренний регистр 3. (И 8086 внутренних регистров 5, 6 и 7 представляют собой BP, SI и DI, которые появились новые функциональные возможности)

конечно, это действительно всего лишь немного информирован (см here, например) спекуляция. - только 8086 дизайнеры знают наверняка ...

Смежные вопросы