インテルのみ表示可能 — GUID: iga1409765331618
Ixiasoft
インテルのみ表示可能 — GUID: iga1409765331618
Ixiasoft
8.5.90. sub
命令 | 減算 |
演算 | rC ← rA – rB |
アセンブラー構文 | sub rC, rA, rB |
例 | sub r6, r7, r8 |
機能 | rA の値から rB の値を減算し、その結果を rC に格納する。 |
使用法 | キャリー検出 ( 符号なしオペランド ): キャリービットは符号なしのオーバーフローを示す。subの前または後に、第 1 オペランドが第 2 オペランドよりも小さいかどうかをチェックすることで、MSB のキャリーアウトの検出が可能である。キャリービットはレジスターに書き込みが可能、または、キャリー条件に基づいて条件分岐の実行も可能。次のコードに両方のケースを示す。 sub rC, rA, rB cmpltu rD, rA, rB sub rC, rA, rB bltu rA, rB, label # The original sub operation (optional) # rD is written with the carry bit # The original sub operation (optional) # Branch if carry generated オーバーフロー検出 ( 符号付きオペランド ): rC に書き込まれた符号付きの差異と符号付きのオペランドを比較して、符号付き減算のオーバーフローを検出する。rA と rB が異なる符号を持ち、rC の符号が rA の符号と異なる場合、オーバーフローが発生する。オーバーフロー条件は、次のコードに示すように、条件分岐を制御できる。 sub rC, rA, rB xor rD, rA, rB xor rE, rA, rC and rD, rD, rE blt rD, r0, label # The original sub operation # Compare signs of rA and rB # Compare signs of rA and rC # Combine comparisons # Branch if overflow occurred |
例外 | なし |
命令型 | R |
命令フィールド | A = オペランド rA のレジスター・インデックス B = オペランド rB のレジスター・インデックス C = オぺランド rC のレジスター・インデックス |
ビットフィールド | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 |
A | B | C | 0x39 | ||||||||||||
15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
0x39 | 0 | 0x3a |