[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 <디버깅을 통해 배우는 리눅스 커널의 구조와 원리> 저자
[ARM] ARM 프로세서의 특징을 활용한 최적화는 왜 중요할까?
By Guillermo Austin Kim | 2020년 7월 4일 |
이번 포스팅에서는 'ARM 프로세서의 특징을 활용한 최적화는 왜 중요할까?'에 대해서 이야기하려고 합니다.본론에 들어가기 앞서 일반적인 SW 개발자들이 최적화에 대해 어떻게 생각하는지 짚어 보겠습니다. 생각보다 성능과 최적화는 중요하다 대부분 SW 개발자들은 주어진 스팩을 구현하기 위해 프로그램을 작성합니다. 화면을 꾸미는 프론트 엔드 개발자들은 화면이 제대로 구성됐는지, 메뉴나 폰트가 제대로 보이는 지 체크를 합니다. 네트워크 개발자들은 데이터 패킷이 제대로 전달이 됐는지 테스트를 할 것입니다. 프로그래머는 주로 주어진 스팩을 만족하면서 버그가 없도록 프로그래밍을 합니다. 하지만 프로그램이 스팩 내에서 올바르게 실행되도록 결함을 찾아 다듬는 것만으로는 충분하지 않을 수 있습니다. 고객이 사용