명령어 집합 | |
CISC | AMD64●x86● · M68K · 68xx · Z80 · 8080 · MOS 65xx · VAX |
RISC | AArch64 ARM · RISC-V● · MIPS● · DEC Alpha · POWER PowerPC · CELL-BE LoongArch · OpenRISC · PA-RISC · SPARC · Blackfin · SuperH · AVR32 AVR |
VLIW EPIC | E2K · IA-64 · Crusoe |
[clearfix]
1. 개요
ARMv8-A 아키텍처의 명령어 목록.1.1. 약어 설명
- Rd: destination register.
- Rt: target register.
- Rn/Rm:
1.2. 표기법
1.3. 명령어 인코딩
ARMv8-A ISA에서 명령어는 32-bit 길이로 인코딩되며, MIPS 및 RISC-V 등의 다른 RISC ISA에 비해 명령어 인코딩이 복잡한 편이다.1.4. 레지스터
ARMv8-A ISA에서는 정수 레지스터 31개, 부동소수점 레지스터 32개 및 SP(stack pointer), PC(program counter) 등을 정의한다.1.4.1. 정수 레지스터
레지스터 번호는 5 bit로 인코딩되며, 0-30은 레지스터 R0-R30, 31(0b11111
)은 상수 0인 ZR(zero register)를 의미한다.- 32-bit: W0-W30. R0-R30의 하위 32비트에 해당한다.
- 64-bit: X0-X30. R0-R30의 하위 64비트에 해당한다.
1.4.2. 부동소수점/벡터 레지스터
부동소수점/벡터 레지스터는 V0-V31로 표기한다.- 8-bit: B0-B31
- 16-bit: H0-H31
- 32-bit: S0-S31
- 64-bit: D0-D31
- 128-bit: Q0-Q31
1.4.3. 특수 레지스터
- SP: Stack Pointer (64-bit).
- PC: Program Counter (64-bit). 현재 실행되는 명령어의 주소를 가리킨다.
- FPCR: Floating Pointer Control Register
- FPSR: Floating Pointer Status Register
- PSTATE: Processor State
- 조건 플래그 (NZCV)
- N: Negative
- Z: Zero
- C: Carry
- V: Overflow
- 예외 마스크 (DAIF)
- D: Debug exception mask bit
- A: SError interrupt mask bit
- I: IRQ interrupt mask bit
- F: FIQ interrupt mask bit
2. 명령어 목록
명령어 분류는 ARMv8-A 레퍼런스 매뉴얼을 따른다. (단, 서술 순서는 다를 수 있다.)2.1. 데이터 처리 (레지스터) 명령어
====# 세부 인코딩 #====2.2. 데이터 처리 (Immediate) 명령어
명령어 | mnemonic | op0 | op/opc | S | 비고 |
ADR | | 00x | 0 | - | |
ADRP | | 00x | 1 | - | |
ADD | | 01x | 0 | 0 | sf로 32-bit/64-bit 지정 |
ADDS | | 01x | 0 | 1 | sf로 32-bit/64-bit 지정 |
SUB | | 01x | 1 | 0 | sf로 32-bit/64-bit 지정 |
SUBS | | 01x | 1 | 1 | sf로 32-bit/64-bit 지정 |
AND | | 100 | 00 | - | sf로 32-bit/64-bit 지정 |
ORR | | 100 | 01 | - | sf로 32-bit/64-bit 지정 |
EOR | | 100 | 10 | - | sf로 32-bit/64-bit 지정 |
ANDS | | 100 | 11 | - | sf로 32-bit/64-bit 지정 |
MOVN | | 101 | 00 | - | sf로 32-bit/64-bit 지정 |
MOVZ | | 101 | 10 | - | sf로 32-bit/64-bit 지정 |
MOVK | | 101 | 11 | - | sf로 32-bit/64-bit 지정 |
2.3. Load/Store 명령어
2.3.1. Load register (literal)
명령어 | mnemonic | opc | V | 비고 |
LDR | | 00 | 0 | 32-bit |
LDR | | 01 | 0 | 64-bit |
LDRSW | | 10 | 0 | |
PRFM | | 10 | 0 |