ARM프로세서

포스트: 75|조회수: 0|TERM
Items

Posts

75 posts

[Arm프로세서] Armv7: subs와 movs 명령어를 실행해 Arm 동작 모드 변경

Guillermo Austin Kim|2021년 10월 1일

Arm 동작 모드를 바꾸는 다른 방법은 spsr 레지스터의 [7:0] 비트를 변경하고 다음과 같은 형식의 명령어를 실행하는 것입니다. ❑ subs pc, lr, #4 ❑ movs pc, lr sub은 뺄셈 연산, mov는 레지스터의 값을 이동시키는 연산을 수행하는 명령어입니다. 그런데 위 명령어를 보면 각 명령어의 끝에 s와 같은 접미사가 있습니다. Arm 코어가 위와 같은 ‘subs’ 혹은 ‘movs’ 명령어를 보면 내부적으로 다음과 같이 실행합니다. ❑ spsr 레지스터의 값을 cpsr 레지스터에 백업하자. ❑ spsr 레지스터의 M[4:0]에 저장된 모드로 변경하자. 위와 같은 동작은 하드웨어적으로 수행됩니다. [중요]mov와

[Arm프로세서] AAPCS: Armv8: 브랜치와 복귀 명령어 - RET

Guillermo Austin Kim|2021년 8월 28일

마지막으로 AAPCS와 연관된 명령어로 RET 에 대해 알아봅시다. 다음은 Arm 스팩 문서에서 명시된 RET 명령어에 대한 내용입니다. C6.2.219 RET Return from subroutine branches unconditionally to an address in a register, with a hint that this is a subroutine return.[출처: DDI0487Fc_armv8_arm.pdf] Armv8 아키텍처에서 꼭 알아둬야 할 명령어가 RET입니다. RET는 Return from subroutine의 약자인데, 서브 루틴을 호출한 후 복귀할 주소가 담긴 X30 레지스터의 값을 PC로 로딩하는 역할을 수행합니다. 여기서 X30 레지스터의 값을 PC에 로딩하는 동

[Arm프로세서] AAPCS: Armv8: SP_ELn와 X30 레지스터란

Guillermo Austin Kim|2021년 7월 26일

Armv8 아키텍처에서 정의된 레지스터 중 SP_ELn와 X30 레지스터는 AAPCS와 연관된 핵심 레지스터입니다. 먼저 전체 레지스터 목록 중에서 SP_ELn와 X30 레지스터를 보겠습니다. 전체 레지스터 목록 중 SP_ELn와 X30 레지스터 다음 그림을 보면서 Armv8 아키텍처에서 정의된 레지스터 중 AAPCS와 연관된 레지스터를 알아봅시다. 그림 7.1 Armv8 아키텍처의 레지스터 목록 중 AAPCS와 연관된 레지스터(출처: ARMv8-A-Programmer-Guide.pdf) 위 그림은 Armv8 아키텍처에서 정의된 레지스터 목록입니다. 그림에서 빗금으로 표기된 박스를 보겠습니다. SP_EL1는 익셉션 레벨1에서 실행되는 SP 레지스터, SP_EL0은 익셉션 레벨0에서 실행되는 S

[Arm프로세서] AAPCS: Armv7: AAPCS와 C 코드 최적화

Guillermo Austin Kim|2021년 6월 28일

이제까지 다룬 Armv7 아키텍처에서 정의된 AAPCS를 배우고 나면 자연스럽게 다음과 같은 의문이 생길 가능성이 높습니다. "AAPCS와 관련된 내용을 실무에 어떻게 활용할 수 있을까?" 이번 장의 앞 부분에서 강조했지만, Armv7 아키텍처를 구성하는 다른 내용보다도 AAPCS는 실무에 활용될 내용이 많습니다. 특히 AAPCS는 최적화를 이야기할 때 항상 논의됩니다. 사실 개발자들이 주어진 스팩이나 시나리오에 맞게 기능을 구현한 후, 어느 정도 시점이 지나면 최적화 작업을 시작하는 경우가 많습니다. 작성된 코드를 최적화해야, 맡은 기능이 제대로 동작하는 경우가 있습니다. 가끔 소리가 끊기거나 화면이 부드럽게 출력되지 않는 상황입니다. 임베디드 시스템 개발자 관점으로는 성능을 최적화하면 전