私はTriCore TC1797コードを参照しており、対応する命令セットのマニュアルTriCore V1.3.1命令セットを参照しています。Infineon 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?
ゼロにして、どのようにループが終了する可能性がありますか?
ありがとう、私はマニュアルでこれを再読み込みしましたが、この状況の説明は見つかりません。
通常、符号付き比較と符号なし比較の両方に対して条件付きジャンプがあります。 'ja'命令のようなものがありますか? – fuz
署名されていないものに 'JGE.U'があるので、明らかに' JGE'が署名されています。したがって、あなたの 'd9'が' 0x0000FFF4'にマスクされているので、署名されたとして扱われますが、肯定的です。したがって、符号付き比較と符号なし比較のどちらを使用するかは関係ありません。 – Jester
fuz:これは間違いなくJGE(JGE.Uではない)命令なので、符号付きの比較です – EmbeddedGuy