Nios II Gen2 プロセッサー・リファレンス・ガイド

ID 683836
日付 10/28/2016
Public
ドキュメント目次

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