千哥读书笔记:汇编语言(王爽第四版)第12章 实验12

本章实验12,要求编写0号中断的处理程序,使得在除法溢出时,在屏幕中间显示字符串“divide error!”,然后返回到DOS。要实现的效果如下图所示:

在编写这个实验程序之前,我们先复习一下本章的重点内容。

1、中断向量表,指向的是中断程序的地址入口。

2、CUP根据中断类型码,确定中断向量表的表项号,然后根据表项号,找到中断程序的地址入口。

3、中断类型码,主要分为:

    1)类型码除法错误:0

    2)单步执行:1

    3)执行into指令:4

    4)执行int指令,格式为 int n,指令中的n为节字型立即数,是提供给CUP的中断

4、中断向量表,位于内存地址0处:从内存0000:0000到0000:3FF

5、中断向量表的表项占2个字:高地址字存放段地址,低地址字存放偏移地址。

6、CUP找到中断程序入口地址,然后将原来的CS和IP值保存

7、CPU设置CS和IP,这个过程称为中断过程。

上述内容如下图所示:

其中,CPU将原来的CS和IP保存这步操作,又分为以下几个步骤:

1、标志寄存器入栈(pushf)

2、设置标志寄志器第8位TF和第9位IF值为0

3、CS内容入栈(push cs)

4、IP内容入栈(push ip)

而中断处理程序的编写方法主要是:

1、保存用到的寄存器

2、处理中断

3、恢复用到的寄存器

4、用iret指令返回。iret指令相当于pop ip、pop cs、popf

需注意的是:

1、CPU在收到中断信息后,会由硬件自动执行中断过程,故在编程中不用涉及包括pushf、push cs、push ip等指令。

2、由于本章实验12只涉及除法溢出产生提示信息,并自动返回DOS界面,未涉及中断返回其他程序的问题,故不用iret指令。

3、编写本章实验12整个程序时,可将其中的中断程序代码传送到0000:0200至0000:02FF的内存区。

4、由于除法溢出中断类型码为0,故中断程序入口地址从0*4地址单元有效,段地址在0*4+2的字单元,偏移地址在0*4字单元

在做这个实验之前,王爽老师给出了一个示例程序12.3,代码如下:

=================================================

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,4c00h

       int 21h

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值