当前位置: 代码迷 >> 综合 >> # 2020-10-11 #「汇编语言 第 3 版 王爽」- 参考答案:实验 12 编写 0 号中断的处理程序
  详细解决方案

# 2020-10-11 #「汇编语言 第 3 版 王爽」- 参考答案:实验 12 编写 0 号中断的处理程序

热度:0   发布时间:2024-02-27 08:07:19.0

第一步、准备溢出程序

我们要准备溢出程序,用于后面的测试:

assume cs:codesegcodeseg segment_start:mov ax, 1000Hmov bl, 1div blmov ax, 4c00Hint 21H
codeseg endsend _start

第二步、编写 0 号中断的处理程序

assume cs:codesegcodeseg segment;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 编写程序;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
do0:jmp short _do0_startdb "divide error!" ; 13_do0_start:mov ax, cs						; 设置数据地址mov ds, axmov si, 0202Hmov ax, 0B800H					; 设置显存地址mov es, ax					mov di, 12*160 + 33*2mov cx, 13						; 将字符串写入显存s:	mov al, ds:[si]mov ah, 2					mov es:[di], axinc siadd di, 2loop smov ax, 4c00H					; 结束程序,不需要使用 iret 返回int 21H
_do0_end:;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 复制程序(安装);;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
start:mov ax, codeseg							; 原始地址mov ds, axmov si, offset do0				mov ax, 0								; 目的地址mov es, axmov di, 200Hmov cx, offset _do0_end - offset do0	; 复制长度cld										; 复制方向rep movsb								; 执行复制;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 设置中断向量表;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 中断程序,段地址:0000H,偏移地址:0200H; 中断程序的   段地址 写入 => 0000:6-7; 中断程序的 偏移地址 写入 => 0000:4-5mov ax, 0mov es, axmov word ptr es:[0], 0200Hmov word ptr es:[2], 0000Hmov ax, 4c00Hint 21Hcodeseg endsend start

参考文献

K4NZ / 参考答案:实验 12 编写 0 号中断的处理程序
CSDN/汇编语言王爽第三版答案
百度文库/汇编语言实验答案 (王爽)

  相关解决方案