博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
汇编语言 实验12 编写0号中断的处理程序
阅读量:7106 次
发布时间:2019-06-28

本文共 1229 字,大约阅读时间需要 4 分钟。

汇编语言 实验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.获得中断类型码N2.pushf(flag寄存器入栈)3.TF=0(见上面的中断类型2),IF=04.push CS5.push IP6.IP=N*4,CS=N*4+2

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

assume cs:codecode segmentstart:  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 21hdo0:        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,13s:  mov al,ds:[si]    mov es:[di],al    inc si    add di,2    loop s    mov ax,4c00h    int 21hdo0_end:nopcode endsend start
输出结果:

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

转载于:https://www.cnblogs.com/litlife/p/7512770.html

你可能感兴趣的文章
UIScrollView实现图片循环滚动
查看>>
我的友情链接
查看>>
王垠:怎样写一个解释器
查看>>
解决unicodedecodeerror ascii codec can’t decode byte 0xd7 in position 9 ordinal not in range(128)...
查看>>
Redis和Memcached的区别
查看>>
CSS选择器种类及介绍
查看>>
struts2 + form 表单上传文件
查看>>
Centos7下安装mongodb
查看>>
ES架构及原理
查看>>
Windows7 自动更新时遇到故障
查看>>
我的友情链接
查看>>
spring加载配置属性文件(properties)
查看>>
redis设置
查看>>
android的唯一性
查看>>
深入理解java虚拟机——OutOfMemoryError异常
查看>>
《The way to go》中文版
查看>>
jQuery设置元素是否显示
查看>>
samsung Galaxy S3 i9300 获得root权限
查看>>
.NET EasyUI datebox添加清空功能
查看>>
查看Android手机保存的WIFI无线密码
查看>>