【发布时间】:2019-06-02 17:10:56
【问题描述】:
我想用ah=8 int 10h 中断读取一个字符及其属性。
它适用于文本模式,但不适用于图形模式(16 色 640 x 480)。
mov ax,0012h
int 10h ;graphical mode
int 10h
mov ah,0Ah
mov al,'1'
mov cx,200 ;printing '1' 200 times
mov bx,0
int 10h
mov ah,2
mov dx,0 ;moving cursor to (0,0)
mov bx,0
int 10h
mov bh,0
mov ah,8 ;reading the character
int 10h
代码必须给AH=07h & AL=31h。
但是这段代码总是给出AH=07h & AL=00h。
那么如何在图形模式下使用这种方法呢?
【问题讨论】:
-
以图形模式读回文本是不明智的。它有像素,而不是字符。即使是图形模式,您仍然可以写入字符,但不能将它们读回。
-
如果我无法读取任何字符,如何在图形模式下制作文字处理器?
-
只是不要将文档的文本存储在显存中,它属于普通内存。不仅仅是因为您无法阅读,还会出现超出屏幕大小的文本。
-
你能给我一个想法吗?这对我真的很有帮助。
-
最简单的形式:分配一个字符数组,并定义变量来跟踪光标位置。每次按键时,插入/删除数组中的字符和/或更新光标位置(无论是否适合按下的键)。根据新的数组内容和光标位置刷新屏幕。这可以在每次按键后完成,但通常情况下,程序会等到“安静”的时刻,并且只刷新已更改的区域。
标签: assembly emu8086 cursor-position dosbox