ARM
Posts
173 posts
오고 또 오는 애플의 자체 CPU 맥 이야기
블룸버그: 애플, 2020년부터 맥에 인텔 칩 대신 자사 칩을 사용할 계획이고 인텔 주식 급락해 (TICLE) 애플이 2020년부터 자사의 ARM을 이용한 맥을 만들고 인텔을 버린다는 이야기가 흘러나왔다고 합니다. 그리고 위와 같이 인텔의 주식이 떨어졌습니다. 사실 애플 입장에서 인텔은 애증의 대상이긴 합니다. 그 정도의 고성능 CPU를 공급하는 업체가 없다는 점도 있고 말이죠. 문제는 애플이 원하는 각종 칩셋 컨스텀을 인텔이 안 해준다는 점 입니다. 인텔이 제조사마다 뭘 어찌 따로 제작해주는 쪽이 적고-그래도 애플은 상당히 조정해주는 -_-;- 애플 입장에서는 이게 자사가 만들려는 제품들의 컨셉을 인텔이 고정시키는 것으로 간주할 것이 큽니다. 물론 예전이라면 압살이 되는 인텔의
arm instruction(명령어) - ldr
그럼 ldr 명령어의 정의에 대해서 같이 배워볼까요? LDR 명령어는 메모리에서 워드를 레지스터로 읽어 드리는 동작입니다. 자 그럼 아래 명령어를 예를 들어 같이 볼까요? 참고로 R1은 0xD2FB0000라고 하겠습니다.ldr r0, [r1] 그런데 0xD2FB0000메모리 주소에는 00000001란 값이 있다고 가정할께요.메모리주소 값NSD:D2FB0000|>00000001 C50F6000 00000004 40400040 “ldr r0, [r1]” 명령어가 수행되면 r0은 0000000으로 업데이트 됩니다. r1(0xD2FB0000)이 갖고 있는 메모리 값을 r0에 로딩하는 동작이죠. 그럼 아래와 같은 명령어가 실행되면 어떻게 업데이트 될까요?ldr r0, [r1,#0x4] r1에서
arm instruction(명령어) - push & 스택 푸쉬
push & 스택 푸쉬리눅스 커널 함수를 어셈블리 코드로 열어보면 바로 push란 명령어가 눈에 보입니다. 그럼 정말 맞는지 샘플 코드를 볼까요? 아래 코드는 리눅스 커널 핵심 함수입니다. 각 함수에서 가장 먼저 실행되는 명령어가 push죠.NSR:C0FF413C|__schedule: push {r4-r11,r14}NSR:C0FF4140| add r11,r13,#0x20 ; r11,r13,#32NSR:C0FF4144| ldr r3,0xC0FF4948 NSR:C017B0C4|handle_irq_event_percpu: push {r0-r2,r4-r11,r14}NSR:C017B0C8|
[라즈베리파이] 인터럽트 백터 어셈블리 코드 및 동작 분석
인터럽트가 발생하면 __irq_svc 벡터로 점프합니다. 물론 해당 프로세스는 하던 일을 멈출 수 밖에 없는데요.그럼 인터럽트 벡터에서 어떤 동작을 하는 지 어셈블리 코드를 분석하겠습니다. #__irq_svc 코드 리뷰[1]: 스택 공간을 0x4C 바이트만큼 확보합니다. [2]--[3]: 현재 실행 중인 레지스터 R0부터 R14, PC까지 스택에 푸쉬합니다. [4]: 0x80705398 메모리 공간에 있는 메모리 덤프 0x80c089ac를 로딩합니다. 0x80c089ac는 handle_arch_irq란 함수 포인터 역할을 하는 변수인데 이 변수에는 gic_handle_irq가 지정되어 있습니다.crash> p -x handle_arch_irqhandle_arch_irq = $3 = 0xc01



