Programing

새로운 X86_64 프로세서 레지스터의 이름은 무엇입니까?

lottogame 2021. 1. 5. 07:43
반응형

새로운 X86_64 프로세서 레지스터의 이름은 무엇입니까?


이 아키텍처에서 어셈블리를위한 새 레지스터의 이름은 어디에서 찾을 수 있습니까?

EAX, ESP, EBX 등과 같은 X86의 레지스터를 언급하고 있습니다.하지만 64 비트로하고 싶습니다.

C 코드를 분해 할 때와 같지 않다고 생각합니다. e 대신 r을 얻습니다.


이전 32 비트 레지스터는 64 비트, r레지스터 ( rax, rbx등) 로 확장되었습니다 rsp.

또한, 일부 추가 범용 레지스터가 거기 r8를 통해 r15어느 또한 (예를 들어)을 액세스 할 수있는 r8d, r8wr8b(하부 32 비트 더블 워드 16- 비트 워드, 8 비트 바이트의 각각). b접미사는 원래 AMD의 명칭입니다하지만 당신은 때때로으로 작성 볼 수 있습니다 l(소문자 L"하위 바이트"에 대한).

나는 b접미사 를 선호하는 경향이있다 (현재 로우 바이트 레지스터가 al, 등 bl이지만). d/w = double/word이름과 일치하고 l잠재적으로 long. 또는 더 나쁜 것은 숫자 1, 도대체 레지스터 번호 81무엇인지 질문하게합니다 :-)

기존의 16 비트 레지스터의 높은 바이트로, 많은 상황에서, 여전히 액세스 할 수 있습니다 ah, bh등 (이 나타납니다 새의 경우하지하는 불구의 r8를 통해 r15레지스터). 일부 새로운 명령어 인코딩, 특히 REX접두사를 사용하는 인코딩이 있는데, 원래의 높은 바이트에 액세스 할 수 없지만 나머지는 여전히 자유롭게 사용할 수 있습니다.

또한, 새로운 SSE 레지스터있다 xmm8하지만 xmm15.

eipeflags레지스터는 또한 연장 된 riprflags(높은 32 비트 불구 rflags하고, 지금, 아직 사용되지 않은).

자세한 내용은 wikipedia 페이지MSDN 을 참조하십시오.

이것이 asm특정 C 컴파일러 키워드 에서 지원되는지 여부는 말할 수 없습니다. 내가하는 작은 어셈블리 (1 년에 하루 정도)는 C가 아닌 어셈블리에서 이루어집니다.


관련 :


MSDN 설명서 64 레지스터에 대한 정보가 포함되어 있습니다.

x64는 x64의 8 개의 범용 레지스터를 64 비트로 확장하고 8 개의 새로운 64 비트 레지스터를 추가합니다. 64 비트 레지스터에는 "r"로 시작하는 이름이 있으므로 예를 들어 eax의 64 비트 확장을 rax라고합니다. 새 레지스터의 이름은 r8에서 r15까지입니다.

각 레지스터의 하위 32 비트, 16 비트 및 8 비트는 피연산자에서 직접 주소 지정이 가능합니다. 여기에는 하위 8 비트가 이전에 주소를 지정할 수 없었던 esi와 같은 레지스터가 포함됩니다. 다음 표는 64 비트 레지스터의 아래쪽 부분에 대한 어셈블리 언어 이름을 지정합니다.

64-bit register | Lower 32 bits | Lower 16 bits | Lower 8 bits
==============================================================
rax             | eax           | ax            | al
rbx             | ebx           | bx            | bl
rcx             | ecx           | cx            | cl
rdx             | edx           | dx            | dl
rsi             | esi           | si            | sil
rdi             | edi           | di            | dil
rbp             | ebp           | bp            | bpl
rsp             | esp           | sp            | spl
r8              | r8d           | r8w           | r8b
r9              | r9d           | r9w           | r9b
r10             | r10d          | r10w          | r10b
r11             | r11d          | r11w          | r11b
r12             | r12d          | r12w          | r12b
r13             | r13d          | r13w          | r13b
r14             | r14d          | r14w          | r14b
r15             | r15d          | r15w          | r15b

X64는 다음과 같이 32 비트 범용 레지스터를 확장합니다.

EAX -> RAX
EBX -> RBX
ECX -> RCX
EDX -> RDX
ESI -> RSI
EDI -> RDI
ESP -> RSP
EBP -> RBP

X64는 다음과 같은 64 비트 범용 레지스터도 추가합니다.

R8, R9, R10, R11, R12, R13, R14, R15

또한 SSE는 X64 사양의 일부이므로 xmm0-xmm15 벡터 레지스터도 사용할 수 있습니다.

Wikipedia / X86-64 에서 아키텍처에 대한 몇 가지 기본 정보를 거나 Intel 웹 사이트를 방문 할 수 있습니다.


인텔 매뉴얼을 읽어 보자

이 아키텍처에서 어셈블리를위한 새 레지스터의 이름은 어디에서 찾을 수 있습니까?

In the processor's manual "Intel 64 and IA-32 Architectures Software Developer’s Manual Volume 1: Basic Architecture", e.g. version 253665-053US:

  • search for "registers"
  • the first match is the index "3.4 BASIC PROGRAM EXECUTION REGISTER"
  • two items below "3.4.1.1 General-Purpose Registers in 64-Bit Mode"

On that section:

if a 64-bit operand size is specified: RAX, RBX, RCX, RDX, RDI, RSI, RBP, RSP, R8-R15 are available. R8D-R 15D/R8-R15 represent eight new general-purpose registers.

Reminder: 64 bit mode is the "normal" mode in x86-64. The other main mode is "compatibility mode" which emulates IA32.

If you keep searching for "register" on the TOC, you will also find sections on "number crushing" registers for floating point and SIMD scattered in the manual:

  • 8.1.2 - x87 FPU Data Registers (STx)
  • 9.9.2 - MMX Registers
  • 10.2.2 - XMM Registers
  • 14.1.1 - 256-Bit Wide SIMD Register Support (YMM)

There are many more control registers which have various side effects and can generally not be written to unless you want those effects (and often require ring 0). These are summarized in "Volume 3 System Programming Guide - 2.1.6 System Registers", which is more for OS developers.

A good empirical approach is to run info all-registers in GDB: How to print register values in GDB?

ReferenceURL : https://stackoverflow.com/questions/1753602/what-are-the-names-of-the-new-x86-64-processors-registers

반응형