16진수인 0x7fffffff는 이진수로는 아래와 같다.
0111 1111 1111 1111 1111 1111 1111 1111 (2진수)
2147483647 (10진수)
(static int) __boot_cpu_mode = 2147483647 = 0x7FFFFFFF
0x7fffffff를 'LSR 4'로 수행하면;
0111 1111 1111 1111 1111 1111 1111 1111(0x7FFF FFFF, 2,147,483,647)
( >> 4)
0000 0111 1111 1111 1111 1111 1111 1111(0x07FF FFFF, 134,217,727)
결과는 0x07FF_FFFF, 10진수로는 134,217,727이다.
이제 음수 값을 확인하자.
16진수인 0x80000001는 이진수로는 아래와 같다.
1000 0000 0000 0000 0000 0000 0000 0001 (2진수)
2147483647 (10진수)
(static int) __boot_cpu_mode = -2147483647 = 0x80000001
가장 왼쪽에 있는 MSB 비트가 1이므로 음수를 표현한다.
0x80000001를 'LSR 4'로 수행하면;
1000 0000 0000 0000 0000 0000 0000 0001(0x8000 0001, -2,147,483,647)
( >> 4)
0000 1000 0000 0000 0000 0000 0000 0000(0x0800 0000, 134,217,728)
결과가 양수인 134,217,728이다.
-2,147,483,647 를 'LSR 4' 한 결과가 -134,217,727로 나오게 하려면 어떻게 해야 할까?
Arithmetic Shift Right 명령어를 실행하자.
1000 0000 0000 0000 0000 0000 0000 0001(0x8000 0001, -2,147,483,647)
( >>> 4)
1111 1000 0000 0000 0000 0000 0000 0000(0xF800 0001, -134217727)
실행 결과는 아래와 같다.
(static int) __boot_cpu_mode = -134217727 = 0xF8000001
link:
.
'시스템 소프트웨어 개발을 위한 Arm 아키텍처의 구조와 원리 > 4장: 어셈블리 명령어' 카테고리의 다른 글
[Arm64] good github to practice Arm assembly instruction (0) | 2023.09.08 |
---|---|
[Armv8] 전체 어셈블리 명령어 타입 - Tech Tree (0) | 2023.06.10 |
[ARM프로세서] 'csel' 명령어 (0) | 2023.06.10 |
[ARM] 'yield' 명령어 (0) | 2023.06.10 |
[ARMv8] cbnz 명령어 (0) | 2023.06.10 |