我们要准备溢出程序,用于后面的测试:
assume cs:codeseg codeseg segment _start: mov ax, 1000H mov bl, 1 div bl mov ax, 4c00H int 21H codeseg ends end _start
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