以下是我学习int中断的一个历程,劫持除法溢出中断!
assume cs:code,ds:data,ss:stack
code segment
start:
mov ax,data
mov ds,ax
mov ax,stack
mov ss,ax
mov sp,32 ;设置相关寄存器
push ds ;保存DS段寄存器数据
mov ax,cs
mov ds,ax
mov si,offset _subStart ;设置起始数据传输地址为cs:_subStart
mov ax,0h
mov es,ax
mov di,200h ;设置目的传送地址为0:200
mov cx,offset _subEnd - offset _subStart ;设置传送长度
cld ;设置传送方向
rep movsb ;开始传送
pop ds
mov ax,0
mov es,ax
mov word ptr es:[0*4],200h
mov word ptr es:[0*4+2],0 ;修改中断向量表
mov ax,4c00h
int 21h
_subStart: ;中断处理开始
jmp ok
db 'This Is A Test!','$' ;定义输出数据
ok:
push ax
push bx
push ds ;保存相关寄存器
mov ax,0
mov ds,ax
mov dx,202h
mov ah,9
int 21h ;调用21中断显示字符串
pop ds
pop bx
pop ax ;恢复堆栈
mov ax,4c00h
int 21h ;程序退出
_subEnd:nop
code ends
stack segment
dw 16 dup(0)
stack ends
data segment
db 'this is a sssdfasd$'
data ends
end start