需求
安装一个新的 int 9 中断例程,功能:在 DOS 下,按下A键后,除非不再松开如果松开,就显示满屏幕的A,其他的键照常处理。
提示,按下一个键时产生的扫描码称为通码,松开一个键产生的扫描码称为断码。
断码 = 通码 + 80h。
代码
assume cs:code
stack segment
db 128 dup(0)
stack ends
code segment
start: mov ax,stack ; 设置栈段和栈顶位置
mov ss,ax
mov sp,128
;----------- 打个小补丁。避免重复运行后搞丢 int9 导致输入瘫痪 -----------
mov ax,0
mov ds,ax
mov ax,ds:[204h]
cmp ax,5350h ; 判断 ds:[204]=5053 则已安装过(值是调试运行查的)
je ok
; -------- 安装: 复制中断例程到目标内存 -------
mov ax,cs ;设置 ds:si 指向源地址
mov ds,ax
mov si,offset int9
mov ax,0 ;设置 es:di 指向目的地址
mov es,ax
mov di,204h
mov cx,offset int9end-offset int9 ;设置 cx为传输长度
cld ;设置传输方向为正。movsb中si,di递增
rep movsb

最低0.47元/天 解锁文章
1501

被折叠的 条评论
为什么被折叠?



