MDSTECH
TRACE32
TRACE32 Solution
TRACE32 Trace Solution
TRACE32 More Product
TRACE32 Software Solution
Why TRACE32?
교육신청
정규교육
교육과정 안내
교육장 안내
교육설문
자료실
TRACE32 소프트웨어
TRACE32 매뉴얼
iTSP
TRACE32 영상
인증서
고객지원
뉴스레터
Q&A
FAQ
원격지원
검색창
검색버튼
회원가입
로그인
TRACE32
TRACE32 Solution
TRACE32 Trace Solution
TRACE32 More Product
TRACE32 Software Solution
Why TRACE32?
교육신청
정규교육
교육과정 안내
교육장 안내
교육설문
자료실
TRACE32 소프트웨어
TRACE32 매뉴얼
iTSP
TRACE32 영상
인증서
고객 지원
뉴스레터
Q&A
FAQ
원격지원
사이트맵 보기
If-Then 문서 원본 보기
←
If-Then
이동:
둘러보기
,
검색
문서 편집 권한이 없습니다. 다음 이유를 확인해주세요:
요청한 명령은 다음 권한을 가진 사용자에게만 가능합니다:
사용자
문서의 원본을 보거나 복사할 수 있습니다:
<p>이번엔, Cortex-M에서 사용하는 Thumb-II의 특이한 어셈블리 중 하나인 If-Then 에 대해서 살펴보겠습니다.</p> <p> </p> <p>먼저 If-Then 명령의 문법은</p> <p>"IT{x{y{z}}} cond" 와 같습니다.</p> <p>x, y, z에는 T(Then) 혹은 E(Else)중 하나가 올 수 있으며, 있을 수도 있고 없을 수도 있습니다.</p> <p> </p> <p>예를 들어 아래와 같은 여러가지 조합이 생실 수 있다는 말입니다</p> <p>IT : If-Then</p> <p>ITT : If-Then-Then</p> <p>ITE : If-Then-Else</p> <p>ITTT : If-Then-Then-Then</p> <p>ITTE : If-Then-Then-Else</p> <p>ITTTT : If-Then-Then-Then-Then</p> <p> </p> <p>cond 에는 여러가지 조건 비교문이 올 수 있는데, 아래의 표를 참조하시기 바랍니다.</p> <p>(STMicro의 PM0056 Cortex-M3 programming manual 에서 발췌)</p> <p><img src="/data/wiki/2015-05-08/1431070742.jpg" alt="" /></p> <p> </p> <p>그럼 몇가지 샘플을 통해서 If-Then 명령에 대해 본격적으로 알아보겠습니다.</p> <p> </p> <p> </p> <p> </p> <p><span style="font-size: large;"><strong><span style="color: #3366ff;">IT : If-Then 예제</span></strong></span></p> <p>가장 기본적인 "If-Then" 으로 이루어진 예 입니다.</p> <p>이것을 제대로 이해하려면, "IT EQ" 명령 하나만 떼어 보지 말고,</p> <p>아래의</p> <p style="padding-left: 30px;">CMP R2,#0x6F</p> <p style="padding-left: 30px;">IT EQ</p> <p style="padding-left: 30px;">MOVS R7,#0x8</p> <p>명령들을 한번에 묶어서 살펴보아야 이해가 됩니다.</p> <p>자세한 것은 아래를 보시기 바랍니다.</p> <p> </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> </p> <p>장면 2 :</p> <p>결과적으로,</p> <p>"CMP R2,#0x6F", "IT EQ", "MOVS R7,#0x8" 이 3개의 명령은,</p> <p>"R2==0x6F이면, R7에 0x8값을 넣고,</p> <p> R2!=0x6F이면, R7값을 그대로 두어라" 라는 의미를 갖게 됩니다.</p> <p><img src="/data/wiki/2015-05-09/1431158498.jpg" alt="" /></p> <p> </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> </p> <p> </p> <p> </p> <p><span style="font-size: large;"><strong><span style="color: #3366ff;">ITT : If-Then-Then 예제</span></strong></span></p> <p>조금 복잡해진 If-Then-Then 예제입니다.</p> <p>위와 마찬가지로 아래의 명령을 묶어서 살펴보겠습니다.</p> <p style="padding-left: 30px;">CMP R0,#0x0</p> <p style="padding-left: 30px;">ITT PL</p> <p style="padding-left: 30px;">LDR R0,[R13]</p> <p style="padding-left: 30px;">SUBS R0,R0,R4</p> <p> </p> <p>장면 1 :</p> <p>"ITT PL" 명령은,</p> <p>바로 위에서 수행한 "CMP R0,#0x0" 명령의 결과에 영향을 받습니다.</p> <p>당시의 R0의 값은 0x52로, "0x52>0x0" 이므로, "ITT <span style="color: #ff9900;">PL(Plus)</span>"에 이어서 나오는 두 개의 명령이 수행되게 됩니다.</p> <p><img src="/data/wiki/2015-05-09/1431159813.jpg" alt="" /></p> <p> </p> <p>장면 2 :</p> <p>"ITT PL"의 결과, "LDR R0,[R13]" 명령이 수행될 것입니다.</p> <p>R13(스택포인터)가 가리키는 주소의 4바이트 값인 0x2000_1AC6이 R0로 복사될 것입니다.</p> <p><img src="/data/wiki/2015-05-09/1431159819.jpg" alt="" /></p> <p> </p> <p>장면 3 :</p> <p>"LDR R0,[R13]" 명령이 수행되어, R0값이 0x2000_1AC6으로 변경되었습니다.</p> <p>이어서 "SUBS R0,R0,R4" 명령에 의해, R0의 값이 R0-R4로 변경될 것입니다.</p> <p><img src="/data/wiki/2015-05-09/1431159825.jpg" alt="" /></p> <p> </p> <p>장면 4 :</p> <p>"SUBS R0,R0,R4" 명령이 수행되어 R0값이 0x52로 변경되었습니다.</p> <p><img src="/data/wiki/2015-05-09/1431159831.jpg" alt="" /></p> <p> </p> <p> </p> <p> </p> <p><span style="color: #3366ff; font-size: large;"><strong>ITE : If-Then-Else 예제</strong></span></p> <p>위의 ITT(If-Then-Then)과 조금 다른 ITE(If-Then-Else) 예제입니다.</p> <p>전과 마찬가지로 아래의 명령들을 한 번에 묶어서 살펴보겠습니다.</p> <p style="padding-left: 30px;">CMP R0,#0x78</p> <p style="padding-left: 30px;">ITE NE</p> <p style="padding-left: 30px;">MOVS R7,#0xA</p> <p style="padding-left: 30px;">MOVS R7,#0x10</p> <p> </p> <p>장면 1 :</p> <p>"CMP R0,#0x78" 이 수행된 결과,</p> <p>R0의 값!=0x78 이므로, Z(Zero) 플래그가 세팅되지 않았습니다.</p> <p><img src="/data/wiki/2015-05-11/1431299891.jpg" alt="" /></p> <p> </p> <p>장면 2 :</p> <p>"CMP R0,#0x78"의 결과가 "Not-Equal"이므로,</p> <p>"ITE <span style="color: #ff9900;">NE</span>"명령의 "Then"은 실행되고 "Else" 는 실해되지 않게 됩니다.</p> <p><img src="/data/wiki/2015-05-11/1431299896.jpg" alt="" /></p> <p> </p> <p>장면 3 :</p> <p>"ITE"의 첫 번째 "Then" 의 결과로 인해,</p> <p>"MOVS R7,#0xA" 가 수행되어, R7의 값이 0xA로 변경되었습니다.</p> <p><img src="/data/wiki/2015-05-11/1431299900.jpg" alt="" /></p> <p> </p> <p>장면 4 :</p> <p>"ITE"의 두 번째 "Else" 의 결과로 인해,</p> <p>"MOVS R7,#0x10" 은 수행되지 않으므로, R7의 값은 변경되지 않았습니다.</p> <p><img src="/data/wiki/2015-05-11/1431299905.jpg" alt="" /></p> <p> </p> <p> </p> <p>이와 같이 If-Then 명령의 동작 대해 몇 가지 샘플을 통해 알아보았습니다.</p> <p>If-Then 명령은 수 많은 변종이 생길 수 있으므로, 나머지는 위의 예를 기반으로 동작을 따져보시기 바랍니다.</p> <p>잘못된 부분이나 기타 문의사항은 TRACE32@mdstec.com 으로 연락 부탁드립니다.</p> <p> </p> <p>"<strong><a href="/wiki/index.php/Cortex-M">TRACE32로 바라본 ARM - Cortex-M</a></strong>" 으로 돌아가기</p>
If-Then
문서로 돌아갑니다.
둘러보기 메뉴
개인 도구
로그인
이름공간
문서
토론
변수
보기
읽기
원본 보기
역사 보기
행위
검색
TRACE32 Dummy
TRACE32
iTSP User's Guide
aTSP User's Guide
Linux Debugging
Debugging Tips
Trace Analysis
Virtual Target
TRACE32로 바라본 ARM
TRACE32 FAQ
TRACE32 Trouble Shooting
TRACE32 Software Update
Software Revision History
DT10 / DT-Win
다운로드
DT10 Evaluation
DT-Win Evaluation
TestPoint 삽입 Error
Build Error
DT10 FAQ
도구
여기를 가리키는 문서
가리키는 글의 바뀜
특수 문서 목록
문서 정보