[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 =
[Linux][ARM] Coprocessor(코프로세서) Assembly
By Guillermo Austin Kim | 2018년 5월 23일 |
ARM 프로세스 내 Coprocessor라는 하드웨어가 있습니다. Co-Processor라는 것은 Co-worker랍니다. CPU 혼자 모든 일을 다 할 수 없으니 Co-Processor가 필요한 것입니다. Co-Processor는 C언어 같이 어떤 코드 흐름을 제어하는 일보다는 ARM Core나 Cache을 콘트롤하는 역할을 수행합니다. 그래서 ARM 프로세스로 칩을 디자인하는 개발자는 Co-Processor를 제어하는 명령어를 달달 외우고 있죠. Co-Processor가 있으니 당연히 Co-Processor하고 대화를 해야 겠죠. Co-Processor에게 말을 거는 방법을 역시 레지스터를 이용해서 주어진 명령어를 실행시키면 됩니다.Co-Processor에게 말을 걸면 Co-Processor가 알아듯