※ ※ このページは書きかけです。以下の可能性があります。 ※ ・誤字、脱字等のチェックをおこなっていません。 ※ ・テキスト、表などフォーマットがされていない。 ※ ・画像が抜けている。 ※
B.1 R800のかけ算命令
R800には、以下のかけ算命令があります。
B.1.1 8ビットのかけ算
8ビットレジスタ同士を乗算して、その結果をHLレジスタに返します。かけ算は符号なしで実行されます。インストラクションなどは以下の通りです。
演算 | インストラクション | クロック数 |
HL←A*B | ED C1 | 14 |
HL←A*C | ED C9 | 14 |
HL←A*D | ED D1 | 14 |
HL←A*E | ED C9 | 14 |
B.1.2 16ビットのかけ算
16ビットレジスタ同士を乗算して、その結果をDE:HLレジスタに返します。かけ算は符号なしで実行されます。インストラクションなどは以下のとおりです。
演算 | インストラクション | クロック数 |
DE:HL←HL*BC | ED C3 | 36 |
DE:HL←HL*SP | ED F3 | 36 |
B.2 M80のかけ算用マクロ
M80でこれらのかけ算命令を使うときは、以下のようなマクロを定義します。
mult8 macro reg ifidn <reg>, <b> defb 0edh, 0c1h else ifidn <reg>, <B> defb 0edh, 0c1h else ifidn <reg>, <c> defb 0edh, 0c9h else ifidn <reg>, <C> defb 0edh, 0c9h else ifidn <reg>, <d> defb 0edh, 0d1h else ifidn <reg>, <D> defb 0edh, 0d1h else ifidn <reg>, <e> defb 0edh, 0d9h else ifidn <reg>, <E> defb 0edh, 0d9h else if1 .printx *MULT8: illegal argument* defb 00h, 00h err endif endif endif endif endif endif endif endif endif endm mult16 macro ifidn <reg>, <bc> defb 0edh, 0c3h else ifidn <reg>, <BC> defb 0edh, 0c3h else ifidn <reg>, <sp> defb 0edh, 0f3h else ifidn <reg>, <SP> defb 0edh, 0f3h else if1 .printx *MULT16: illegal argument* defb 00h, 00h err endif endif endif endif endif endm