"If-Then"의 두 판 사이의 차이

TRACE32
이동: 둘러보기, 검색
5번째 줄: 5번째 줄:
 
<p>x, y, z에는 T(Then) 혹은 E(Else)중 하나가 올 수 있으며, 있을 수도 있고 없을 수도 있습니다.</p>
 
<p>x, y, z에는 T(Then) 혹은 E(Else)중 하나가 올 수 있으며, 있을 수도 있고 없을 수도 있습니다.</p>
 
<p>&nbsp;</p>
 
<p>&nbsp;</p>
<p>예를 들어 아래와 같은 여러가지 조합이 나올 수 있다는 말씀입니다</p>
+
<p>예를 들어 아래와 같은 여러가지 조합이 생실 수 있다는 말입니다</p>
 
<p>IT : If-Then</p>
 
<p>IT : If-Then</p>
 
<p>ITT : If-Then-Then</p>
 
<p>ITT : If-Then-Then</p>
17번째 줄: 17번째 줄:
 
<p><img src="/data/wiki/2015-05-08/1431070742.jpg" alt="" /></p>
 
<p><img src="/data/wiki/2015-05-08/1431070742.jpg" alt="" /></p>
 
<p>&nbsp;</p>
 
<p>&nbsp;</p>
<p>그럼 몇가지 샘플을 통해서&nbsp;</p>
+
<p>그럼 몇가지 샘플을 통해서 If-Then 명령에 대해 본격적으로 알아보겠습니다.</p>
 +
<p>&nbsp;</p>
 +
<p>&nbsp;</p>
 +
<p>&nbsp;</p>
 +
<p>IT : If-Then 예제</p>
 +
<p>가장 기본적인 "If-Then" 으로 이루어진 예 입니다.</p>
 +
<p>이것을 제대로 이해하려면, "IT EQ" 명령 하나만 떼어 보지 말고,</p>
 +
<p>아래에 표시된 "CMP R2,#0x6F", "IT EQ", "MOVS R7,#0x8" 을 한번에 묶어서 살펴보아야 이해가 됩니다.</p>
 +
<p>자세한 것은 아래를 보시기 바랍니다.</p>
 +
<p>&nbsp;</p>
 +
<p>장면 1 :</p>
 +
<p>"IT EQ" 명령어 수행 전에, "CMP R2,#0x6F" 명령을 먼저 수행하게 됩니다.</p>
 +
<p>레지스터 창을 보면, 당시의 R2의 값은 0x64인 관계로,</p>
 +
<p>"CMP R2,#0x6F"는 <span style="color: #ff9900;">EQ(EQual)</span>가 성립되지 않아, "Z(Zero)" 플래그가 "0" 값을 가지게 됩니다.</p>
 +
<p><img src="/data/wiki/2015-05-09/1431158967.jpg" alt="" /></p>
 +
<p>&nbsp;</p>
 +
<p>장면 2 :</p>
 +
<p>결과적으로,</p>
 +
<p>"CMP R2,#0x6F", "IT EQ", "MOVS R7,#0x8" 이 3개의 명령은,</p>
 +
<p>"R2==0x6F이면, R7에 0x8값을 넣고,</p>
 +
<p>&nbsp;R2!=0x6F이면, R7값을 그대로 두어라" 라는 의미를 갖게 됩니다.</p>
 +
<p><img src="/data/wiki/2015-05-09/1431158498.jpg" alt="" /></p>
 +
<p>&nbsp;</p>
 +
<p>장면 3 :</p>
 +
<p>위에서 말한바와 같이 "IT EQ"에 해당하는 조건이 성립하지 않았으므로,</p>
 +
<p>"MOVS R7,#0x8" 명령이 수행되지 않아 R7값은 변동없이 원래의 값을 가지게 됩니다.</p>
 +
<p><img src="/data/wiki/2015-05-09/1431158502.jpg" alt="" /></p>
 +
<p>&nbsp;</p>
 +
<p>&nbsp;</p>
 +
<p>&nbsp;</p>
 +
<p>ITT : If-Then-Then 예제</p>
 +
<p>조금 복잡해진 If-Then-Then 예제입니다.</p>
 +
<p>&nbsp;</p>
 +
<p>&nbsp;</p>
 +
<p>&nbsp;</p>
 +
<p>&nbsp;</p>
 +
<p>&nbsp;</p>
 +
<p>&nbsp;</p>
 +
<p>&nbsp;</p>

2015년 5월 9일 (토) 17:15 판

이번엔, Cortex-M에서 사용하는 Thumb-II의 특이한 어셈블리 중 하나인 If-Then 에 대해서 살펴보겠습니다.

 

먼저 If-Then 명령의 문법은

"IT{x{y{z}}} cond" 와 같습니다.

x, y, z에는 T(Then) 혹은 E(Else)중 하나가 올 수 있으며, 있을 수도 있고 없을 수도 있습니다.

 

예를 들어 아래와 같은 여러가지 조합이 생실 수 있다는 말입니다

IT : If-Then

ITT : If-Then-Then

ITE : If-Then-Else

ITTT : If-Then-Then-Then

ITTE : If-Then-Then-Else

ITTTT : If-Then-Then-Then-Then

 

cond 에는 여러가지 조건 비교문이 올 수 있는데, 아래의 표를 참조하시기 바랍니다.

(STMicro의 PM0056 Cortex-M3 programming manual 에서 발췌)

 

그럼 몇가지 샘플을 통해서 If-Then 명령에 대해 본격적으로 알아보겠습니다.

 

 

 

IT : If-Then 예제

가장 기본적인 "If-Then" 으로 이루어진 예 입니다.

이것을 제대로 이해하려면, "IT EQ" 명령 하나만 떼어 보지 말고,

아래에 표시된 "CMP R2,#0x6F", "IT EQ", "MOVS R7,#0x8" 을 한번에 묶어서 살펴보아야 이해가 됩니다.

자세한 것은 아래를 보시기 바랍니다.

 

장면 1 :

"IT EQ" 명령어 수행 전에, "CMP R2,#0x6F" 명령을 먼저 수행하게 됩니다.

레지스터 창을 보면, 당시의 R2의 값은 0x64인 관계로,

"CMP R2,#0x6F"는 EQ(EQual)가 성립되지 않아, "Z(Zero)" 플래그가 "0" 값을 가지게 됩니다.

 

장면 2 :

결과적으로,

"CMP R2,#0x6F", "IT EQ", "MOVS R7,#0x8" 이 3개의 명령은,

"R2==0x6F이면, R7에 0x8값을 넣고,

 R2!=0x6F이면, R7값을 그대로 두어라" 라는 의미를 갖게 됩니다.

 

장면 3 :

위에서 말한바와 같이 "IT EQ"에 해당하는 조건이 성립하지 않았으므로,

"MOVS R7,#0x8" 명령이 수행되지 않아 R7값은 변동없이 원래의 값을 가지게 됩니다.

 

 

 

ITT : If-Then-Then 예제

조금 복잡해진 If-Then-Then 예제입니다.