TriCore TC1797 코드를 살펴보고 일치하는 인스트럭션 세트 매뉴얼 TriCore V1.3.1 인스트럭션 세트를 참조하십시오.인피니언 TriCore TC1797 조립 지침 JGE
내 질문은 사소하지만 아직 Tasking 컴파일러에서 생성 된 어셈블리 코드가 나를 혼란스럽게합니다. 코드는 영원히 반복 될 것처럼 보이지만 코드는 작동합니다. 그게 어떻게 가능해?
다음 명령 줄 (의견 동작에 대한 이해입니다) 걸릴 수 있습니다 다음 D9은 항상 양수이기 때문에 내가 (? 오른쪽), 결코 가고 있지 않은, 이해하지 못하는 어떤MOVH.A a12, #@HIS(VAR_ADDRESS)
LEA a12, [a12]@LOS(VAR_ADDRESS)
LD.H d15, [a12]0 ; d15 = 4 (half-word) passed to this function
; values passed are either 0x04 or 0x10 or 0xA8
loop_addr:
ADD d15, d15, #-0x10 ; d15 = 4 - 0x10 = 0xFFFFFFF4
EXTR d9, d15, #0, #16 ; d9 = 0x0000FFF4
; edit: THIS IS MY MISTAKE
; correct is d9 = 0xFFFFFFF4
...
other code here, never touching d9
...
ST.H [a12], d9 ; store decremented value back
JGE d9, #1, loop_addr ; ???? comparing 0x0000FFF4 to 1
; will it loop forever?
0일까요, 어떻게 가능합니까, 루프가 종료됩니까?
설명해 주셔서 감사합니다. 설명서에서 다시 읽었지만이 상황에 대한 설명을 찾을 수 없습니다.
일반적으로 서명 된 비교와 부호없는 비교에 대한 조건부 점프가 있습니다. 'ja' 명령과 같은 것이 있습니까? – fuz
서명이없는'JGE.U'가 있기 때문에'JGE'가 서명되어 있습니다. 따라서'd9'가'0x0000FFF4'까지 숨겨져 있기 때문에 서명 된 것으로 취급 될 것입니다. 따라서 부호가 있거나 비교되지 않은 비교를 사용하는지 여부는 중요하지 않습니다. – Jester
fuz : 이것은 분명히 JGE (JGE.U가 아님) 명령이므로 서명 된 비교입니다 – EmbeddedGuy