zoukankan      html  css  js  c++  java
  • 实验12 添加0号中断处理程序

    代码

    ;实验12 编写0号中断的处理程序
    
    assume cs:code
    
    code segment
    start:
        mov ax,cs
        mov ds,ax
        mov si,offset do0   ;ds:si指向源地址
    
        mov ax,0
        mov es,ax
        mov di,200h         ;es:di指向目的地址
        
        mov cx,offset do0end-offset do0  ;将内存中的中断处理程序的机器码,移动到 0000:0200处(处在中断向量表的空间范围,一般别的程序不使用)
        				     
        cld                              
        rep movsb                        ;串传送指令执行完毕 0000:0200就是中断处理程序的入口
        
         
    
        mov ax,0        ;设置0号中断 的表向为0:0 0:0字单元存放偏移地址,0:2字单元存放段地址
        mov es,ax
        mov word ptr es:[0*4],200h   
        mov word ptr es:[0*4+2],0
    
        mov ax,4c00h
        int 21h
    
        do0: jmp short do0start
            db "overflow!"
    
        do0start:
            mov ax,cs
            mov ds,ax
            mov si,202h     ;ds:si指向字符串,复制到0:200处
    
            mov ax,0b800h
            mov es,ax
            mov di,12*160+36*2  ;显示位置
    
            mov cx,9
            s:
                mov al,[si]
                mov es:[di],al
                inc si
                add di,2
                loop s
            mov ax,4c00h
            int 21h
        do0end:nop
    code ends
    end start
    

    2. 在dos虚拟机中测试

    一,先编译连接并安装中断程序

    安装后的0号中断截图

    • 0号中断指向中断处理程序的地址,当中断触发 cs:ip会设置成该地址
    • 中断处理程序处的机器码
    • 中断处理程序的反汇编

    二,然后编译连接并运行测试程序

    • 执行效果如下

    三,int 0测试

    事实上,不管是不是除法溢出,直接执行 int 0中断,就可以显示 "overflow"

    • 在debug ,在当前指令处,执行汇编代码 int 0
    • debug 单步跟踪显示 cs:ip 执行了 中断的入口程序地址 0000:0200
  • 相关阅读:
    <img />标签 alt title
    ubuntu中rar与unrar用法详解
    vi及缩进设置
    ubuntu下读取数据库中文乱码解决
    ubuntu下phpstorm无法输入中文的解决办法
    ubuntu下mysqli_connect()显示未定义,mysqli_fetch_all()显示未定义 解决方法
    权限控制
    NULL
    ubuntu下chromium 安装flash player
    手把手教你把Vim改装成一个IDE编程环境(图文)
  • 原文地址:https://www.cnblogs.com/chance0x1/p/12952657.html
Copyright © 2011-2022 走看看