ARM

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

Posts

173 posts

[Arm프로세서] AAPCS: Armv7: 서브 루틴(함수)로 분기될 때 실행되는 어셈블리 명령어

Guillermo Austin Kim|2021년 5월 26일

Armv7 아키텍처에 지원하는 레지스터들 중에 AAPCS와 연관된 레지스터가 SP, LR 레지스터이듯이, 수 많은 Armv7의 어셈블리 명령어 중에 AAPCS와 연관된 명령어가 있습니다. AAPCS와 연관된 명령어의 목록은 다음과 같습니다. 표 6.3 AAPCS와 관련된 명령어 위 표에서 보이는 각 명령어를 소개하고 예제 코드를 분석하면서, 명령어의 동작 원리를 배워봅시다. [참고]영어 단어를 처음 접할 때 사전을 열고 단어의 정의를 찾아 봅니다. 그런데 영어 단어의 정의만 알고는 단어를 제대로 안다고 볼 수 없습니다. 단어가 실제 어떻게 쓰이는지 알아야 그 단어를 제대로 안다고 볼 수 있습니다. 어셈블리 명령어도 마찬가지입니다. 배우려는 어셈블리 명령어가 어떤 함수나 레이블에서 사용되는지 알아야

[Arm프로세서] AAPCS: Armv7: 함수를 호출하기 위한 디자인

Guillermo Austin Kim|2021년 5월 24일

Armv7 아키텍처 관점으로 AAPCS를 보통 SP 레지스터와 LR 레지스터가 어떻게 바뀌는지 기준으로 설명합니다. 하지만 실제 거의 대부분 임베디드 혹은 시스템 개발자들은 SP와 LR 레지스터를 설정하는 어셈블리 코드를 입력하지 않습니다. 그 이유는 대부분 C 프로그래밍으로 코딩을 하기 때문입니다. SP와 LR 레지스터를 보면 낯설게 느끼기 마련입니다. 이번 절에서는 실제 함수를 호출하는 예시 코드와 함께, 함수를 호출하면 SP와 LR 레지스터가 어떻게 바뀌는지 알아보겠습니다. 함수를 호출될 때의 세부 동작 원리 파악하기 여러분이 다음과 같은 함수를 작성했다고 가정하겠습니다. 01 int add_func(int x, int y)02 {03 int result = x + y;04 prin

[Docker] M1 맥북에어로 라즈베리파이(ARM)용 docker image 만들어 보기

지훈현서|2021년 4월 22일

지난번에 간단 M1 애플실리콘의 맥북에어를 살펴보았습니다.애플이 과감히 인텔의 X86 CPU를 버리고 자체 ARM 기반 CPU를 만들었다는 아주 큰 사건이었죠. 30년도 더 전에 8086, 8088과 같은 CISC 머신 대비,68000, HP-UX 머신 등과 같은 RISC 기계를 다루어 본 적이 있는데,이번 인텔과 ARM의 가장 큰 차이 역시 이 CISC냐 RISC냐의 차이 인 것 같습니다. CPU 입장에서는 OP코드가 있어서 어떤 어떤 일을 수행하도록 되어 있고,이를 CPU 차원에서의 마이크로코드라 했던 것 같네요. 암튼 CISC인 경우 이 OP 코드가 알알이 꼼꼼이 무지 많고(시간이 지날 수록 더 많아지지요), 반대로 RISC 머신은아주 적은 세트의 OP 코드만 존재하지만, 동일한 기능을상단의 소프

[GDB] Arm(Armv7): C 코드와 어셈블리 코드를 동시에 디버깅하기

Guillermo Austin Kim|2021년 3월 31일

이번 포스트에서는 GDB를 사용해 디버깅을 하는 방법을 소개합니다. 소개된 내용을 참고하면 즐겁게 어셈블리 명령어를 디버깅할 수 있습니다. 환경: 라즈베리 파이4 GDB 실행 아래 명령어를 사용해 GDB를 Text User Interface 모드로 실행합니다. $ gdb -tui armv7_aapcs_proc 다음은 위 명령어로 실행한 화면입니다. 이제 바로 다음 명령어를 입력해 어셈블리 명령어 창을 보이도록 합시다. $ layout split 이번에는 'b main'와 'r' 명령어를 입력해 main() 함수에 브레이크 포인트를 걸고 프로그램을 실행합니다. 위 명령어를 입력하면 다음과 같은 화면이 보입니다. 위 화면과 같이 main() 함수의 첫 번째 라인에 브레