[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는 이진수로는 ..
[ARM프로세서] 'csel' 명령어
이번에는 ARMv8 아키텍처에서 제공하는 명령어 중에 C 언어의 3항 연산자가 연상되는 csel를 알아봅시다. 다음은 분석하려는 코드입니다. 115| printk(!error ? "okay\n" : "failed\n"); MX:FFFFFF8009BB2404|F0FFE748 adrp x8,0xFFFFFF800989D000 MX:FFFFFF8009BB2408|F0FFE289 adrp x9,0xFFFFFF8009805000 MX:FFFFFF8009BB240C|91026108 add x8,x8,#0x98 ; x8,x8,#152 MX:FFFFFF8009BB2410|91192529 add x9,x9,#0x649 ; x9,x9,#1609 MX:FFFFFF8009BB2414|7100027F cmp w19,#0x0 ; ..
arm instruction(명령어) - push & 스택 푸쉬
push & 스택 푸쉬 리눅스 커널 함수를 어셈블리 코드로 열어보면 바로 push란 명령어가 눈에 보입니다. 그럼 정말 맞는지 샘플 코드를 볼까요? 아래 코드는 리눅스 커널 핵심 함수입니다. 각 함수에서 가장 먼저 실행되는 명령어가 push죠. NSR:C0FF413C|__schedule: push {r4-r11,r14} NSR:C0FF4140| add r11,r13,#0x20 ; r11,r13,#32 NSR:C0FF4144| ldr r3,0xC0FF4948 NSR:C017B0C4|handle_irq_event_percpu: push {r0-r2,r4-r11,r14} NSR:C017B0C8| cpy r3,r13 ; r3,sp NSR:C017B0CC| ldr r6,[r0,#0x4] 그럼 이 push란 명령어..