Мы также называем регистры RAX, RBX и т. Д. Как R1, R2 и так далее? - PullRequest
4 голосов
/ 03 февраля 2012

Я изучаю микропроцессоры 8086/8080. Регистры, используемые в них, имеют имена,

  1. RAX
  2. RBX
  3. RCX
  4. RDX

и продолжайте до R8, пока регистры не будут названы как R8, R9 ... до R15. Я хотел знать

Мы также называем регистры RAX, RBX и т. Д. Как R1, R2 и так далее?

Ответы [ 2 ]

4 голосов
/ 03 февраля 2012

Стандартная практика - первые 8 регистров сохраняют свое историческое имя. Это соглашение используется в документации Intel и AMD и в большинстве ассемблеров.

Причина этого в том, что эти имена являются мнемоническими для функции регистра. Например rsp торчит как указатель стека; r4 не так много. Новые регистры, напротив, не имеют какой-либо конкретной функции.

При этом вы всегда можете использовать макросы для определения r0-r7 как rax,rcx,rdx,rbx,rsp,rbp,rsi,rdi. Например, вы можете получить эти определения в nasm с

% используют altreg

Опять же, это нестандартно и затруднит чтение кода, как для вас, так и для других.

3 голосов
/ 01 февраля 2014

Во-первых, 8086/80386 / x86-64 и 8080/8085 - это совершенно разные архитектуры. 8080 - это 8-битный процессор, а 8086 - 16-битный, с 8085 расширяет набор инструкций 8080, а 80386 и x86-64 являются 32- и 64-битными расширенными ISA 8086. Будучи различными архитектурами, они не двоичный код . А если вы изучаете Rxx, то это 64-битная , а не . 8086 - это ЦП с набором инструкций , а не с архитектурой, хотя его набор инструкций иногда можно назвать 8086. Имя архитектуры в общем случае обозначается как x86 или иногда x86-64

На вопрос RBX не является R2 . Действительный кодированный порядок равен AX, CX, DX, BX . И регистры часто (почти всегда) отсчитываются от нуля, поэтому RBX должен быть R3 , а AX, CX, DX будут R0, R1, R2 соответственно. В nasm вы также можете использовать эти пронумерованные регистры с %use altreg

5.1 altreg: альтернативные имена регистров

Стандартный пакет макросов altreg предоставляет альтернативные имена регистров. Он предоставляет числовые имена регистров для всех регистров (не только R8 – R15), определяемые Intel псевдонимы R8L – R15L для младших байтов регистра (в отличие от стандартных имен NASM / AMD R8B – R15B) и имена R0H– R3H (по аналогии с R0L – R3L) для AH, CH, DH и BH.

https://nasm.us/doc/nasmdoc5.html

К вашему сведению, в регистры кодируются так:

000  0    B
001  1    C
010  2    D
011  3    E
100  4    H 
101  5    L
111  7    A

также не в алфавитном порядке

См. Почему первые четыре георадара x86 названы в таком не интуитивном порядке?

...