"CBZ and CBNZ"의 두 판 사이의 차이

TRACE32
이동: 둘러보기, 검색
11번째 줄: 11번째 줄:
 
<p><strong>CBZ 명령으로 비교한 레지스터 값이 0x0이 아닌 경우</strong></p>
 
<p><strong>CBZ 명령으로 비교한 레지스터 값이 0x0이 아닌 경우</strong></p>
 
<p>아래의 "CBZ <strong><span style="color: #ff9900;">R1</span></strong>, 0x08000E56" 의 명령을 수행하는 시점에서, R1의 값은 0xA입니다.</p>
 
<p>아래의 "CBZ <strong><span style="color: #ff9900;">R1</span></strong>, 0x08000E56" 의 명령을 수행하는 시점에서, R1의 값은 0xA입니다.</p>
<p>결과적으로 <span style="color: #ff9900;"><strong>R1!=0x0</strong></span> 이므로 분기 명령이 수행되지 않고, 다음 번지인 0x0800_0E50 으로 진행하게 됩니다.</p>
+
<p>결과적으로 <span style="color: #ff9900;"><strong>R1!=0x0</strong></span> 이므로 <span style="color: #ff9900;"><strong>분기 명령이 수행되지 않고</strong></span>, 다음 번지인 0x0800_0E50 으로 진행하게 됩니다.</p>
 
<p>&nbsp;</p>
 
<p>&nbsp;</p>
<p>실행 전 :</p>
+
<p style="padding-left: 30px;">실행 전 :</p>
<p><img src="/data/wiki/2015-05-08/1431049364.jpg" alt="" /></p>
+
<p style="padding-left: 30px;"><img src="/data/wiki/2015-05-08/1431049364.jpg" alt="" /></p>
 
<p>&nbsp;</p>
 
<p>&nbsp;</p>
<p>실행 후 :</p>
+
<p style="padding-left: 30px;">실행 후 :</p>
<p><img src="/data/wiki/2015-05-08/1431049373.jpg" alt="" /></p>
+
<p style="padding-left: 30px;"><img src="/data/wiki/2015-05-08/1431049373.jpg" alt="" /></p>
 
<p>&nbsp;</p>
 
<p>&nbsp;</p>
 
<p>&nbsp;</p>
 
<p>&nbsp;</p>
 
<p><strong><strong>CBZ 명령으로 비교한 레지스터 값이 0x0인 경우</strong></strong></p>
 
<p><strong><strong>CBZ 명령으로 비교한 레지스터 값이 0x0인 경우</strong></strong></p>
 
<p>아래의 "CBZ <span style="color: #ff9900;"><strong>R1</strong></span>, 0x08000E56" 의 명령을 수행하는 시점에서, R1의 값은 0x0입니다.</p>
 
<p>아래의 "CBZ <span style="color: #ff9900;"><strong>R1</strong></span>, 0x08000E56" 의 명령을 수행하는 시점에서, R1의 값은 0x0입니다.</p>
<p>결과적으로 <span style="color: #ff9900;"><strong>R1==0x0</strong></span> 이므로 0x0800_0E56번지로 분기 명령이 수행됩니다.</p>
+
<p>결과적으로 <span style="color: #ff9900;"><strong>R1==0x0</strong></span> 이므로 0x0800_0E56번지로 <span style="color: #ff9900;"><strong>분기 명령이 수행</strong></span>됩니다.</p>
 
<p>&nbsp;</p>
 
<p>&nbsp;</p>
<p>실행 전 :</p>
+
<p style="padding-left: 30px;">실행 전 :</p>
<p><img src="/data/wiki/2015-05-08/1431049378.jpg" alt="" /></p>
+
<p style="padding-left: 30px;"><img src="/data/wiki/2015-05-08/1431049378.jpg" alt="" /></p>
 
<p>&nbsp;</p>
 
<p>&nbsp;</p>
<p>실행 후 :</p>
+
<p style="padding-left: 30px;">실행 후 :</p>
<p><img src="/data/wiki/2015-05-08/1431050984.jpg" alt="" /></p>
+
<p style="padding-left: 30px;"><img src="/data/wiki/2015-05-08/1431050984.jpg" alt="" /></p>
 
<p>&nbsp;</p>
 
<p>&nbsp;</p>
 
<p>&nbsp;</p>
 
<p>&nbsp;</p>
 
<p>&nbsp;</p>
 
<p>&nbsp;</p>
 
<p>CBNZ : Compare and Branch on Non-zero</p>
 
<p>CBNZ : Compare and Branch on Non-zero</p>
<p>&nbsp;</p>
 
 
<p>&nbsp;</p>
 
<p>&nbsp;</p>

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