레지스터

Category
아이템: 
포스트 갯수9

[Arm프로세서] Armv8: 시스템 레지스터에 접근할 수 있는 명령어

By Guillermo Austin Kim | 2022년 5월 7일 | 
이전 포스트에서 Armv8 아키텍처에서 정의된 레지스터에 대해 알아봤습니다. 레지스터마다 각자 주어진 기능이 있지만 결국 Arm 코어가 사용하는 변수라는 점은 같습니다. 레지스터의 용법을 파악하면 다음과 같은 의문이 생길 수 있습니다. "레지스터의 값을 어떻게 읽거나 쓸 수 있을까?" 레지스터의 값을 읽거나 쓰려면 명령어를 실행해야 합니다. 그런데 레지스터의 종류에 따라 사용할 수 있는 명령어가 다음과 같이 제한돼 있습니다. * 범용 레지스터: 모든 명령어 * 시스템 레지스터: MSR, MRS 명령어 Armv8에서 정의된 범용 레지스터는 Armv8에서 정의된 모든 명령어에서 볼 수 있습니다. 데이터를 산술 연산하거나 메모리에 위치한 데이터를 읽을 때 사용됩니다. 시스템 레지스터의 값

[Arm프로세서] Armv8: SPSR_ELx - SPSR(Saved Program Status Register) 레지스터란

By Guillermo Austin Kim | 2022년 5월 2일 | 
SPSR_ELx SPSR 레지스터는 Saved Program Status Register의 약자로 PSTATE 정보를 백업하는 용도로 사용됩니다. 따라서 SPSR 레지스터의 비트 맵은 PSTATE와 같습니다. 그렇다면 PSTATE는 SPSR 레지스터로 언제 백업될까요? "바로 익셉션이 유발될 때입니다." SPSR은 익셉션이 발생했을 때의 PSTATE의 정보를 저장하는 용도로 사용되며, 익셉션을 처리한 후 익셉션이 발생한 시점의 익셉션 레벨로 복귀하기 위해 사용됩니다. 즉, 익셉션과 관련된 처리를 하기 위해 사용됩니다. Arm 아키텍처 문서나 어셈블리 명령어를 분석하면 SPSR 보다는 SPSR_EL1 혹은 SPSR_EL0과 같은 규칙으로 SPSR 레지스터를 명시합니다. SPSR은 익셉션 레벨

[Arm프로세서] Armv8: 스페셜 레지스터

By Guillermo Austin Kim | 2022년 4월 28일 | 
그런데 Armv8에서는 익셉션 레벨 별로 사용되는 레지스터가 있는데 이를 스페셜 레지스터라고 합니다. 그 목록은 다음 그림과 같습니다. 그림 2.4 Armv8(Aarch64) 아키텍처의 스페셜 레지스터 목록 Armv7 에서는 각 동작 모드 별로 r13_<mode>/r14_<mode>와 같이 뱅크드된 레지스터가 있듯이, Armv8은 익셉션 레벨 별로 사용되는 레지스터가 있습니다. 이를 스페셜 레지스터라고 합니다. SP_ELx 레지스터 이 중에서 먼저 SP_EL0을 알아봅시다. SP_EL0은 EL0(익셉션 레벨 0)에서 실행되는 프로세스의 스택 Top 주소를 가리킵니다. 그렇다면 SP_EL1은 어느 익셉션 레벨에서 사용되는 레지스터일까요? SP_EL1은 EL1(익셉션 레벨 1)

[Arm프로세서] Armv7: 범용 레지스터에서 뱅크드 레지스터란

By Guillermo Austin Kim | 2022년 4월 18일 | 
그림 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