有个问题:
《汇编语言》 P281 外中断的扫描码与字符码的问题
书上说:高位字节存扫描码,低位字节存字符码。
从BIOS键盘缓冲区端口传入CPU的时候,是传入整个一个字给AX,还是只传低字节给al,还是舍弃其中哪一个?
理论上说,应该是传低字节的字符码给al的。
===============================================
;---------以下为新的int 9中断例程
int9: push ax ; ax,bx,es分别入栈
push bx
push es
in al,60h ; 通过60h端口传输al
pushf ; flag 入栈
pushf ; flag 再次入栈
pop bx ; 第二次的flag出栈给bx
and bh,11111100b ; flag寄存器里面的IF和TF位设置为0
push bx ; bx的值入栈
popf ; bx入栈的值弹出给flag
call dword ptr ds:[0] ; 这里的调用,相当于原中断int 9
cmp al,1 ;判断键盘输入的识别码是不是ESC的扫描码1
jne int9ret ;jump to int9ret if al =/= 1 ;键盘输入不是ESC
mov ax,0b800h
mov es,ax
inc byte ptr es:[160*12+40*2+1] ;把显存里的控制颜色闪烁的字节的值给加1
int9ret: pop es
pop bx
pop ax ;倒序弹出
iret ;call dword ptr ds:[0] 弄出来的int 9 给中断返回
=============================================================
这里面的
cmp al,1 好像确实判断的是ESC的扫描码。
哪里理解有问题?
多谢各位指教。
==========================
ESC的ASCII字符码是10h
为什么不是判断
cmp al,10h |