[유용한 ARM 분기 명령어와 숫자 라벨 이용법]


/** 여기서 b는 back이며 숫자 label이 앞부분에 있음을 나타낸다.
그리고 f라고 하면 forward이며 숫자 라벨이 뒷부분에 있음을 나타낸다. **/


[EX1]
;이 명령은 r1의 값이 5면 LABEL로 가서 반복하고, 아니면 빠져 나간다.

LABEL
   cmp r1, #5
   beq LABEL

이는 ADS나 SDT에서 다음과 같이 다시 쓸 수 있다.
0
   cmp r1, #5
   beq %b0

그리고 Linux GCC에서는 다음과 같이 쓸 수 있다.
0:
   cmp r1, #5
   beq 0b


 
[EX2]
;이 명령은 r1의 값이 5가 아니면 LABEL로 가서 반복하고, 5면 빠져 나간다.

LABEL
   cmp r1, #5
   bne LABEL

이는 ADS나 SDT에서 다음과 같이 다시 쓸 수 있다.
0
   cmp r1, #5
   bne %b0

그리고 Linux GCC에서는 다음과 같이 쓸 수 있다.
0:
   cmp r1, #5
   bne 0b


 
[EX3]
;이 명령은 r1의 8번 비트가 ‘0’이면 LABEL로 가서 다시 반복하고, ‘1’이면 빠져 나간다.
LABEL
   tst r1, #0x00000100
   beq LABEL

이는 ADS나 SDT에서 다음과 같이 다시 쓸 수 있다.
0
   tst r1, #0x00000100
   beq %b0

그리고 Linux GCC에서는 다음과 같이 쓸 수 있다.
0:
   tst r1, #0x00000100
   beq 0b


 
[EX4]
;이 명령은 r0의 8번 비트가 ‘1’이면 LABEL로 가서 반복하고, ‘0’이면 빠져 나간다.
LABEL
   tst r1, #0x00000100
   bne LABEL

이는 ADS나 SDT에서 다음과 같이 다시 쓸 수 있다.
0
   tst r1, #0x00000100
   bne %b0

그리고 Linux GCC에서는 다음과 같이 쓸 수 있다.
0:
   tst r1, #0x00000100
   bne 0b

[EX5]
LABEL
 tst r0, #0xff
 beq LABEL
 
; r0의 하위 8비트 값이 하나라도 0이면 LABEL로 되돌아가 반복하고
; r0의 하위 8비트 값이 모두 1이면 빠져나간다

[EX6]
LABEL
 tst r0, #&0x03
 beq LABEL

; r0의 하위 0번, 1번 비트 값이 하나라도 0이면 LABEL로 되돌아가 반복하고
; r0의 하위 0번, 1번 비트 값이 모두 1이면 빠져나간다



출처 : http://www.aesop.or.kr/

'Embedded > Softwares' 카테고리의 다른 글

유용한 ARM 어셈블리 (if, for, do_while, switch)  (0) 2010.05.05
유용한 ARM 어셈블리 매크로  (0) 2010.05.05
모듈명령, diff, patch  (0) 2009.06.08
minicom  (0) 2009.06.03
mobm 이 뭔가요?  (0) 2009.06.03

WRITTEN BY
RootFriend
개인적으로... 나쁜 기억력에 도움되라고 만들게되었습니다.

,