일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 슈퍼컴퓨터클러스터
- DenseDepth
- 3Dreconstruction
- 소프티어
- dfs
- 시뮬레이션
- 왕실의기사대결
- ICER
- ros
- 백준
- 코드트리
- 마이크로프로세서
- 수영대회결승전
- 루돌프의반란
- 삼성기출
- 이진탐색
- ISER
- 구현
- 토끼와 경주
- 마법의숲탐색
- 코드트리빵
- 순서대로방문하기
- BFS
- 싸움땅
- DP
- ARM
- 조합
- 포탑부수기
- Calibration
- 나무박멸
Archives
- Today
- Total
from palette import colorful_colors
[마이크로프로세서] C언어와 ARM 명령어 비교 예시 본문
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
'EE 학부과목 > 마이크로프로세서' 카테고리의 다른 글
[마이크로프로세서] C언어와 ARM 명령어 비교 예시2 (feat. GPIO) (0) | 2023.06.12 |
---|---|
[마이크로프로세서] ARM 명령어 모음 + 지시어, flag register (0) | 2023.04.19 |
[마이크로프로세서] Floating point(부동소수점) (0) | 2023.03.20 |
[컴퓨터구조] 22-2학기 수업 필기자료 (0) | 2023.03.16 |
[마이크로프로세서] 명령어와 CISC vs RISC (0) | 2023.03.07 |