自己动手编写int 0处理程序

;①编写中断处理函数 do0,并存放到地址0:200h~0:2ff处

;②设置中断向量:(覆盖原中断向量地址)

assume cs:code

code segment
start:
   mov ax,cs
   mov ds,ax ;设置源传送段地址
  
   mov ax,0
   mov es,ax ;设置目的传送段地址
  
   mov si,offset do0
   mov di,200h
  
   mov cx,offset do0end-offset do0 
  
   cld
   rep movsb           ;上面是传送中断处理函数到0:200h处
  
   mov ax,0              ;接下来四行是设置中断向量地址
   mov es,ax
   mov word ptr es:[0*4],200h
   mov word ptr es:[0*4+2],0
    
   mov ax,1000h
   mov bh,10h
   div bh
  
  
      
   mov ah,4ch
   int 21h
  
  
   do0:
     jmp begin 
    
      db 'sucker you have make a mistake : div overflow',0
  
     begin:
      mov dh,10 ;行号
      mov dl,15 ;列号
     
      mov ax,0                ;等同于mov ax,cs,因为 这些数据要传送到段地址0处
      mov ds,ax
      mov di,202h           ;这里是202h为什么不是200h?因为jmp begin占两个字节
     
      call show_str ;显示处理函数
     
      mov ah,4ch
      int 21h
    
     show_str:
     
     
      mov ax,0
      mov al,160
      mul dh
      mov bx,ax
     
      mov ax,0
      mov al,2
      mul dl
      add ax,bx
     
      mov si,ax
     
      mov ax,0b800h
      mov es,ax
     
      mov bl,00001000b
      s:
       mov cl,ds:[di]
       mov es:[si],cl
       inc si
       inc di
       mov es:[si],bl
       inc si
      
       mov ch,0
       jcxz ok
      jmp s
      ok:
       ret
  
   do0end:
    nop


code ends
end start

;另一种解法,比我的好哈    
assume cs:code

code segment
start:
   mov ax,cs
   mov ds,ax
   mov si,offset do0
   mov ax,0
   mov es,ax
   mov di,200h
   mov cx,offset do0end-offset do0
   cld
   rep movsb
  
   mov ax,0
   mov es,ax
   mov word ptr es:[0],200h
   mov word ptr es:[0*4+2],0
  
   mov ax,1000h
   mov bh,10h
   div bh
  
   mov ah,4ch
   int 21h
  
   do0:
    jmp do0start
    dat:
     db 'sucker you make a mistake:dived!'
   
   do0start:
    mov ax,0
    ;mov ax,dat
    mov ds,ax
    ;mov si,0
    mov si,202h
    mov ax,0b800h
    mov es,ax
    mov di,12*160+16*2
    mov cx,32
   
    s:
     mov al,ds:[si]
     inc si
     mov es:[di],al
     inc di
    
     mov es:[di],00001001b
    
     inc di
    loop s
   
    mov ah,4ch
    int 21h
   
   do0end:
    nop
code ends
end start

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值