[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
[ARM] ARM 프로세서는 어떻게 공부해야 할까?
By Guillermo Austin Kim | 2020년 9월 20일 |
이제까지 ARM 프로세서를 공부하는 방법의 문제점에 대해 설명했습니다. 이어서 ARM 프로세서를 효율적으로 공부하는 방법에 대해 소개합니다. 디버깅을 하면서 ARM 어셈블리 명령어를 익힌다 GDB와 같은 프로그램을 통해 실습을 하면서 ARM 어셈블리 명령어를 배울 필요가 있습니다. 어셈블리 명령어 한 줄 한 줄을 실행할 때 결과를 직접 확인하면서 실습을 하면 배운 내용이 더 오랫동안 남습니다. 이 책에서 ARM 어셈블리 명령어의 동작 원리와 함께 명령어를 실습할 수 있는 방법을 소개합니다. 운영체제의 기본 원리와 함께 ARM 아키텍처를 배운다 운영체제 커널의 기본 동작 원리를 ARM 프로세서의 내용과 함께 같이 공부해야 합니다. 이를 위해 ARM 프로세서의 주요 기능이 실제 프로젝트의 운영체제에서
[Arm프로세서] AAPCS: Armv7: 서브 루틴(함수)로 분기될 때 실행되는 어셈블리 명령어
By Guillermo Austin Kim | 2021년 5월 26일 |
Armv7 아키텍처에 지원하는 레지스터들 중에 AAPCS와 연관된 레지스터가 SP, LR 레지스터이듯이, 수 많은 Armv7의 어셈블리 명령어 중에 AAPCS와 연관된 명령어가 있습니다. AAPCS와 연관된 명령어의 목록은 다음과 같습니다. 표 6.3 AAPCS와 관련된 명령어 위 표에서 보이는 각 명령어를 소개하고 예제 코드를 분석하면서, 명령어의 동작 원리를 배워봅시다. [참고]영어 단어를 처음 접할 때 사전을 열고 단어의 정의를 찾아 봅니다. 그런데 영어 단어의 정의만 알고는 단어를 제대로 안다고 볼 수 없습니다. 단어가 실제 어떻게 쓰이는지 알아야 그 단어를 제대로 안다고 볼 수 있습니다. 어셈블리 명령어도 마찬가지입니다. 배우려는 어셈블리 명령어가 어떤 함수나 레이블에서 사용되는지 알아야
[Arm프로세서] AAPCS: Armv8: X30 링크 레지스터와 어셈블리 명령어 분석
By Guillermo Austin Kim | 2021년 8월 30일 |
SP 레지스터보다 링크 레지스터인 X30은 '함수 호출'에서 가장 중요한 역할을 수행합니다. 함수를 호출한 다음에 복귀할 주소를 X30 레지스터가 저장하기 때문입니다. 우리가 함수를 작성하면 어디선가 함수를 호출할 것이라 예상합니다. 그런데 함수를 호출한 다음, 호출된 함수의 실행이 종료되면 (함수를 호출한 코드 기준으로) 바로 아랫 부분에 있는 코드가 실행됩니다. X30 레지스터와 관련된 예제 코드 분석 이번에는 아래와 같이 main() 함수의 코드(C 코드와 어셈블리 코드로 같이 변환)을 보면서 이 내용에 대해 조금 더 알아봅시다. 01 0x10000 <main>:02 {03 0x10000: f81e0ffe str x30, [sp, #-32]!04 int res =