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と同様です。
あまり使い勝手が良いようには思えませんね。