asm 8086 汇编除法溢出中断程序安装及配置中断向量表

本文详细介绍了如何在8086汇编中实现除法溢出中断程序的安装和中断向量表的配置,包括设置代码地址、复制中断处理程序、以及向量表的设置步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

asm 8086 汇编除法溢出中断程序安装及配置中断向量表

assume cs:code

; 安装除法溢出中断程序
code segment
start:              call st_of_i

                    mov ax,4c00h
                    int 21H

st_of_i:           ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
                    ; step 1: 设置要装载的代码的地址,si存储
                    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
                    mov ax,cs
                    mov ds,ax
                    mov si,offset sh_str

                    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
                    ; step 2: 代码要复制到的地址
                    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
                    mov ax,0
                    mov es,ax; 中断处理程序默认在内存 0段
                    mov di,200H; 溢出中断处理程序的偏移, 硬件规定

                    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
                    ; step 3: 开始传输中断处理程序
                    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
                    mov cx,offset div_of_end-offset sh_str; 传输长度
                    cld; 传输方向
                    rep movsb

                    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
                    ; step 4: 设置向量表
                    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
                    mov ax,0
                    mov es,ax
                    mov word ptr es:[0*4],200H
                    mov word ptr es:[0*4+2],0

                    ret


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;                   ; show string start
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
sh_str:             jmp short sh_st
                    ; 防止内存被覆写丢失, 类似定义方法局部变量
                    db "overflow!",0

sh_st:              ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
                    ; step 1: 取字符串,si首地址
                    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
                    mov ax,cs
                    mov ds,ax
                    mov ax,202h
                    add si,ax;首地址一定要取正确,根据代码位置去取

                    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
                    ; step 2: 输出位置,这里是是显存首地址(屏幕中间位置) 
                    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
                    mov ax,0B800H
                    mov es,ax
                    mov di,12*160+36*2; es:di 显存位置

                    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
                    ; step 3: 开始写
                    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
                    xor cx,cx
                    mov ah,2

s:                  mov cl,[si]
                    mov ch,0
                    jcxz show_end
                    mov es:[di],cl
                    mov es:[di+1],ah
                    inc si
                    add di,2
                    jmp short s

show_end:           mov ax,4c00h
                    int 21H
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;                   ; show string end
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
                    
div_of_end: nop

code ends
end

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值