[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가 알아듯
[Arm프로세서] AAPCS: Armv8: 서브 루틴(함수)로 분기될 때 실행되는 어셈블리 명령어
By Guillermo Austin Kim | 2021년 7월 26일 |
arm 아키텍처의 세부 동작을 제대로 파악하려면, 해당 Arm 아키텍처에서 지원하는 어셈블리 명령어를 배워야 합니다. 이는 Armv8 아키텍처의 AAPCS64에도 마찬가지로 적용될 수 있습니다. 이번 절에서는 Armv8 아키텍처의 AAPCS64와 연관된 명령어를 소개합니다. AAPCS와 연관된 명령어의 목록은 다음과 같습니다. 표 7.4 Armv8 아키텍처에서 사용되는 AAPCS와 관련된 명령어 위 표에서 보이는 각 명령어를 소개하고 예제 코드를 분석하면서, 명령어의 동작 원리를 배워봅시다. Written by <디버깅을 통해 배우는 리눅스 커널의 구조와 원리> 저자