INT 10h (AH=8,9,A)

INT 10h (AH=8):カーソル位置の文字と属性を取得

	; カーソル位置の文字と属性を取得
	MOV	AX, 0800h
	MOV	BX, 0000h
	INT	10h

結果は、AXに戻される。


今まで、レジスタの内容を、
その都度 AX レジスタに代入して puthex をコールしていたけど、
面倒になってきたので、専用のサブルーチンを作成する。


putregs:主要なレジスタの内容を画面右上に表示する

putregs:
	PUSHA

	PUSH	DX
	PUSH	CX
	PUSH	BX
	PUSH	AX

	; 現在のカーソル位置を取得
	MOV	AX, 0300h
	MOV	BX, 0000h
	INT	10h

	MOV	DI, DX		; DXの内容をDIに退避(レジスタが〜!!)

	; カーソル位置指定(AX)
	MOV	AX, 0200h
	MOV	BX, 0000h
	MOV	DX, 0040h
	INT	10h

	MOV	SI, regax
	CALL	puts
	POP	AX
	CALL	puthex

	; カーソル位置指定(BX)
	MOV	AX, 0200h
	MOV	BX, 0000h
	MOV	DX, 0140h
	INT	10h

	MOV	SI, regbx
	CALL	puts
	POP	AX
	CALL	puthex

	; カーソル位置指定(CX)
	MOV	AX, 0200h
	MOV	BX, 0000h
	MOV	DX, 0240h
	INT	10h

	MOV	SI, regcx
	CALL	puts
	POP	AX
	CALL	puthex

	; カーソル位置指定(DX)
	MOV	AX, 0200h
	MOV	BX, 0000h
	MOV	DX, 0340h
	INT	10h

	MOV	SI, regdx
	CALL	puts
	POP	AX
	CALL	puthex

	; カーソル位置を戻す
	MOV	AX, 0200h
	MOV	BX, 0000h
	MOV	DX, DI
	INT	10h

	POPA

	RET

regax:
	DB	"AX = ", 0x00
regbx:
	DB	"BX = ", 0x00
regcx:
	DB	"CX = ", 0x00
regdx:
	DB	"DX = ", 0x00


INT 10h (AH=9):カーソル位置に文字と属性を書き込む

	; カーソル位置に文字と属性を書き込む
	MOV	AX, 0961h	; 61='a'
	MOV	BX, 0012h	; 背景:パレット1、前景:パレット2
	MOV	CX, 6		; 書き込み文字数6
	INT	10h

指定した文字と属性を、指定した文字数分、書き込む。
上記の場合、"aaaaaa"と表示されます。
意味のある文字列、例えば、"Hello world!!"とかの先頭6文字分とか、
そんな高度な指定は出来ません。
あくまで、指定された一文字を連続表示するだけのようです。


INT 10h (AH=A):カーソル位置に文字を書き込む

	; カーソル位置に文字を書き込む
	MOV	AX, 0A62h	; 62='b'
	MOV	BX, 0000h	;
	MOV	CX, 6		; 書き込み文字数6
	INT	10h

こちらは、文字のみで、属性は変更しません(出来ません)。
書き込み文字数の意味は、AH=9と同様です。
あまり使い勝手が良いようには思えませんね。