※ ※ このページは書きかけです。以下の可能性があります。 ※ ・誤字、脱字等のチェックをおこなっていません。 ※ ・テキスト、表などフォーマットがされていない。 ※ ・画像が抜けている。 ※
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