|
发表于 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 等等,这些统统都是误人子弟!就这么一本蹩脚的教材,居然也能风靡?看来真的是没有人了! |
|