鱼C论坛

 找回密码
 立即注册
查看: 1468|回复: 4

中断处理程序

[复制链接]
发表于 2022-12-17 13:39:14 | 显示全部楼层 |阅读模式
60鱼币
本帖最后由 Suave 于 2022-12-17 13:42 编辑

编写0号中断的处理程序,使得在除法溢出发生时,在屏幕中间显示字符串:“divide error!”然后返回操作系统


DOS环境下

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

使用道具 举报

发表于 2022-12-19 09:43:05 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-12-19 09:47:40 | 显示全部楼层
DOS环境下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-12-19 14:06:03 | 显示全部楼层
先自己写,写到哪里不会了再提问
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-12-19 16:46:26 | 显示全部楼层
本帖最后由 jackz007 于 2022-12-20 11:44 编辑
assume cs:code , ds:code
code segment para public 'CODE'
    msg db 'divide error!' , 00h
    lx  dw 0ABCDh
foo proc far
        push cs
        pop ds
        lea si,msg
        mov ax,0b800h
        mov es,ax
        mov di,160*12
        mov bx,80
        sub bx,offset lx
        inc bx
        and bx,0fffeh
        add di,bx
        cld
foo1:   lodsb
        or al,al
        jz foo2
        stosb
        inc di
        jmp short foo1
foo2:   mov ax,4c00h
        int 21h  
foo endp
main proc far
        mov ax,3500h                     ; 获取 0 号中断处理程序入口地址
        int 21h
        cmp word ptr es:[bx-2],0abcdh    ; 判断是否已经驻留,避免重复驻留
        jz main01                        ; 是,跳走
        push cs
        pop ds
        mov dx,offset foo
        mov ax,2500h                     ; 设置 0 号中断向量地址为 ds:dx (cs:ip)
        int 21h
        mov dx,offset main
        add dx,10fh                      ; 驻留空间包括 PSP 的 100h 字节
        mov cl,4
        shr dx,cl                        ; dx = 需要保留的驻留空间小节(10h)数
        mov ax,3100h                     ; 驻留退出,al = 00 是退出状态码
        int 21h
main01: mov ax,4c00h                     ; 正常退出
        int 21h
main endp 
code ends
end main
        x 爽所谓的教程把世界都搞乱了,居然教别人把中断处理程序的代码覆盖到中断向量表的空间内,而不是让程序自然驻留退出,操作系统设置的功能难道是摆设?如果同时需要编写多个中断处理程序又该怎么办?还有,堆栈只定义十几或几十个字节空间,吝啬程度令人发指,代码开始一定要设置 SS 和 SP 等等,这些统统都是误人子弟!就这么一本蹩脚的教材,居然也能风靡?看来真的是没有人了!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-22 13:53

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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