模拟0号中断程序

当cpu执行除法时发生溢出时,执行该程序。添上了注释,其中有一个问题还没有解决,有时间再来看看,毕竟我看来还是个比较重要的问题。本来寒假抽空打算把上次写的一个U disk Virus 写下注释,也算作为win32SDK的告别,看起来时间不允许了~~

 

assume cs:codesg

codesg segment
main:      mov ax
, cs                 ; 设置源地址
                mov ds , ax                
                mov si
, offset do0
                mov ax
, 0                  ; 设置目的地址,即是0:200h 
                mov es , ax
                mov di
, 200h
                mov cx
, offset do0end-offset do0         ; 设置cx,传送个数
                cld
                rep movsb

                mov ax
, 0                  ; 设置中断向量表
                mov es , ax
                mov word ptr es:
[ 0 ] , 200h         ; 注意低地址存放偏移地址 高地址存放段地址
                mov word ptr es: [ 2 ] , 0h

                mov ax
, 4c00h
                int 21h

do0:        jmp short dostart            
; 下条语句是定义字符串 执行时跳过
do0word:    db 'overflow!'                 ; 必须把字符串放在内存空闲的地方
do0start:   mov ax , cs                 ; 把overflow放在显存当中
               mov ds , ax
               mov si
, 202h                 ; 设置字符串首地址 如果设置offset do0word等不到正确地址 不知为何
               mov ax , 0b800h
               mov es
, ax
               mov di
, 12 * 160 + 36 * 2
               mov cx,
9
 
s:            mov al
, [ si ]
               mov es:
[ di ] , al
                   mov es:[di+1],02h
               inc si
               add di
, 2
loop s

               mov ax
, 4c00h
               int 21h
do0end:    nop

codesg ends

end main

 需要注意以下几点:

1.安装程序分为两步:第一步 把do0的代码拷至0;200H,注意拷贝代码时设置cx的技巧;第二步:设置中断向量

2.设置字符串首地址问题,待解决

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值