DIV ( Unsigned Divide ) :符号なし除算
DIV SRC 動作:符号なし整数の除算 SRC = 1byte : AX ÷ SRC の余り→AH、商→AL SRC = 1word : DX:AX ÷ SRC の余り→DX、商→AX SRC = 1dword : EDX:EAX ÷ SRC の余り→EDX、商→EAX 影響を受けるフラグ : OF,SF,ZF,AF,CF,PF SRC :レジスタ、メモリー
IDIV ( Signed Divide ) :符号付き除算
IDIV SRC 動作:符号付き整数の除算 SRC = 1byte : AX ÷ SRC の余り→AH、商→AL SRC = 1word : DX:AX ÷ SRC の余り→DX、商→AX SRC = 1dword : EDX:EAX ÷ SRC の余り→EDX、商→EAX 影響を受けるフラグ : OF,SF,ZF,AF,CF,PF SRC :レジスタ、メモリー
除算には注意が2つ必要となる。電卓で「1÷0」と入力するとエラーになる。同様に0で割るとエラーになる。高級言語の場合は0で割るとエラーを表示してプログラムを終了するようにコンパイラが勝手にしてくれる場合もあるが、アセンブラの場合、通常はOSに処理が移ってしまいどうなるかわからない。
2つめは大きい数を小さい数で割ってはいけない。割る数が1byteの場合、割られる数は1word(=2byte)の数である。そしてその商と余りは1byteである。したがって、
2000h÷2=1000h余り0であるが、商の1000hは1byteには収まりきらない。この場合もエラーが起こり、OSに処理が移ってしまい、その後どうなるかわからない。このようなエラーを「例外」と呼び、OSが用意している「例外処理」に処理が移行される。例外については後述する。
- 0でわり算をしてはならない。
- 商がレジスタに収まるように注意しなければならない
| 符号なし除算 【86】 |
|
| 符号付き除算 【86】 |
|