首页 > 编程语言 > 详细

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

时间:2020-09-30 20:07:44      阅读:65      评论:0      收藏:0      [点我收藏+]

第一步、准备溢出程序

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

assume cs:codeseg

codeseg segment
	_start:
	mov ax, 1000H
	mov bl, 1
	div bl
	mov ax, 4c00H
	int 21H
codeseg ends

end _start

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

assume cs:codeseg

codeseg segment
	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
	;; 编写程序
	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
do0:
	jmp short _do0_start
	db "divide error!" ; 13
	_do0_start:
	mov ax, cs						; 设置数据地址
	mov ds, ax
	mov si, 0202H
	mov ax, 0B800H					; 设置显存地址
	mov es, ax					
	mov di, 12*160 + 33*2
	mov cx, 13						; 将字符串写入显存
	s:	mov al, ds:[si]
		mov ah, 2					
		mov es:[di], ax
		inc si
		add di, 2
		loop s
	mov ax, 4c00H					; 结束程序,不需要使用 iret 返回
	int 21H
_do0_end:
	
	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
	;; 复制程序(安装)
	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
start:
	mov ax, codeseg							; 原始地址
	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								; 执行复制
	
	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
	;; 设置中断向量表
	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
	; 中断程序,段地址:0000H,偏移地址:0200H
	; 中断程序的   段地址 写入 => 0000:6-7
	; 中断程序的 偏移地址 写入 => 0000:4-5
	mov ax, 0
	mov es, ax
	mov word ptr es:[0], 0200H
	mov word ptr es:[2], 0000H
	
	mov ax, 4c00H
	int 21H

codeseg ends

end start

参考文献

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


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

原文:https://www.cnblogs.com/k4nz/p/13755900.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!