[Arm프로세서] Armv7: 범용(General Purpose) 레지스터란
By Guillermo Austin Kim | 2022년 4월 14일 |
Armv7 아키텍처의 레지스터 CPU 아키텍처를 배울 때 가장 먼저 어셈블리 명령어와 레지스터의 용법을 파악합니다. 어셈블리 명령어는 레지스터로 구성돼 있어 어셈블리 명령어를 익히려면 레지스터의 용법을 알아야 합니다. 그렇다면 Arm 아키텍처는 같은 레지스터를 사용할까요? 그렇지 않습니다. Armv7와 Armv8 아키텍처 별로 각각 레지스터를 정의합니다. 이번 포스트에서 Armv7 아키텍처에서 정의된 레지스터를 다룹니다. 먼저 범용 레지스터를 설명하겠습니다. 범용 레지스터 레지스터란 무엇일까요? 레지스터는 메모리 계층 구조 관점으로 설명할 수 있습니다. Arm 코어가 사용하는 데이터를 저장하는 임시 저장 공간을 레지스터라고 합니다. 그런데 소프트웨어 관점으로는 Armv7 아키텍처에서 레지스터는 범용
[ARM] ARMv8(Aarch64) 아키텍처 기반 프로젝트가 대세인가?
By Guillermo Austin Kim | 2020년 9월 2일 |
ARMv8 아키텍처는 64비트로 구성된 명령어를 지원하고 최신 ARM 코어 기술들을 지원합니다. 최근에 출시된 모바일 폰은 거의 대부분 ARMv8(Aarch64: 64비트 명령어) 아키텍처 기반의 ARM 프로세서를 탑재하고 있습니다. 그래서 대부분 ARMv8(Aarch64) 프로세서를 대부분 IT 기기에서 적용한다고 생각했습니다. 하지만 이건 저만의 착각이었습니다. 여러 임베디드 개발자분들과 교류한 후 다음과 같은 사실을 깨닫게 됐습니다. * ARMv7 아키텍처(32비트 명령어) ARM 프로세서를 많이 사용하고 있다. ARM 프로세서의 가격 그렇다면 32비트 기반 ARM 프로세서(Cortex-A9, Cortex-M3)를 채택하는 이유는 무엇일까요? * 바로 가격 때문입니다. 모바
[ARM] 익셉션이 발생하면 프로세스는 어떻게 동작할까 - ARMv8
By Guillermo Austin Kim | 2020년 11월 2일 |
이번에는 64비트 기반 ARMv8 아키텍처 기준으로 proc_func_ptr 함수의 코드를 봅시다. 01 ffffff8008106d7c <proc_func_ptr>:02 ffffff8008106d7c: d10083ff sub sp, sp, #0x2003 ffffff8008106d80: f90007e0 str x0, [sp,#8]04 ffffff8008106d84: b90017ff str wzr, [sp,#20]05 ffffff8008106d88: f94007e0 ldr x0, [sp,#8]06 ffffff8008106d8c: f9000fe0 str x0, [sp,#24]07 ffffff8008106d90: f9400fe0 ldr x0, [sp
[ARM] 익셉션이 발생하면 프로세스는 어떻게 동작할까 - ARMv7
By Guillermo Austin Kim | 2020년 11월 2일 |
많은 학생이나 SW 개발자들은 "ARM의 익셉션 벡터 테이블을 열심히 읽어도 잘 모르겠다", 혹은 "무슨 내용인지 와 닿지 않는다"라는 불만을 토로합니다. 또한 "ARM 익셉션의 개념이 어렵다"라고 말하기도 합니다. 그 이유에 대해 곰곰히 생각해 봤는데, 소프트웨어 관점으로 익셉션이 무엇인지 분석하지 않았기 때문이라는 결론에 이르게 됐습니다. 여기서 말하는 소프트웨어란 용어는 조금 애매하고 추상적인 의미를 내포하는듯 합니다. 그런데 소프트웨어란 용어를 구체적으로 표현하면 "운영체제의 프로세스"라고 말할 수 있습니다. 소프트웨어 개발자가 입력한 코드는 CPU에 가까운 어셈블리 명령어로 실행되는데, 이를 실행하는 주인공은 프로세스이기 때문입니다. 익셉션이 발생하면 프로세스는 어떻게 동작할까요? 어떤 익셉션