谁能解释一下这段程序

dabc2004 2004-06-19 06:48:13
code segment
assume cs:code,ds:code
org 100h
start:
jmp install

int9:
push ax
push dx
mov dx,378h
in al,60h
test al,80h
jz zheng
mov al,0
out dx,al
jmp done
zheng:
mov al,4
out dx,al
done:
pop dx
pop ax
db 0eah
old9 dw 0,0 ; 相当于jmp原中断程序

install:

mov ax,3509h
int 21h
mov cs:old9,bx
mov cs:old9+2,es

push ds
mov ax,seg int9
mov ds,ax
mov dx,offset int9
mov ax,2509h
int 21h
pop ds

mov dx,(offset install)+15
mov cl,4
shr dx,cl

mov ax,cs
mov cx,ds
sub ax,cx
add dx,ax

mov ax,3100h
int 21h

code ends

end start

为什么 old9 dw 0,0 相当于jmp原中断程序?
...全文
80 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
CsdnRob 2004-07-02
  • 打赏
  • 举报
回复
CMenu* pSysMenu = GetSystemMenu(FALSE); if (pSysMenu != NULL) { pSysMenu->AppendMenu(MF_STRING, SC_MINIMIZE, "最小化"); ModifyStyle(0, WS_MINIMIZEBOX); }
dabc2004 2004-06-20
  • 打赏
  • 举报
回复
非常感谢
pandarong_2002 2004-06-19
  • 打赏
  • 举报
回复
给程序部分注释了一下,你看对不对:
MOV AX, 3509h
INT 21h
MOV CS:old9, BX
MOV CS:ols9+2, ES
这段程序把中断9的向量表中的值设定到OLD9所在的位置中,
下面是对此中断21的说明:
int21, 35-Get Interrupt Vector
input: AH = 35H, AL = interrupt vector number
return: ES:BX = pointer to interrupt handler
-------------------------------------------------------------
PUSH DS
MOV AX, SEG INT9
MOV DS, AX
MOV DX, offset INT9
MOV AX, 2509h
INT 21h ; int21, 25-Set Interrupt Vector
; input: AH = 25H, AL = interrupt vector number
; ES:BX = pointer to interrupt handler
; return nothing
POP DS
这段程序把中断9的向量表中的值设定为INT9所在的段和偏移,
下面是对此中断21的说明:
int21, 25-Set Interrupt Vector
input: AH = 25H, AL = interrupt vector number
ES:BX = pointer to interrupt handler
return nothing
-----------------------------------------------------------------------
当中断9发出的时候,系统会跳到INT9这边执行,最后依据DB EAh即是JMP指令的二进制值
而OLD9中已设定为原中断9的中断向量,故解释为JMP到原中断程序.

21,498

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧