汇编语言(第3版,王爽著):实验12 编写 0 号中断的处理程序

实验12 编写 0 号中断的处理程序
  • 我们要做以下几个事情:
  1. 编写可以显示 "divide error!" 的中断处理程序:do0
  2. 将 do0 送入内存 0000:0200 处
  3. 将 do0 的入口地址 0000:0200 存储在中断向量表 0 号表项中
  4. 编写一个除法溢出的测试程序,用于触发除法错误,产生内中断
  • 代码实现:

文件名:exp12.asm

assume cs:code

code segment

    start:
        mov ax, cs
        mov ds, ax
        mov si, offset do0                      ; 设置 ds:si 指向源地址

        mov ax, 0
        mov es, ax
        mov di, 200h                            ; 设置 es:di 指向目的地址

        mov cx, offset do0end - offset do0      ; 设置 cx 为传输长度
        cld                                     ; 设置传输方向为正
        rep movsb

        ; 设置中断向量表
        mov ax, 0
        mov es, ax
        mov word ptr es:[0 * 4], 200h           ; 中断处理程序的偏移地址
        mov word ptr es:[0 * 4 + 2], 0h         ; 中断处理程序的段地址

        mov ax, 4c00h
        int 21h


    do0:
        jmp short do0start
        db "divide error!"
    do0start:
        mov ax, cs
        mov ds, ax
        mov si, 202h                            ; 设置 ds:si 指向字符串

        mov ax, 0b800h
        mov es, ax
        mov di, 12*160 + 36*2                   ; 设置 es:di 指向显存空间的中间位置

        mov cx, 13                              ; 设置 cx 为字符串的长度
    s:
        mov al, ds:[si]
        mov es:[di], al
        mov byte ptr es:[di + 1], 02h           ; 设置字符属性
        inc si
        add di, 2
        loop s

        mov ax, 4c00h
        int 21h


    do0end:
        nop

code ends

end start
  • 跟踪调试过程:


    实验12 跟踪调试过程
  • 测试程序:
    参考书本第 12 章中的例子,编写一个除法溢出的测试程序

文件名:exp12div.asm

assume cs:code

code segment
    start:
        mov ax, 1000h
        mov bh, 1
        div bh

        mov ax, 4c00h
        int 21h
code ends

end start
  • 测试程序的联调测试过程:


    实验12 中断处理程序和测试程序联调测试过程
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容