강좌 & 팁
안녕하세요.
오늘 공부할 내용은 ARM 명령어가 아닙니다!
실망하셨죠 ㅠㅠ?
실망 하시마시고!
ARM 명령어 만큼이나 중요한(?) 조건부 시행에 대하여 공부해 보겠습니다 ^^
조건부 실행
조건부 실행이란?
ARM 코어가 어떤 명령어를 실행할 지의 여부를 제어할 수 있음을 의미 합니다.
C 언어에
a > b,
b < a,
a > b ? c : d,
이런 연산자로 생각하시면 편합니다 ^^
ARM 명령어들은 ARM 코어가 그것을 실행할 지의 여부를 결정할 수 있는 조건 인자를 가지고 있습니다.
이것은 상태 플래그의 설정값을 기반으로 하고 있습니다.
명령어를 실행하기 전에 ARM 코어는 자신이 가지고 있는 조건 인자와 CPSR의 상태 플래그를 비교합니다.
조건 인자와 CPSR 상태 플래그가 일치하면?
명령어는 실행되고,
조건 인자와 CPSR 상태 플래그가 일치 하지 않는다면?
명령어는 실행되지 않습니다!
조건 인자는 명령어 니모닉 바로 뒤에 추가되어 명령어와 함께 인코드 됩니다.
쉽게 말해서 b 명령어 니모닉에 조건을 니모닉을 추가하되면
bne
라는 명령어로 인코드 됩니다 ^^
조건 니모닉 표
다음은 조건 니모닉 표 입니다.
니모닉 | 의미 | 상태 플래그 |
EQ | 같음 | Z (1) |
NE | 같지 않음 | z (0) |
CS or HS | 크거나 같음 (부호 없는 수 >= ) | C (1) |
CC or LO | 작음 (부호 없는 수 < ) | c (0) |
MI | 음수 | N (1) |
PL | 양수 또는 0 | n (0) |
VS | 오버플로 | V (1) |
VC | 오버플로 없음 | v (0) |
HI | 큼 (부호 없는 수 >) | C (1) or z (0) |
LS | 작거나 같음 (부호 없는 수 <= ) | c (0) or Z (1) |
GE | 크거나 작음 (부호 있는 수 >= ) | NV (11) or nv (00) |
LT | 작음 ( 부호 있는 수 < ) | Nv (10) or nV (01) |
GT
| 큼 (부호 있는 수 > ) | z (0), NV (11) or nv (00) |
LE | 작거나 같음(부호 없는 <= ) | Z (1), Nv (10) or nV (01) |
AL | Any | 항상(대개 생략됨) |
ARM 명령어에 조건 니모닉을 추가하면 새로운 명령어(?)가 탄생합니다!!
그리고 그 명령을 이용하여 ARM 코어의 흐름을 제어할 수 있습니다!
"고로 내가 원하는 프로그램을 만들수 있다!?"가 요점이겠죠!!?
앞으로?
아.. 맨붕입니다!!
뒤로가기 버튼이.. 너무 야속하네요 ㅠㅠ
한참 쓴 글이 지워져 버렸습니다ㅠㅠ!
여러분들도 일을 한번에 하나씩만 하세요 ㅠㅠ
다음글에서는 니모닉 조건을 이용하여 프로그램을 만들어서 공부해 보겠습니다 ^^