2.7 판단을 위한 명령어
CMP register1, register2
BEQ L1
register1과 register2가 같으면 L1으로 분기
CMP register1, register2
BNE L1
register1과 register2가 다르면 L1으로 분기
BEQ와 BNE 두 명령어를 조건부 분기라 부른다.
예제
f,g,h,i,j 가 r0부터 r4에 해당한다고 하면
if( i == j ) f = g + h;
else f = g - h;
CMP r3, r4
BEQ, if
SUB r0, r1, r2
B Exit
if: ADD r0, r1, r2
B Exit
Exit:
-------------------
CMP r3, r4
BEQ, Else
ADD r0, r1, r2
B Exit
Else: SUB r0, r1, r2
Exit:
의문사항
1. 레지스터 스필링이란 무엇인가?
자주 사용하지 않는 변수들을 메모리에 넣는 일
2. ARM에서 스택은 어디에 존재하나? 스택을 위한 메모리는 어디에 존재하나?
3. 바이트 주소지정방식과 워드 주소지정방식의 차이는?
ARM은 바이트 주소지정방식을 사용한다.
바이트 주소지정방식은 주소 한 개가 하나의 바이트를 나타내는 것, 워드 주소지정방식은 주소 한 개가 하나의 워드를 나타내는 것.
따라서 바이트 주소지정방식에서는 워드 배열의 각 원소의 주소를 구할 때 인덱스 * 4를 해야한다.
워드 주소를 나타낼 때, 빅 엔디안과 리틀 엔디안 방식이 있다.
빅 엔디안 : 최상위 바이트 주소를 워드 주소로 사용하는 것
리틀 엔디안 : 최하위 바이트 주소를 워드 주소로 사용하는 것
예를 들어, 0x12345678의 값이 있을 때 빅 엔디안일 경우 0x12가 워드의 주소를 나타내고, 리틀 엔디안일 경우 0x78이 워드의 주소를 나타낸다.