鱼C论坛

 找回密码
 立即注册
查看: 2608|回复: 1

[汇编作业] 实验 15 安装新的int 9 中断例程

[复制链接]
发表于 2019-3-29 16:03:32 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
安装一个新的int 9 中断例程, 功能:在DOS下,按“A”键后,除非不在松开如果松开,就显示满屏幕的“A”;其他的键照常处理。
提示, 按下一个键时产生的扫描码称为通码,松开一个键产生的扫描码称为断码。断码=通码 + 80h。
assume cs:code, ss:stack

stack segment
                db 128 dup (0)
stack ends


code segment
start:                                        ;把int 9h里的地址传到0000:0200-0000:0204中,这样可以不占用
                mov ax, stack
                mov ss, ax
                mov sp, 128
                
                mov ax, cs
                mov ds, ax
                mov si, offset int_9
                
                mov ax, 0
                mov es, ax
                mov di, 204h
                
                mov cx, offset int_end - offset int_9
                
                cld
                rep movsb
                
                push word ptr es:[ 9 * 4]
                pop word ptr ds:[200h]
                
                push word ptr es:[9 * 4 + 2]
                pop  word ptr ds:[200h + 2]
                
                
                ;安装到中断限量表中
                
                cli
                mov word ptr es:[9 * 4], 204h
                mov word ptr es:[9 * 4 + 2], 0h
                sti

                
                mov ax, 4c00h
                int 21h
                
int_9:
                push ax
                push bx
                push cx
                push es
                
                mov bx, 0                        ;因为怕bx中有数据所以先归零
                
                pushf
                call dword ptr cs:[200h]
                
                in al, 60h
                
                ;判断是否是a键的断码如果不是那就跳转如果是就向下执行
                cmp al, 1eh + 80h
                jne loop_2
                
                mov ax, 0b800h
                mov es, ax
                
                mov cx, 2000
loop_1:
                mov byte ptr es:[bx], 'a'  
                add bx, 2
                loop loop_1
                
loop_2:
                
                pop es
                pop cx
                pop bx
                pop ax
                iret
int_end:
                nop
                
                
code ends
end start

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-3-10 19:27:20 | 显示全部楼层
复制代码运行不了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-23 22:24

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表