Arm Linux Kernel Hacks

rousalome.egloos.com

포토로그 Kernel Crash


통계 위젯 (화이트)

065
557
421925


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

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:
http://www-mdp.eng.cam.ac.uk/web/library/enginfo/mdp_micro/lecture4/lecture4-3-3.html



.

덧글

댓글 입력 영역