본문 바로가기

전체 글

(484)
[Arm프로세서] Armv8: 스페셜 레지스터 그런데 Armv8에서는 익셉션 레벨 별로 사용되는 레지스터가 있는데 이를 스페셜 레지스터라고 합니다. 그 목록은 다음 그림과 같습니다. 그림 2.4 Armv8(Aarch64) 아키텍처의 스페셜 레지스터 목록 Armv7 에서는 각 동작 모드 별로 r13_/r14_와 같이 뱅크드된 레지스터가 있듯이, Armv8은 익셉션 레벨 별로 사용되는 레지스터가 있습니다. 이를 스페셜 레지스터라고 합니다. SP_ELx 레지스터 이 중에서 먼저 SP_EL0을 알아봅시다. SP_EL0은 EL0(익셉션 레벨 0)에서 실행되는 프로세스의 스택 Top 주소를 가리킵니다. 그렇다면 SP_EL1은 어느 익셉션 레벨에서 사용되는 레지스터일까요? SP_EL1은 EL1(익셉션 레벨 1)에서 실행 중인 프로세스의 스택 Top 주소를 가리킵..
[Arm프로세서] Armv8: 범용(General Purpose) 레지스터란 Armv7에서 Armv8로 넘어 오면서 Armv7의 구조가 많이 변경됐습니다. CPU 아키텍처의 최신 기법을 Armv8 아키텍처에 적용하면서 아키텍처의 구조를 많이 개선했으므로 Armv7 대비 20% 이상의 성능 개선이 있었다고 합니다. 그렇다면 Armv8 아키텍처에서 가장 많이 바뀐 기능이 무엇일까요? 레지스터와 기존의 Arm 동작 모드를 개선한 익셉션 레벨이라고 할 수 있습니다. 앞으로 Armv8 아키텍처에서 정의된 다음과 같은 레지스터를 설명합니다. * 범용 레지스터 * 스페셜 레지스터 * 시스템 레지스터 먼저 범용 레지스터를 알아봅시다. Armv8 아키텍처의 범용 레지스터 Armv8 아키텍처에서 다양한 레지스터를 정의하는데 먼저 범용 레지스터가 무엇인지 알아야 합니다. 이번 절에서는 X0~X30로..
[Arm프로세서] Armv7: SPSR(Saved Program Status Register) 레지스터란 SPSR는 Saved Program Status Registers의 약자로 CPSR을 백업하는 용도로 사용되는 레지스터입니다. 이어서 Arm 스팩 문서를 보면서 SPSR을 배워봅시다. The Saved Program Status Registers (SPSRs) The purpose of an SPSR is to record the pre-exception value of the CPSR. On taking an exception, the CPSR is copied to the SPSR of the mode to which the exception is taken. Saving this value means the exception handler can: 위 내용은 다음과 같이 요약할 수 있습니다. * S..
[Arm프로세서] Armv7: CPSR(Current Program Statue Register) 레지스터란 Armv7에서는 프로세서의 상태 정보를 저장하는 CPSR, SPSR 레지스터를 제공합니다. 먼저 CPSR 레지스터를 설명하고 CPSR 레지스터를 백업하는 용도로 설계된 SPSR 레지스터에 대해서 알아봅시다. CPSR 레지스터 CPSR은 Current Program Status Register의 약자로 프로세서의 상태 정보를 저장하는 레지스터입니다. 먼저 CPSR 레지스터의 비트 맵 정보를 알아봅시다. 그림 2.2 CPSR 레지스터의 비트 맵 CPSR 레지스터를 구성하는 비트 맵에서 주로 Conditional Flags, Mask Bit 그리고 M[4:0]이 사용됩니다. 먼저 Conditional Flags를 알아봅시다. Condition Flags: bits[31:28] 조건 플래그는 명령어를 연산한 후..
[Arm프로세서] Armv7: 범용 레지스터에서 뱅크드 레지스터란 그림 2.1의 아랫 부분을 보면 r13_svc와 r14_svc 라는 레지스터가 보입니다. 오른쪽에는 r13_irq와 r14_irq 레지스터가 보입니다. 이런 종류의 레지스터의 정체는 무엇일까요? Arm 동작 모드에 뱅크드된 레지스터라고 합니다. 뱅크드 레지스터를 주로 기계적인 관점으로 설명해서 소프트웨어 개발자가 이해하기 어렵습니다. 이해를 돕기 위해 다음과 같은 명령어를 봅시다. sub, sp, sp, #4 sp 레지스터인 r13 레지스터의 값을 4만큼 빼는 명령어입니다. 여기서 sub은 뺄셈 연산 명령어입니다. 위와 같은 명령어를 실행하면 그림 2.1기준으로 어느 레지스터의 값이 업데이트될까요? r13의 종류는 r13_svc, r13_irq, r13_abt 이니, 이 중 하나입니다. ‘sub, sp,..
[Arm프로세서] Armv7: 범용(General Purpose) 레지스터란 CPU 아키텍처를 배울 때 가장 먼저 어셈블리 명령어와 레지스터의 용법을 파악합니다. 어셈블리 명령어는 레지스터로 구성돼 있어 어셈블리 명령어를 익히려면 레지스터의 용법을 알아야 합니다. 그렇다면 Arm 아키텍처는 같은 레지스터를 사용할까요? 그렇지 않습니다. Armv7와 Armv8 아키텍처 별로 각각 레지스터를 정의합니다. 이번 포스트에서 Armv7 아키텍처에서 정의된 레지스터를 다룹니다. 먼저 범용 레지스터를 설명하겠습니다. 범용 레지스터 레지스터란 무엇일까요? 레지스터는 메모리 계층 구조 관점으로 설명할 수 있습니다. Arm 코어가 사용하는 데이터를 저장하는 임시 저장 공간을 레지스터라고 합니다. 그런데 소프트웨어 관점으로는 Armv7 아키텍처에서 레지스터는 범용 레지스터와 CP15 레지스터로 분류..
[Arm프로세서] Arm 아키텍처의 레지스터 소개 Arm 아키텍처를 구성하는 기능을 이해하려면 먼저 무엇을 알아야 할까요? Arm 코어에 내장된 레지스터입니다. 레지스터를 잘 알려면 무엇을 알아야 할까요? 레지스터들이 어떻게 구성돼 있고 어떤 방식으로 사용되는지 파악하면 레지스터를 잘 안다고 말할 수 있습니다. Arm 아키텍처에서 정의된 기능들은 "레지스터를 어떻게 변경하고 설정할까?"가 그 실체이고 정체입니다. 메모리 아키텍처 관점으로 레지스터는 무엇일까요? Arm 코어가 사용하는 저장 매체 중에 가장 속도가 빠른 게 레지스터입니다. 레지스터 다음으로 속도가 빠른 저장 매체로 캐시와 RAM을 주로 언급합니다. 캐시나 RAM을 사용하는 것보다 되도록 레지스터를 사용해 데이터를 연산하면 성능을 최적화할 수 있습니다. 그럼 레지스터는 어떻게 표기할까요? 전..
[Armv8] 전체 어셈블리 명령어 타입 - Tech Tree 데이터 처리 명령어 - move - 산술 명령어 - 비트 shift - 논리 비트 shift 메모리 연산 - ldr - str 비교와 브랜치 - 플래그 설정 명령어 - 컨디션 코드 - 조건부 브랜치 - 브랜치 시스템 제어 명령어 - 트랩 관련 명령어 - 시스템 레지스터 설정 - PSTATE 각종 필드 설정 - 스택 동작 방식 설정 배리어 명령어 - DSB - DMB - ISB 캐시 설정 명령어 - DC {C,CI,I}SW, Xx - TLBI ALLE{1..3}{IS} * 유튜브 소개 영상