[Arm프로세서] Armv8: 시스템 레지스터에 접근할 수 있는 명령어
By Guillermo Austin Kim | 2022년 5월 7일 |
이전 포스트에서 Armv8 아키텍처에서 정의된 레지스터에 대해 알아봤습니다. 레지스터마다 각자 주어진 기능이 있지만 결국 Arm 코어가 사용하는 변수라는 점은 같습니다. 레지스터의 용법을 파악하면 다음과 같은 의문이 생길 수 있습니다. "레지스터의 값을 어떻게 읽거나 쓸 수 있을까?" 레지스터의 값을 읽거나 쓰려면 명령어를 실행해야 합니다. 그런데 레지스터의 종류에 따라 사용할 수 있는 명령어가 다음과 같이 제한돼 있습니다. * 범용 레지스터: 모든 명령어 * 시스템 레지스터: MSR, MRS 명령어 Armv8에서 정의된 범용 레지스터는 Armv8에서 정의된 모든 명령어에서 볼 수 있습니다. 데이터를 산술 연산하거나 메모리에 위치한 데이터를 읽을 때 사용됩니다. 시스템 레지스터의 값
[Arm프로세서] AAPCS: Armv7: AAPCS와 C 코드 최적화
By Guillermo Austin Kim | 2021년 6월 28일 |
이제까지 다룬 Armv7 아키텍처에서 정의된 AAPCS를 배우고 나면 자연스럽게 다음과 같은 의문이 생길 가능성이 높습니다. "AAPCS와 관련된 내용을 실무에 어떻게 활용할 수 있을까?" 이번 장의 앞 부분에서 강조했지만, Armv7 아키텍처를 구성하는 다른 내용보다도 AAPCS는 실무에 활용될 내용이 많습니다. 특히 AAPCS는 최적화를 이야기할 때 항상 논의됩니다. 사실 개발자들이 주어진 스팩이나 시나리오에 맞게 기능을 구현한 후, 어느 정도 시점이 지나면 최적화 작업을 시작하는 경우가 많습니다. 작성된 코드를 최적화해야, 맡은 기능이 제대로 동작하는 경우가 있습니다. 가끔 소리가 끊기거나 화면이 부드럽게 출력되지 않는 상황입니다. 임베디드 시스템 개발자 관점으로는 성능을 최적화하면 전
[ARM프로세서] ARMv7: Undefined Instruction 익셉션을 유발할 때의 ARM 코어의 세부 동작
By Guillermo Austin Kim | 2020년 12월 3일 |
이어서 Undefined Instruction 익셉션이 발생하는 전체 흐름을 살펴보면서, 세부 동작을 알아봅시다. 그림 8.9 Undefined Instruction 익셉션을 유발할 때 변경되는 레지스터 그림 8.9는 Undefined Instruction 익셉션의 전체 실행 흐름인데, 그림의 가운데 부분을 보면 ARM 코어가 하드웨어적으로 처리되는 부분이 슈도 코드로 표기돼 있습니다. 이 슈도 코드를 분석하겠습니다. 먼저 01번째 줄을 봅시다. 01 R14_und = 0xc000d000 + 0x4 Undefined Instruction 익셉션이 발생했으니 ARM 코어는 Undefined(UND) 모드로 변경할 준비를 합니다. Undefined(UND) 모드에서만 사용되는 R14_und 레지
[ARM] ARM 프로세서 학습 방법의 문제점
By Guillermo Austin Kim | 2019년 12월 23일 |
이제부터 ARM 프로세서에 대한 이야기를 조금 더 해보려고 합니다.제 개발 인생을 돌이켜 보니 대부분의 시간을 사실 ARM 프로세서와 함께 보냈더군요. 다음과 같은 조합으로 말이죠. * 'ARM + RTOS, ARM + 리눅스' ARM 프로세서를 처음 접할 때의 느낌 그런데 제가 ARM 프로세서를 처음 접할 때의 느낌을 잊을 수가 없습니다. 그 느낌이 어땠나면; * 목욕탕에서 가장 뜨거운 온탕에 점프해 들어갔을 때 음, 잘 공감이 가시나요? 대중 목욕탕에 안 가신다고요? 그럼 다음의 예는 어떤가요? * 그럼 충치가 있어서 치과를 가서 진료실에서 기다릴 때 아직도 공감이 안된다고요? 난 한번도 치과에 가본 적이 없다고요? 그렇다면 어쩔 수 없죠. 더 이상의 예를 들기는 어렵겠군요.