DIV 命令 (Divide Accumulator)
アキュムレータの値をXレジスタの値で除算し、商をアキュムレータに、余りをYレジスタに返します。

DIV オーバーロード
オペコード 構文 アドレッシングモード バイト数 命令サイクル
9E
DIV YA, X
Divide
1
12
 

フラグ変化
nv--h-z-

n: 商のMSBがセットされる
v: 商が256以上の場合にセットされる (Yレジスタの符号なし値がXレジスタの符号なし値以上の場合)
h: Yレジスタの下位ニブルの値がXレジスタの下位ニブルの値以上の場合にセットされる
z: 商がゼロの場合にセットされる

解説
DIV命令はYAペアの値をXレジスタの値で割り、その商をアキュムレータに、余りをYレジスタに返します。
商が256を超える場合、オーバーフローし、商が512を超える場合、不正な結果となります。
商が256を超える場合の結果は、下位8ビットがアキュムレータに、MSBがオーバーフローフラグに返されます。
除数が0の場合、不正な結果となります。

; DIV Sample

; #$0035 / #$10 (= Q: #$03, R: #$05)

MOV	A, #$35	; ***-*-**
MOV	Y, #$00	; n**-*-z*
MOV	X, #$10	; n**-*-Z*	YA: 0035	
DIV	YA, X	; n**-*-z*	X: 10
***		; nv*-H-z*	A: 03 X: 10 Y: 05

; #$0105 / #$24 (= Q: #$07, R: #$09)

MOV	A, #$05	; ***-*-**
MOV	Y, #$01	; n**-*-z*
MOV	X, #$24	; n**-*-z*	YA: 0105	
DIV	YA, X	; n**-*-z*	X: 24
***		; nv*-h-z*	A: 07 X: 24 Y: 09

; #$0005 / #$10 (= Q: #$00, R: #$05)

MOV	A, #$05	; ***-*-**
MOV	Y, #$00	; n**-*-z*
MOV	X, #$10	; n**-*-Z*	YA: 0005	
DIV	YA, X	; n**-*-z*	X: 10
***		; nv*-H-Z*	A: 00 X: 10 Y: 05

; #$13EC / #$14 (= Q: #$FF, R: #$00)

MOV	A, #$EC	; ***-*-**
MOV	Y, #$13	; N**-*-z*
MOV	X, #$14	; n**-*-z*	YA: 13EC	
DIV	YA, X	; n**-*-z*	X: 14
***		; NV*-h-z*	A: FF X: 14 Y: 00

; #$6415 / #$64 (= Q: #$100, R: #$15)

MOV	A, #$15	; ***-*-**
MOV	Y, #$64	; n**-*-z*
MOV	X, #$64	; n**-*-z*	YA: 6415	
DIV	YA, X	; n**-*-z*	X: 64
***		; nV*-H-z*	A: 00 X: 64 Y: 15 (overflow!)

; #$C801 / #$64 (= Q: #$200, R: #$01)

MOV	A, #$00	; ***-*-**
MOV	Y, #$C8	; n**-*-Z*
MOV	X, #$64	; N**-*-z*	YA: C800
DIV	YA, X	; n**-*-z*	X: 64
***		; NV*-H-z*	A: FF X: 64 Y: 65 (invalid result)

; #$D480 / #$64 (= Q: #$220, R: #$00)

MOV	A, #$80	; ***-*-**
MOV	Y, #$D4	; N**-*-z*
MOV	X, #$64	; N**-*-z*	YA: D480	
DIV	YA, X	; n**-*-z*	X: 64
***		; NV*-H-z*	A: EB X: 64 Y: B4 (invalid result)

; #$1234 / #$00 (invalid operation)

MOV	A, #$34	; ***-*-**
MOV	Y, #$12	; n**-*-z*
MOV	X, #$00	; n**-*-z*	YA: 1234	
DIV	YA, X	; n**-*Zz*	X: 0
***		; NV*-H-z*	A: ED X: 00 Y: 34 (invalid result)

参照