ARMV8

포스트: 45|조회수: 0|ARTIFACT
Items

Posts

45 posts

[ARMv8] cbnz 명령어

Guillermo Austin Kim|2020년 10월 5일

cbnz 명령어는 Compare Branch None-zero의 약자입니다.명령어의 이름 그대로 레지스터의 값이 0이 아닌 경우, 지정된 주소로 브랜치하는 명령어입니다. 아래 코드를 봅시다. 01 and x2,x1,#0x3F ; x2,x1,#6302 cbnz x2,0xFFFFFF8008083728 ; x2,work_pending 01번째 줄 코드를 봅시다.x1이 0x1이면 x2는 0x1, x1이 0x3f이면 x2는 0x3f가 됩니다. 이 경우 x2는 0x1 혹은 0x3f이므로 0이 아니니, non-zero가 됩니다. 그 다음 02번째 줄을 실행하면 work_pending 레이블의 시작 주소인 0xFFFFFF8008083728로 브랜치합니다. 01~02 번째 줄은 C 코드로

[ARM] 함수 호출 규약(Calling Convention)이란

Guillermo Austin Kim|2020년 9월 27일

호출 규약(Calling Convention)이란 무엇일까요? 어떤 함수를 호출했을 때 서브 루틴이 자신을 호출하는 함수로부터 인자를 어떤 방식으로 받아 결과를 반환하는지에 대한 규약입니다. x86, RISC-V와 같은 CPU 아키텍처마다 함수 호출 규약(Calling Convention)을 정의하는데, ARM 프로세서에서는 이를 AAPCS(Procedure Call Standard for ARM Architecture)라고 명시합니다. 앞으로, AAPCS를 함수 호출 규약이라고 명시하겠습니다. 연산을 수행하는 ARM 어셈블리 명령어에서 레지스터는 연산의 결과를 임시로 저장하는 역할에 그칩니다. 그래서 각각 레지스터의 역할을 세세하게 배울 필요가 없는데요. 함수 호출 규약을 배울 때는 다릅니다. 그것은 다

[ARM] ARMv8 아키텍처의 레지스터

Guillermo Austin Kim|2020년 9월 25일

이번에는 ARMv8 아키텍처의 64비트 명령어 기준으로 레지스터 세트에 대해 알아봅시다. 다음은 ARM 스팩 문서에서 발췌한 내용입니다. 출처: DDI0487A_g_armv8_arm.pdfB1.2.1 Registers in AArch64 state In the AArch64 application level view, an ARM processing element has:R0-R30 31 general-purpose registers, R0 to R30. Each register can be accessed as: • A 64-bit general-purpose register named X0 to X30. • A 32-bit general-purpose register named W0 to W30.

[ARMv8] 익셉션 클래스가 구현된 코드 분석하기: 리눅스 커널

Guillermo Austin Kim|2020년 9월 23일

[ARMv8] 익셉션 클래스가 구현된 코드 분석하기: 리눅스 커널 이번 포스트에서는 ARMv8 에서 소개된 익셉션 클래스가 ARMv8 기반의 리눅스 커널에서 어떤 방식으로 구현됐는지 분석합니다. # 익셉션 클래스 소개 소스를 분석하기 전에 ARMv8의 익셉션 클래스를 Q/A 형식으로 소개합니다. Q: 익셉션 클래스란 무엇인가? 익셉션 클래스는 익셉션이 발생한 세부 원인(Cause)를 나타내며 Synchronous 유형의 익셉션이 발생했을 때 익셉션 클래스를 읽을 수 있습니다. Q: 익셉션 클래스는 언제 어떻게 읽을 수 있나? 익셉션 클래스는 Synchronous 유형의 익셉션이 발생했을 때 익셉션 신드롬 레지스터(Exception Syndrom Register)를 통해 읽습니다.익셉션 클래스는