ARM asssembler질문좀 드립니다.

빈즈파덜 2014.08.05 16:29 조회 수 : 2392

안녕하세요~


ARM어셈블러를 공부하고 실제로 어떻게 되어있는지 알아볼려는데요...


책에서 이해한걸 바로 적용을 할려니 이해가 안되는 부분이 있어서 질문좀 드립니다...


너무 쉬운 코드인데 이해를 못해서 조금 부끄럽네요..


ARM Assembler공부를 해볼려고 아래의 C코드를 so 라이브러리 형태로 빌드한후에 해당 so파일을 IDA라는 disassembler툴로 열어보았습니다.

코드는 아래와 같습니다.


* C코드

void Java_org_androidtown_thread_SampleThreadActivity_hello(JNIEnv *env, jobject thiz)
{
__android_log_print(ANDROID_LOG_ERROR, "Hello", "Hello Jni World %s : %d", __FILE__, __LINE__);
}


* ASM코드

.text:00000C0C PUSH {R0-R2,LR}
.text:00000C0E MOVS R0, #8
.text:00000C10 LDR R1, =(aHello - 0xC1A)
.text:00000C12 LDR R2, =(aHelloJniWorldS - 0xC1E)
.text:00000C14 LDR R3, =(aJniHello_c - 0xC20)
.text:00000C16 ADD R1, PC ; "Hello"
.text:00000C18 STR R0, [SP,#0x10+var_10]
.text:00000C1A ADD R2, PC ; "Hello Jni World %s : %d"
.text:00000C1C ADD R3, PC ; "jni/hello.c"

.text:00000C1E MOVS R0, #6
.text:00000C20 BLX __android_log_print
.text:00000C24 POP {R1-R3,PC}


위의 어셈코드에서 R1 ~ R3레지스터에 Argument값을 넣어서 __android_log_print 함수를 호출하는 과정인데요


1. ADD R1, PC ---> 이 코드가 이해가 되질 않습니다. PC값을 더해서 R1에 또 왜 넣는건지?

R2, R3도 마찬가지로 밑에 연산이 들어갑니다.


2. MOVS R0, #6 ---> 이 코드의 의미를 잘 모르겠네요...R0레지스터에 왜 6을 넣고 CPSR을 업데이트 하라는건지?


혹시 아시는분 있으시면 답변 좀 부탁드립니다.

번호 제목 글쓴이 날짜 조회 수
공지 [공지] 프로그래밍 관련 Q&A 게시판 입니다. woos 2016.04.09 22269
438 리눅스 커널 내부구조 소스 키보드 LED예제중 에러문제 천하무적주석 2014.12.11 1827
437 TX timestamp 관련 질문 정재훈 2014.11.04 2218
436 ioremap 관련해서 질문드립니다. [1] ysh 2014.10.29 2520
435 안녕하세요. 쓰레드에 관련하여 질문이 있습니다. 송창인 2014.10.22 1618
434 리눅스에서 지원하는 priority inheritance futex 에 대해서 질문입니다. CVE 2014.10.13 2327
433 mmap하여 read,write에 관한 질문입니다. [1] ysh 2014.10.08 2219
432 NAND ERASE 할 때 BLOCK 단위로 지우지 않는 방법 있을까요 ? [1] 최고운 2014.10.02 1813
431 atomic_read, atomic_add 시 interrupt disable, restore 가 필요한지.. [4] YYS 2014.10.02 3848
430 32bit 운영체제 resistor가 double형 변수처리하는 방법 구자경 2014.09.25 1576
429 안드로이드 포팅 질문드려요. [1] shepherd44 2014.09.18 2021
428 compressed/head.s 에서 LC0: 코드 관련 [1] erasmooth 2014.09.17 1853
427 "코드로 알아보는 ARM 리눅스 커널" 책에서...(초판 2쇄) erasmooth 2014.09.17 2314
426 boot.bin 파일을 부팅하는 usb를 만들고 싶습니다. 마고 2014.09.16 1836
425 리눅스에서 local APIC 타이머 레지스터 사용 질문드립니다. it876 2014.09.15 2108
424 __mmap_switched 레이블 전후로 PIC 에서 절대주소로 전환되는 원리 [1] erasmooth 2014.09.12 1880
423 qemu에 커널을 올릴 때 에러가 발생합니다. [3] ysh 2014.09.10 2172
422 시스템콜 대해서 질문좀 드려봅니다. [6] 장비익덕 2014.08.14 3979
» ARM asssembler질문좀 드립니다. [3] 빈즈파덜 2014.08.05 2392
420 CPU가 현재 실행중인 PID값 받아오는거 질문드립니다. [2] file 이런Linux 2014.07.15 9532
419 linux kernel governor(onDemand) 질문입니다. hy 2014.07.10 1934
XE Login