中断ah=0Eh
int 10h
在屏幕上显示一个字符,它有几个参数,包括BH,它应该指示页码,除了经过几次测试我意识到BH是绝对无用的。即使我更改了页码,字符仍然会显示在活动页面上。
Ralf Brown's interrupt list says
“日期为1981/4/24和1981/10/19的IBM PC ROM要求BH与当前活动页相同”
互联网上的一个页面是这样写的:https://www.ic.unicamp.br/~celio/mc404-2004/service_interrupts#int10h_0Eh
此函数在屏幕上显示一个字符,根据需要推进光标并滚动屏幕。打印始终在当前活动页面上进行。
我必须信任哪个来源,我使用没有操作系统的虚拟机,我使用 Bootstrap 。
我明确表示我不理解此信息
日期为1981/4/24和1981/10/19的IBM PC ROM要求BH与当前活动页面相同
知道我使用虚拟盒子,我不认为虚拟盒子使用的是1981年IMG PC的ROM?
1条答案
按热度按时间ao218c7q1#
服务
ah = 0x0E
,int 0x10
仅在活动页面上打印。您可以使用服务ah = 0x05
,al = page number
,int 0x10
更改活动页面。BH不应该是这个BIOS函数的输入。Ralf Brown的中断列表只是作为它提到的两个早期IBM-PC BIOS版本(1981/4/24和1981/10/19)中BH需要保存活动页码的bug的一部分而显示的。否则它根本不是输入。
我查看了BIOS 1981-04-24、1981-10-19和1982-10-27的代码,前两个BIOS中的服务
ah = 0x0E
(write_tty)是这样开始的:开头有一个服务
ah = 0x03
(read_cursor),需要bh = page number
来计算当前页面上光标位置的偏移量,这个值在DX中返回并存储在这里:然后是指令
mov bh,active_page
。例如,我们想写入第0页,我们在第0页上计算光标位置,但active_page = 1,所以我们有不匹配。所以也许这就是为什么RBIL页面谈论它,BH应该与active_page相同。日期为1981/4/24和1981/10/19的IBM PC ROM要求BH与当前活动页面相同
在上一个BIOS 1982-10-27中,行
MOV BH,ACTIVE_PAGE
更改了位置BH与active_page相同。因此,程序计算正确的页面位置。
这里有一个在BIOS MBR Bootstrap 中使用它的例子。这在QEMU中运行良好:
这是从命令行工作的,就像一个DOS .COM: