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이 워드의 주소를 나타낸다.


+ Recent posts