cbnz 명령어는 Compare Branch None-zero의 약자입니다.
명령어의 이름 그대로 레지스터의 값이 0이 아닌 경우, 지정된 주소로 브랜치하는 명령어입니다.
아래 코드를 봅시다.
01 and x2,x1,#0x3F ; x2,x1,#63
02 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 코드로 다음고 같이 표현할 수 있겠네요.
---
x2 = x1 & 0x3f;
if (x2)
b 0xFFFFFF8008083728 ; b work_pending
---
'시스템 소프트웨어 개발을 위한 Arm 아키텍처의 구조와 원리 > 4장: 어셈블리 명령어' 카테고리의 다른 글
[ARM프로세서] 'csel' 명령어 (0) | 2023.06.10 |
---|---|
[ARM] 'yield' 명령어 (0) | 2023.06.10 |
[ARM] 어셈블리 명령어란 (0) | 2023.06.10 |
[ARM] ARM 아키텍처의 주요 개념: 어셈블리 명령어 (0) | 2023.06.10 |
arm instruction(명령어) - ldr (0) | 2023.06.10 |