《汇编语言》第3版 (王爽)第12章

第12章解析


检测点12.1
(1).用Debug查看内存,情况如下:
在这里插入图片描述
则3号中断源对应的中断处理程序的入口地址为:0070:018B
解析: 在中断向量表中,1个表项存放一个中断向量,也就是1个中断处理程序的入口地址,对于8086CPU,这个入口地址包括段地址和偏移地址,所以1个表项占两个字(四个字节),高地址字存放段地址,低地址字存放偏移地址,所以N号中断源地址从N*4开始,3号中断源从第12个字节开始。
(2).存储N号中断源对应的中断处理程序入口的偏移地址的内存单元的地址为: Nx4
存储N号中断源对应的中断处理程序入口的段地址的内存单元的地址为:Nx4+2。

实验12 编写0号中断的处理程序
编写0号中断的处理程序,使得在除法溢出发生时,在屏幕中间显示字符串“divide error!”,然后返回到DOS。

assume cs:code

code segment

start:
      ;中断处理程序安装前的准备工作
      mov ax,cs   
      mov ds,ax  ;ds指向中断处理程序的段地址
      mov si,offset do0 ;si指向中断处理程序的偏移地址

      mov ax,0
      mov es,ax  ;es指向存放中断处理程序的内存单元的段地址
      mov di,200H ;di指向存放中断处理程序的内存单元的偏移地址
      mov cx,offset do0end - offset do0 ;计算中断处理程序的空间
      cld  ;设置传输方向为正
      rep movsb  ;将ds:di指向的内存单元中的字节送入es:di中(即将中断处理程序送入0000:0200;设置中断向量		
      mov ax,0  
      mov es,ax  ;es指向中断向量表
      mov word ptr es:[0*4],200h  ;将do0中断处理程序的入口地址送入0号表项中(偏移地址)
      mov word ptr es:[0*4+2],0   ;将do0中断处理程序的入口地址送入0号表项中(段地址)
      ;除法溢出测试
      mov ax,1000H  
      mov bh,1
      div bh

      mov ax,4c00h
      int 21h

      ;中断处理程序
  do0:jmp short do0start
      db "divide error!"

 do0start:mov ax,cs  
 	  mov ds,ax  ;ds指向字符串
	  mov si,202h ;使用si访问字符串

	  mov ax,0b800h  ;显存空间地址从0B800h开始
	  mov es,ax      ;es指向显存空间
	  mov di,12*160+36*2 ;使用di访问显存空间

	  mov cx,13 ;一共13个字符,循环13次
	s:mov al,[si] ;将单个字符取出放入al中
	  mov es:[di],al ;将字符写入显存空间
	  inc si   ;si+1指向下一个字符
	  add di,2 ;di+2指向下一个显存空间
	  loop s   
      mov ax,4c00h
      int 21h
do0end:nop

code ends
end start

在DOS中执行程序后效果如下:
在这里插入图片描述

相关推荐

  1. C++程序设计(3)谭浩强 10 习题

    2024-03-10 17:36:01       52 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-10 17:36:01       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-10 17:36:01       100 阅读
  3. 在Django里面运行非项目文件

    2024-03-10 17:36:01       82 阅读
  4. Python语言-面向对象

    2024-03-10 17:36:01       91 阅读

热门阅读

  1. (科目三)数据库基础知识

    2024-03-10 17:36:01       52 阅读
  2. MySQL用户创建和权限分配

    2024-03-10 17:36:01       45 阅读
  3. uniapp的扩展组件uni-popup 弹出层自动打开

    2024-03-10 17:36:01       43 阅读
  4. 秒杀的时候怎么使用Redis?

    2024-03-10 17:36:01       39 阅读
  5. 第二十六章 :Docker 内部 DNS 服务如何使用

    2024-03-10 17:36:01       38 阅读
  6. 智慧路灯物联网解决方案

    2024-03-10 17:36:01       49 阅读
  7. 深入理解nginx负载均衡round-robin算法

    2024-03-10 17:36:01       41 阅读
  8. workflow系列教程(9)wfrest之mysql任务

    2024-03-10 17:36:01       35 阅读
  9. vue,provide和inject,备忘

    2024-03-10 17:36:01       46 阅读
  10. 硬件设计中数据运算相关处理方法

    2024-03-10 17:36:01       37 阅读