• 汇编语言 实验12 编写0号中断的处理程序


    汇编语言 实验12 编写0号中断的处理程序


    1.需要的基础知识

    中断:
    CPU收到某种特殊信号之后,停下手头的工作,转向处理发出这种特殊信号的程序。而这种特殊的信号,就叫做中断。
    一共有四种中断类型:
        1.除数为0的错误
        2.单步执行(标志寄存器TF位=1时执行,如t指令)
        3.执行into指令
        4.执行int指令
            我们之前写的程序的结尾一般都是mov ax,4c00h int 21h
            后面这个int 21h就是中断指令,21h代表的就是中断向量表中的第21h个中断处理程序,所以int 21h连起来的意思就是,执行21h号中断处理程序。
    
    中断向量表:
    当CPU处理中断的时候,需要将CS:IP指向对应的中断处理程序。而中断处理程序的入口地址(段地址:偏移地址)是放在一张表中的。入口地址叫做中断向量(即段地址+偏移地址一共四个字节的信息,前两个字节代表中断处理程序的偏移地址,后两个字节代表的是段地址),而这张表就叫做中断向量表。
    
    中断的过程:
    1.获得中断类型码N
    2.pushf(flag寄存器入栈)
    3.TF=0(见上面的中断类型2),IF=0
    4.push CS
    5.push IP
    6.IP=N*4,CS=N*4+2
    

    2.自己编写一个0号中断的处理程序!(即上面的中断类型1:除法出错)

    assume cs:code
    code segment
    start:  mov ax,0
        mov ds,ax
        mov word ptr ds:[0],200h
        mov word ptr ds:[2],0
    
        mov ax,cs
        mov ds,ax
        mov si,offset do0
        mov ax,0
        mov es,ax
        mov di,200h
        mov cx,offset do0_end-offset do0
        cld
        rep movsb
    
        ;test
        mov ax,1
        mov cx,0
        div cx
    
        mov ax,4c00h
        int 21h
    
    do0:    
        jmp do0_start
        db "divide error!"
    do0_start:
        mov ax,0b800h
        mov es,ax
        mov di,1680
    
        mov ax,0
        mov ds,ax
        mov si,203h
        mov cx,13
    s:  mov al,ds:[si]
        mov es:[di],al
        inc si
        add di,2
        loop s
    
        mov ax,4c00h
        int 21h
    
    do0_end:nop
    
    code ends
    end start
    输出结果:

    中断处理程序的输出结果见第四行中间: )

  • 相关阅读:
    计算panel的靶向区段长度
    interval的排序,合并,取样等功能
    Bait 和 target的区别
    R 数据拆分到列
    制作annovar注释依赖的cosmic数据库
    制作适用于annovar的COSMIC数据库
    痘痘机理
    属性、域、元组、关系、候选码、主键、外键、关系代数
    how to install emacs25 in ubuntu 14
    Centos Install Emacs
  • 原文地址:https://www.cnblogs.com/litlife/p/7512770.html
Copyright © 2020-2023  润新知