태그 : arm 요약보기전체보기목록닫기
- [Arm프로세서] AAPCS: Armv8: 브랜치와 복귀 명령어 - bl (0)2021.08.14
- [Arm프로세서] AAPCS: Armv8: 스택과 관련된 명령어 - ldp(0)2021.08.12
- [Arm프로세서] AAPCS: Armv8: 스택과 관련된 명령어 - sub(0)2021.08.02
- [Arm프로세서] AAPCS: Armv8: 스택과 관련된 명령어 - stp (0)2021.07.27
- [Arm프로세서] AAPCS: Armv8: 서브 루틴(함수)로 분기될 때 실행되는 어셈블리 명령어(0)2021.07.27
- [Arm프로세서] AAPCS: Armv8: 함수를 호출하기 위한 디자인(0)2021.07.26
- [Arm프로세서] AAPCS: Armv8: SP_ELn와 X30 레지스터란(0)2021.07.26
- [Arm프로세서] AAPCS: Armv8 아키텍처에서 AAPCS 관련 레지스터(0)2021.07.13
- [Arm프로세서] AAPCS: Armv7: 매우 자주 호출되는 함수는 inline 키워드로 선언(0)2021.07.13
- [Arm프로세서] AAPCS: Armv7: 함수 반환형은 워드 단위로 지정(0)2021.07.06
- Armv8: 함수 호출 규약
- 2021/08/14 23:41
Arm 스팩 문서를 보면서 BL 명령어에 대해 알아봅시다.C6.2.33 BLBranch with Link branches to a PC-relative offset, setting the register X30 to PC+4. It provides a hint that this is a subroutine call.[출처] DDI0487Fc_armv8_...
- Armv8: 함수 호출 규약
- 2021/08/12 07:17
Armv7 아키텍처에서 push 명령어를 실행한 후 함수가 종료되기 직전에 반드시 실행되는 명령어가 pop입니다. 마찬가지로 Armv8 아키텍처에서 stp 명령어를 사용해 스택에 레지스터를 푸시한 후, 함수를 종료하기 직전에 실행되는 명령어는 ldp입니다. Arm 스팩 문서에서 ldp 명령어 분석하기이번에도 Arm 스팩 문서를 보면서 ldp 명...
- Armv8: 함수 호출 규약
- 2021/08/02 09:02
sub는 지정된 상수만큼 감소시키는 연산을 수행하는 명령어인데, stp 명령어 전 후로 'sub sp, sp, #16'와 같이 SP 레지스터의 값을 감소시키는 명령어를 볼 수 있습니다. 이 동작은 Armv7 아키텍처에서 배운 내용과 같으며, 다음과 같이 해석할 수 있습니다. “함수 내에 선언된 지역 변수를 사용하기 위해 스택 공간...
- Armv8: 함수 호출 규약
- 2021/07/27 08:10
SP 레지스터가 변경될 때 실행되는 명령어는 stp와 ltp입니다. 먼저 명령어의 정의를 소개하고, 예제 코드를 분석하면서 명령어의 동작 원리에 대해 알아봅시다.Armv7 아키텍처에서 SP 레지스터가 변경되면서 프로세스의 스택 공간에 레지스터를 푸시하는 명령어는 'push'입니다. Armv8 아키텍처에서는 push 대신에 stp 명령어를 사용해 push...
- Armv8: 함수 호출 규약
- 2021/07/27 08:09
arm 아키텍처의 세부 동작을 제대로 파악하려면, 해당 Arm 아키텍처에서 지원하는 어셈블리 명령어를 배워야 합니다. 이는 Armv8 아키텍처의 AAPCS64에도 마찬가지로 적용될 수 있습니다.이번 절에서는 Armv8 아키텍처의 AAPCS64와 연관된 명령어를 소개합니다.AAPCS와 연관된 명령어의 목록은 다음과 같습니다.표 7.4 Armv8 아키텍처에...
- Armv8: 함수 호출 규약
- 2021/07/26 14:55
이번 절에서는 AAPCS64 기준으로, 실제 함수를 호출하는 예시 코드와 함께, 함수를 호출하면 SP와 X30 레지스터가 어떻게 바뀌는지 알아보겠습니다.함수가 호출될 때의 세부 동작 원리 파악하기여러분이 다음과 같은 함수를 작성했다고 가정하겠습니다.01 int add_func(int x, int y)02 {03 int result...
- Armv7: Calling Convention
- 2021/07/26 14:54
Armv8 아키텍처에서 정의된 레지스터 중 SP_ELn와 X30 레지스터는 AAPCS와 연관된 핵심 레지스터입니다. 먼저 전체 레지스터 목록 중에서 SP_ELn와 X30 레지스터를 보겠습니다.전체 레지스터 목록 중 SP_ELn와 X30 레지스터다음 그림을 보면서 Armv8 아키텍처에서 정의된 레지스터 중 AAPCS와 연관된 레지스터를 알아봅시다.&nbs...
- Armv7: Calling Convention
- 2021/07/13 06:39
Armv8 아키텍처의 AAPCS를 구성하는 주요 개념은 Armv7 아키텍처와 거의 유사합니다. 6장에서 다룬 내용을 요약하면 다음과 같습니다. * 서브 루틴을 호출하면 프로세스의 스택 공간에 레지스터를 푸시한다. * 'bl [주소]' 명령어를 실행해 서브 루틴으로 분기하면 Arm 프로세서는 &...
이번 장에서 서브 루틴을 호출하면 다음과 같은 동작을 수행한다고 배웠습니다. * R0~R3 레지스터에 함수의 인자를 저장 * 서브 루틴은 push와 pop 명령어를 사용해 링크 레지스터를 백업 * 서브 루틴에서 반환하는 값을 R0 레지스터에 저장&nbs...
- Armv7: Calling Convention
- 2021/07/06 06:21
함수를 반환하는 자료형은 워드 단위로 제한하는 것이 좋습니다. 워드형인 경우 반환값은 R0 레지스터에 저장하나, 데이터가 워드 범위를 벗어난 경우 R0와 R1레지스터에 반환값을 나눠서 처리하기 때문입니다.[정보]위에서 언급한 워드형이 무엇인지 알아봅시다. 워드(word)는 어셈블리 명령어로 연산 결과를 레지스터에 저장할 수 있는 데이터 단위입니다. 그렇...
최근 덧글