CBZ and CBNZ

TRACE32
Admin (토론 | 기여) 사용자의 2015년 5월 8일 (금) 11:11 판

이동: 둘러보기, 검색

Thumb-II 명령어에서만 사용되어 익숙하지 않은,

CBZ(Compare and Branch on Zero) 와 CBNZ(Compare and Branch on Non-Zero) 명령에 대해 알아보겠습니다.

 

 

CBZ : Compare and Branch on Zero

CBZ 명령은 "CBZ Rn, label" 과 같은 문법 구조를 가집니다.

Rn의 값이 "0x0"이면 label로 분기하고,

Rn의 값이 "0x0"이 아니면, 다음 번지로 진행합니다.

자세한 것은 아래의 예를 통해 확인해 보시기 바랍니다.

 

CBZ 명령으로 비교한 레지스터 값이 0x0이 아닌 경우

아래의 "CBZ R1, 0x08000E56" 의 명령을 수행하는 시점에서, R1의 값은 0xA입니다.

결과적으로 R1!=0x0 이므로 분기 명령이 수행되지 않고, 다음 번지인 0x0800_0E50 으로 진행하게 됩니다.

 

실행 전 :

 

실행 후 :

 

 

CBZ 명령으로 비교한 레지스터 값이 0x0인 경우

아래의 "CBZ R1, 0x08000E56" 의 명령을 수행하는 시점에서, R1의 값은 0x0입니다.

결과적으로 R1==0x0 이므로 0x0800_0E56번지로 분기 명령이 수행됩니다.

 

실행 전 :

 

실행 후 :

 

 

 

CBNZ : Compare and Branch on Non-zero