王爽汇编 实验12编写0号中断处理程序

ASSUME    CS:codesg
              codesg SEGMENT
              start:  
                       MOV       AX,CS
                       MOV       DS,AX         ;程序段地址
                       MOV       SI,OFFSET DIV_s
                       MOV       AX,0
                       MOV       ES,AX
                       MOV       DI,0200H      ;保持中断处理程序的内存地址
                       MOV       CX,OFFSET DIV_ok - OFFSET DIV_s  ;得到中断处理程序的长度
                       CLD                     ;正向传送
                       REP       MOVSb
                       MOV       AX,0
                       MOV       ES,AX
                       MOV       WORD PTR ES:[0*4],0200h
                       MOV       WORD PTR ES:[0*4+2],0000h  ;设置中断向量表
                       MOV       AX,4c00h
                       INT       21h
         DIV_s:   JMP       SHORT DIV_s1
                       DB        "divide error!"
         DIV_s1:  MOV       AX,0b800h
                       MOV       ES,AX         ;显存缓冲区
                       MOV       DI,12*160+38*2 ;显存缓冲区大约中间位置

                 ;25/2=12(取整行数)*160(每行的字节数)+80/2=40(这里取用38列)*2(每列字符所占2位,低位存放ASCII码.高位存放属性)
                       MOV       AX,CS
                       MOV       DS,AX         ;当中断处理程序加载时,CS必然等于该处理程序的段地址0000:0200,

                                                       ;而字符串"divide error!"的段地址也是它
                       MOV       SI,202h       ;JMP       SHORT DIV_s1 占位2个机器码,所以偏移地址是0200+2
                       MOV       CX,12         ;字符串"divide error!"的长度
         DIV_s2:  MOV       AL,DS:[SI]   ;读取字符串
                       MOV       ES:[DI],AL   ;显示字符串
                       INC       SI
                       ADD       DI,2          ;一个字符占两个字节,低位存放ASCII码.高位存放属性
                       LOOP      DIV_s2
                       MOV       AX,4c00h
                       INT       21h
              DIV_ok:  NOP
              codesg ENDS
              END       start

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值