Почему нет регистра, содержащего старшие байты EAX?

%AX = (%AH + %AL)

Так почему бы не %EAX = (%SOME_REGISTER + %AX) для какого-нибудь регистра %SOME_REGISTER?

небольшая поправка, EAX не равно AX, точнее, AX представляет младшие 16 бит (половину) EAX. аналогично, AH и AL являются двумя половинами AX.

Evan Teran 23.10.2008 06:40

@EvanTeran Можно ли получить верхнюю половину EAX, а также нижнюю половину?

Anderson Green 05.03.2013 19:27

@AndersonGreen: не напрямую (см. Диаграмму в ответе Майка Томпсона). Единственный способ получить верхнюю половину EAX - это немного сдвинуть / повернуть. Например: ROR EAX, 16; MOV DX AX; ROR EAX, 16. Это поместит старшие 16 бит EAX в DX, а затем восстановит EAX до его исходного значения. Лично мне хотелось бы увидеть псевдонимы регистров для верхних половин. Думаю, это сделало бы код более лаконичным.

Evan Teran 05.03.2013 19:57
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
68
4
47 359
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

В старые 8-битные времена был регистр A.

В 16-битные дни был 16-битный регистр AX, который был разделен на две 8-битные части, AH и AL, для тех времен, когда вы все еще хотели работать с 8-битными значениями.

В 32-битные дни был введен 32-битный регистр EAX, но все регистры AX, AH и AL были сохранены. Разработчики не сочли необходимым вводить новый 16-битный регистр, который адресовал бы биты с 16 по 31 EAX.

Сегодня он продолжает использовать 64-битные регистры, 64-битный регистр RAX включает EAX как младшие 32 бита.

Ferruccio 23.10.2008 05:48

«E» и «X» могут означать «расширенный», но что означает «R» в RAX?

Hugh Allen 23.10.2008 06:07

Предположительно, "R" egister. Есть дополнительные новые регистры, которые просто названы R + number.

Curt Hagenlocher 23.10.2008 06:33

Я просмотрел руководство по AMD64 и до сих пор не понимаю, что означает R, кроме «регистр» - просто чтобы соответствовать их R8 - R15. (Кстати, я понятия не имею, почему, с их фиксацией на числах, они не просто переименовывают все существующие общие регистры. :-P)

Chris Jester-Young 23.10.2008 06:38

т.е. R0 => RAX, R1 => RCX, R2 => RDX, R3 => RBX, R4 => RSP, R5 => RBP, R6 => RSI, R7 => RDI. :-) (Между прочим, это моя любимая мозоль, когда люди неправильно заказывают регистр; порядок AX, CX, DX, BX, SP, BP, SI, DI. :-P)

Chris Jester-Young 23.10.2008 06:40

Какой регистр :-P? : D

Jeff Yates 23.10.2008 07:19

Как назывались регистры в 8008 и почему 8080 не обеспечивал для них обратную совместимость?

Windows programmer 23.10.2008 07:25

@ffpf: :-P стоит после терминатора списка, точки (или точки, если вы американец, или точки, если вы математик); таким образом, это не считается. :-)

Chris Jester-Young 23.10.2008 08:18

У 8008 был тот же набор регистров, что и у 8080, но счетчик программ (ПК) был всего 14 бит, поэтому он мог адресовать только 16K.

Ferruccio 23.10.2008 15:03

Я хочу программировать на языке, где :-P - регистр.

Erik Forbes 21.05.2009 23:11

Вы все еще можете легко получить большую часть eax. Просто вычтите ax из eax, а затем разделите результат на 16.

Catharsis 11.02.2010 11:44

@Austin - или сдвиньте вправо на 16, сохранив код операции и, что более важно, инструкцию деления. Не говоря уже о делении на 2 ^ 16. В противном случае, на место;)

ijw 16.09.2012 04:32

@HughAllen, Paul Nathan и Curt Hagenlocher: буква «R» в «RAX», «RBX» и т. д. Сама по себе является аббревиатурой «Register Extension». Подумайте: «Расширение регистра для BX = RBX». См. Раздел 1.2.7 руководства программиста AMD: ptlsim.org/papers/x86-64/Opteron-InstructionSet-24594.pdf

William Leara 21.12.2012 04:22

@Chris Jester-Young: На самом деле вы можете использовать от R0 до R7 для обозначения исходных 8 георадаров, это не очень распространено. stackoverflow.com/questions/9129933/…

ecm 25.01.2020 23:59
Ответ принят как подходящий

Просто для пояснения. На заре микропроцессоров 1970-х годов у ЦП было лишь небольшое количество регистров и очень ограниченный набор команд. Обычно арифметический блок мог работать только с одним регистром ЦП, часто называемым «аккумулятором». Аккумулятор на 8-ми битных процессорах 8080 и Z80 получил название «А». Было 6 других 8-битных регистров общего назначения: B, C, D, E, H и L. Эти шесть регистров можно было объединить в пары для образования 3 16-битных регистров: BC, DE и HL. Внутренне аккумулятор был объединен с регистром флагов, чтобы сформировать 16-битный регистр AF.

Когда Intel разработала 16-битное семейство 8086, они хотели иметь возможность переносить код 8080, поэтому они сохранили ту же базовую структуру регистров:

8080/Z80  8086
A         AX
BC        BX
DE        CX
HL        DX
IX        SI    
IY        DI

Из-за необходимости переноса 8-битного кода им требовалось иметь возможность обращаться к отдельным 8-битным частям AX, BX, CX и DX. Они называются AL, AH для младшего и старшего байтов AX и так далее для BL / BH, CL / CH и DL / DH. IX и IY на Z80 когда-либо использовались только как 16-битные регистры указателя, поэтому не было необходимости обращаться к двум половинам SI и DI.

Когда в середине 1980-х был выпущен 80386, они создали «расширенные» версии всех регистров. Итак, AX стал EAX, BX стал EBX и т. д. Не было необходимости в доступе к старшим 16 битам этих новых расширенных регистров, поэтому они не создавали псевдорегистр EAXH.

AMD применила тот же трюк при производстве первых 64-битных процессоров. 64-битная версия регистра AX называется RAX. Итак, теперь у вас есть что-то вроде этого:

|63..32|31..16|15-8|7-0|
               |AH.|AL.|
               |AX.....|
       |EAX............|
|RAX...................|

Обычно нет объяснения, почему нет псевдорегистратора, скажем, для 31..16 части EAX. Полагаю, в этом не было необходимости ...

Calyth 08.01.2009 00:44

Фактически, в Z80 есть недокументированная «функция» (которая на самом деле не является чипом Intel), которая позволяет вам обращаться к IX и IY как к старшим и младшим байтам. Код операции - это префикс + код операции HL; если вы используете код операции H или L, вы получите эффект полуслова.

ijw 16.09.2012 04:30

Я бы сказал, соответствие регистров выглядит примерно так: 8080 / Z80, 8086, x86 Кодировка: A AX 000 BC CX 001 DE DX 010 HL BX 011 IX SI 110 IY DI 111

noop 01.10.2012 12:10

Для всех, кто хочет получить больше информации, это довольно полезный и краткий обзор cs.virginia.edu/~evans/cs216/guides/x86.html

SullX 28.06.2013 23:55

Хотя регистры разделения, несомненно, были вдохновлены 8080, разделение регистров означало, что процессор можно было рассматривать как имеющий восемь 16-битных регистров и без 8-битных регистров, или 7 + 2, или 6 + 4, или 5 + 6. , или 4 + 8. В рукописной сборке было бы полезно, если бы один из 32-битных регистров был отделен от 16-битных, а DX: AX вместе вел себя как 32-битный регистр (что позволяло 7 + 2 + 0, 7+ 1 + 2 или 7 + 0 + 4 регистра по 32/16/8 бит каждый), но преимущества, вероятно, не оправдали бы сложность.

supercat 20.11.2014 02:10

Другие вопросы по теме