[Arm프로세서] Armv8: 범용(General Purpose) 레지스터란
By Guillermo Austin Kim | 2022년 4월 25일 |
Armv8 아키텍처의 레지스터 Armv7에서 Armv8로 넘어 오면서 Armv7의 구조가 많이 변경됐습니다. CPU 아키텍처의 최신 기법을 Armv8 아키텍처에 적용하면서 아키텍처의 구조를 많이 개선했으므로 Armv7 대비 20% 이상의 성능 개선이 있었다고 합니다. 그렇다면 Armv8 아키텍처에서 가장 많이 바뀐 기능이 무엇일까요? 레지스터와 기존의 Arm 동작 모드를 개선한 익셉션 레벨이라고 할 수 있습니다. 앞으로 Armv8 아키텍처에서 정의된 다음과 같은 레지스터를 설명합니다. * 범용 레지스터 * 스페셜 레지스터 * 시스템 레지스터 먼저 범용 레지스터를 알아봅시다. Armv8 아키텍처의 범용 레지스터 Armv8 아키텍처에서 다양한 레지스터를 정의하는데 먼저 범용 레지스터가 무
[Arm프로세서] Armv7: 익셉션이 발생한 명령어로 어떻게 복귀할까?
By Guillermo Austin Kim | 2020년 12월 21일 |
ARM 코어가 파이프 라인의 어느 단계에서 어떤 방식으로 익셉션을 유발하는지 알면, 자연히 익셉션이 발생한 다음 명령어로 복귀하는 방법도 알게 됩니다. 다음 표를 보면서 이 내용을 정리해 봅시다. 표 8.3 익셉션의 종류 별로 익셉션이 발생한 순간으로 복귀하는 명령어 먼저, 표 8.3 2번째 줄에 있는 Undefined Instruction 익셉션이 유발된 명령어로 복귀하는 방법에 대해 알아봅시다. ARM 파이프 라인의 구조에서 Undefined Instruction 익셉션은 디코딩 단계에서 유발되는데 ARM 코어는 r14_und 레지스터에 익셉션이 유발된 다음 명령어의 주소를 넣어줍니다. 그래서 r14_und 레지스터의 값을 프로그램 카운터로 이동하면 Undefined Instruction 익셉션이
[Arm프로세서] AAPCS: Armv8 아키텍처에서 AAPCS 관련 레지스터
By Guillermo Austin Kim | 2021년 7월 12일 |
Armv8 아키텍처의 AAPCS를 구성하는 주요 개념은 Armv7 아키텍처와 거의 유사합니다. 6장에서 다룬 내용을 요약하면 다음과 같습니다. * 서브 루틴을 호출하면 프로세스의 스택 공간에 레지스터를 푸시한다. * 'bl [주소]' 명령어를 실행해 서브 루틴으로 분기하면 Arm 프로세서는 링크 레지스터인 R14에 복귀할 주소를 업데이트한다. * 서브 루틴을 호출할 때 전달되는 인자는 R0-R3 레지스터에 저장된다. * 함수의 리턴값은 R0 레지스터에 저장된다. 위에서 설명한 내용을 Armv8 아키텍처 관점으로 다음과 같이 바꿔서 말할 수 있습니다. * 서브 루틴을 호출하면 프로세스의 스택 공간에 레지스터를 푸시한다. * 'bl [주소]' 명령어를 실행해 서브 루
[ARM프로세서] 소프트웨어 관점에서 익셉션(Exception)이란
By Guillermo Austin Kim | 2020년 11월 2일 |
소프트웨어 입장에서 익셉션이란 무엇일까요? 소프트웨어 입장에서는 익셉션의 종류에 따라 익셉션을 2가지 관점으로 볼 수 있습니다. ❑ 치명적인 오류: 메모리 어보트 타입 익셉션(Prefetch Abort, Data Abort, Undefined Instruction) ❑ 운영체제 커널에서 지원하는 기능: IRQ(인터럽트 서비스 루틴), SW 인터럽트(시스템 콜) 메모리 어보트 타입 익셉션이란 첫 번째, 메모리 어보트 타입 익셉션을 소프트웨어 관점으로 보면, 소프트웨어적으로 치명적인 오류가 발생했다고 볼 수 있습니다. 여기서 말하는 치명적인 오류가 발생하면 시스템이 리셋되는데, 이를 “크래시가 발생했다”라고 말합니다. 프로젝트를 개발하는 도중에 이런 치명적인 오류를 만나