from palette import colorful_colors

[마이크로프로세서] C언어와 ARM 명령어 비교 예시 본문

EE 학부과목/마이크로프로세서

[마이크로프로세서] C언어와 ARM 명령어 비교 예시

colorful-palette 2023. 4. 19. 18:57

Arm 명령어에 대해 알고 싶다면 아래 링크 클릭

https://colorful-palette.tistory.com/48

 

예시1: Register indirect addressing mode (원하는 주소에서 값을 넣고 포인터를 상승시키는 예시)

→ 0x12456주소에 25를 넣고 포인터 상승시키기

 

<C>

#include <stdio.h>
int main(){

    char * ourPointer;
    ourPointer = (char*) 0x12456 // ourPointer를 1byte char형을 가리키는 포인터로 선언했다.
    *ourPointer = 25
    ourPointer ++
    
return 0;
}

 

<ARM Assembly>

LDR R2, = 0x12456
MOV R0, #25
STRB R0, [R2]
ADD R2, R2, #1

 

 

예시2: 주어진 배열에서 MAX값 찾기

→ count가 끝날때까지 [69, 87, 96, 45, 75]에서 최대값 반환하기

 

<C>

#include <stdio.h>
int main(){

    unsigned long myData[5] = {69, 87, 96, 45, 75} // 배열 선언
    unsigned long count = 5;
    unsigned long max = 0;
    unsigned long next;
    unsigned long *pointer = myData // 배열의 첫 주소를 가리키는 포인터 선언
    
    do{
    	next = *pointer;
        if(max < next) 
        	max = next;
        pointer ++;
        count --;
    }while(count != 0)
return 0;
}

 

 

<ARM Assembly>

        count RN R0
        MAX RN R1
        pointer RN R2
        next RN R3

        AREA PROG_4_1_D, DATA, READONLY
        MYDATA DCD 69, 87, 96, 45, 75
        AREA PROG_4_1_D, CODE, READONLY
        ENTRY

        MOV count, #5
        MOV MAX, #0
        LDR pointer = mydata			; pointer에는 mydata의 첫 주소를 가지고 온다. 
AGain   LDR NEXT, [POINTER]
        CMP MAX, NEXT
        BHS CTNU				; MAX >= NEXT면 CTNU로 이동
        MOV MAX, NEXT				; MAX <  NEXT면 NEXT값을 MAX로 이동 
CTNU    ADD pointer, pointer, #4
		SUBS count, count, #1
        BNE AGAIN				; count가 끝날때까지 반복
HERE    B HERE
	    END