"在int 16h中断例程中, 一定有设置 IF=1 的指令". 答案是 这是对的。
你的程序中, 程序开头cli指令设置"IF = 0". 但由于"int x"属于内中断。 忽略IF值, int 16h 照常执行。
"r还是 可以让字符变红"? 。 因为PC在"int 16h"例程中, 响应了外中断信息。
原理: "int 16h" 例程里含有sti指令, 设置IF=1. 这个时候按下"r"键,响应外中断请求,从而 "int 9h"例程得到执行。 最终 "int 16h"获取键盘信息"R" 并置于 ah=“通码", al="Ascii"中.
.
我认为 if必须等于1,不论int是不是可屏蔽中断,但是键盘输入是可屏蔽中断,如果if=0,键盘输入是没办法触发中断的,所以更没有办法调用int 9 将数据写入键盘缓冲区