본문 바로가기

시스템 소프트웨어 개발을 위한 Arm 아키텍처의 구조와 원리/4장: 어셈블리 명령어

[Arm] ASR(Arithmetic Shift Right) 명령어

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:
 
 
 
.