更新日: 2023 年 7 月 6 日
DIVS
DIVS
符号あり除算 (でぃぶえす)
DIVS.L <ea>,Dq
68020/68030/68040/68060 の命令
命令コード
アドレス | 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
+0 | 0 | 1 | 0 | 0 | 1 | 1 | 0 | 0 | 0 | 1 | モード | レジスタr | ||||
+2 | 0 | レジスタq | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | レジスタq |
アドレッシングモードと実行時間
モード | レジスタr | <ea> | 68020 | 68030 | 68040 | 68060 | ||||
---|---|---|---|---|---|---|---|---|---|---|
0 | 0 | 0 | r | Dr | 🚧 | 🚧 | 🚧 | 🚧 | ||
1 | (Ar) | |||||||||
1 | (Ar)+ | |||||||||
1 | 0 | 0 | -(Ar) | |||||||
1 | (d16,Ar) | |||||||||
1 | 0 | (d8,Ar,Xn) | - | - | - | - | ||||
(d8,Ar,Xn*sf) | 🚧 | 🚧 | 🚧 | 🚧 | ||||||
(bd,Ar,Xn*sf) | ||||||||||
([bd,Ar,Xn*sf],od) | ||||||||||
([bd,Ar],Xn*sf,od) | ||||||||||
1 | 0 | 0 | 0 | (xxx).W | ||||||
1 | (xxx).L | |||||||||
1 | 0 | (d16,PC) | ||||||||
1 | (d8,PC,Xn) | - | - | - | - | |||||
(d8,PC,Xn*sf) | 🚧 | 🚧 | 🚧 | 🚧 | ||||||
(bd,PC,Xn*sf) | ||||||||||
([bd,PC,Xn*sf],od) | ||||||||||
([bd,PC],Xn*sf,od) | ||||||||||
1 | 0 | 0 | #<data> |
コンディションコード
フラグ | 入力 | 出力 | 説明 |
---|---|---|---|
X | 使用しない | 変化しない | |
N | 変化する | 🚧 | |
Z | |||
V | |||
C | 常にクリア |
解説
🚧
DIVS.L <ea>,Dr:Dq
68020/68030/68040/68060(ソフトウェア)の命令
命令コード
アドレス | 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
+0 | 0 | 1 | 0 | 0 | 1 | 1 | 0 | 0 | 0 | 1 | モード | レジスタr | ||||
+2 | 0 | レジスタq | 1 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | レジスタr |
レジスタ q とレジスタ r は違うレジスタ
アドレッシングモードと実行時間
モード | レジスタr | <ea> | 68020 | 68030 | 68040 | 68060 | ||||
---|---|---|---|---|---|---|---|---|---|---|
0 | 0 | 0 | r | Dr | 🚧 | 🚧 | 🚧 | S | ||
1 | (Ar) | |||||||||
1 | (Ar)+ | |||||||||
1 | 0 | 0 | -(Ar) | |||||||
1 | (d16,Ar) | |||||||||
1 | 0 | (d8,Ar,Xn) | - | - | - | - | ||||
(d8,Ar,Xn*sf) | 🚧 | 🚧 | 🚧 | S | ||||||
(bd,Ar,Xn*sf) | ||||||||||
([bd,Ar,Xn*sf],od) | ||||||||||
([bd,Ar],Xn*sf,od) | ||||||||||
1 | 0 | 0 | 0 | (xxx).W | ||||||
1 | (xxx).L | |||||||||
1 | 0 | (d16,PC) | ||||||||
1 | (d8,PC,Xn) | - | - | - | - | |||||
(d8,PC,Xn*sf) | 🚧 | 🚧 | 🚧 | S | ||||||
(bd,PC,Xn*sf) | ||||||||||
([bd,PC,Xn*sf],od) | ||||||||||
([bd,PC],Xn*sf,od) | ||||||||||
1 | 0 | 0 | #<data> |
コンディションコード
フラグ | 入力 | 出力 | 説明 |
---|---|---|---|
X | 使用しない | 変化しない | |
N | 変化する | 🚧 | |
Z | |||
V | |||
C | 常にクリア |
解説
🚧
DIVS.W <ea>,Dq
68000/68010/68020/68030/68040/68060 の命令
命令コード
アドレス | 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
+0 | 1 | 0 | 0 | 0 | レジスタq | 1 | 1 | 1 | モード | レジスタr |
アドレッシングモードと実行時間
モード | レジスタr | <ea> | 68000 | 68010 | 68020 | 68030 | 68040 | 68060 | ||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 0 | 0 | r | Dr | 156※(1/0) | 156(1/0) | 🚧 | 🚧 | 🚧 | 🚧 | ||
1 | (Ar) | 160※(2/0) | 160(2/0) | |||||||||
1 | (Ar)+ | |||||||||||
1 | 0 | 0 | -(Ar) | 162※(2/0) | 162(2/0) | |||||||
1 | (d16,Ar) | 164※(3/0) | 164(3/0) | |||||||||
1 | 0 | (d8,Ar,Xn) | 166※(3/0) | 166(3/0) | - | - | - | - | ||||
(d8,Ar,Xn*sf) | - | - | 🚧 | 🚧 | 🚧 | 🚧 | ||||||
(bd,Ar,Xn*sf) | ||||||||||||
([bd,Ar,Xn*sf],od) | ||||||||||||
([bd,Ar],Xn*sf,od) | ||||||||||||
1 | 0 | 0 | 0 | (xxx).W | 164※(3/0) | 164(3/0) | ||||||
1 | (xxx).L | 168※(4/0) | 168(4/0) | |||||||||
1 | 0 | (d16,PC) | 164※(3/0) | 164(3/0) | ||||||||
1 | (d8,PC,Xn) | 166※(3/0) | 166(3/0) | - | - | - | - | |||||
(d8,PC,Xn*sf) | - | - | 🚧 | 🚧 | 🚧 | 🚧 | ||||||
(bd,PC,Xn*sf) | ||||||||||||
([bd,PC,Xn*sf],od) | ||||||||||||
([bd,PC],Xn*sf,od) | ||||||||||||
1 | 0 | 0 | #<data> | 160※(2/0) | 160(2/0) |
※最大値
68000 の DIVS の実行時間は、以下に実効アドレスの時間を加えます。
- ゼロ除算のとき 38
- 符号なしオーバーフローのとき
- 被除数が正のとき 16
- 被除数が負のとき 18
- 正常終了または符号ありオーバーフローのとき
- 被除数が正で除数が正のとき 120+
- 被除数が正で除数が負のとき 122+
- 被除数が負で除数が正のとき 126+
- 被除数が負で除数が負のとき 124+
- 符号なし商のビット 15〜1 について
- 符号なし商が 1 のとき 0
- 符号なし商が 0 のとき 2
- 符号なし商のビット 15〜1 について
コンディションコード
フラグ | 入力 | 出力 | 説明 |
---|---|---|---|
X | 使用しない | 変化しない | |
N | 変化する | ゼロ除算またはオーバーフローのとき未定義、商が負のときセット、さもなくばクリア 68000/68030 はゼロ除算のときクリア、オーバーフローのとき被除数が \$80000000 または商が \$0000xxyy または \$ffffxxyy で yy が負のときセット、さもなくばクリア 68060 はゼロ除算またはオーバーフローのとき変化しない | |
Z | ゼロ除算またはオーバーフローのとき未定義、商が 0 のときセット、さもなくばクリア 68000/68030 はゼロ除算のときセット、オーバーフローのとき商が \$00008000 または商が \$0000xxyy または \$ffffxxyy で xx が 0 でなくて yy が 0 のときセット、さもなくばクリア 68060 はゼロ除算またはオーバーフローのとき変化しない | ||
V | ゼロ除算のとき未定義、オーバーフローのときセット、さもなくばクリア 68000 はゼロ除算のとき被除数が \$00008000 のとき反転、被除数が \$7fffffff を除く正または \$80000000 のときセット、さもなくば変化しない 68030 はゼロ除算のとき DIV*/MUL* の正常終了後ゼロ除算までに DBcc が奇数回実行されたときセット、さもなくばクリア 68060 はゼロ除算のとき変化しない | ||
C | 常にクリア |
解説
- <ea> が指すワード(Dr のとき下位ワード)を読み出して除数 Y とします。
- Dq の全体を読み出して被除数 X とします。
- Y が 0 のときゼロ除算例外処理を開始します。
- X と Y を符号あり整数とみなして X を Y で割った商を Q、余りを R とします。商の端数は 0 の方向に切り捨てます。余りの符号が被除数の符号と一致します。
- Q が -32768〜32768 の範囲内のとき Dq の上位ワードに R、下位ワードに Q を書き込みます。
- 結果に応じてフラグを操作します。
ゼロ除算またはオーバーフローのとき Dq は変化しません。