zoukankan      html  css  js  c++  java
  • 汇编语言 实验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
    输出结果:

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

  • 相关阅读:
    Flush输出表格内容
    [From Linux Toy] inxi– bash script to get system information
    .NET中Mocking框架的对比
    Python中的对象和动态性 [菜鸟的理解,高手莫入]
    《正见 佛陀的证悟》读书摘记 (1)
    Quote for tomorrow
    不抱怨就会死
    web deploy + windows server 2008 r2 64bit + iis 7.5
    bootsnipp
    [转载] A Beginner's Guide to HTTP Cache Headers
  • 原文地址:https://www.cnblogs.com/litlife/p/7512770.html
Copyright © 2011-2022 走看看