汇编0号中断程序模拟


1.什么是中断?

            中断是指cpu停止当前指令,转而去执行其他指令或代码的一种机制,其中中断的信息被保存在中断向量表中。
                                   

                                             80x86中断向量
I/O ADDR
INT TYPE(16进制)
FUNCTION
00 ~ 03
0
除法溢出中断
04 ~ 07
1
单步(用于DEBUG)
08 ~ 0B
2
非屏蔽中断(NMI)
0C ~ 0F
3
断点中断(用于DEBUG)
10 ~ 13
4
溢出中断
14 ~ 17
5
打印屏幕
18 ~ 1F
6/7
保留
                                   

2.我们来模拟0号中断,即除法溢出中断

DATAS SEGMENT
    
DATAS ENDS

STACKS SEGMENT
    dw 8 dup(0)
STACKS ENDS

CODES SEGMENT
    ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:mov ax,0
      mov es,ax                        ;标记目标内存段地址
      mov di,0200h                     ;标记目标地址偏移量
      mov ax,cs                        ;标记源段地址
      mov ds,ax                        
      mov si,offset do0                ;标记源地址偏移地址
      mov cx,offset do0end-offset do0  ;标记字符处理函数代码长度
      mov word ptr es:[0],di
      mov word ptr es:[2],es
      cld 
      rep movsb                        
      int 00h                          ;模拟0号中断
  do0:jmp do1
      db 'overflow'
  do1:mov bx,cs
      mov ds,bx
      mov si,0202h                     ;因为jmp指令占2字节,所以di偏移量为202h
      mov di,12*160+5*2
      mov ax,0b800h                    ;标记显存地址
      mov es,ax
      mov cx,8
    s:mov byte ptr al,ds:[si]          ;高位地址记录字符属性,低位地址记录字符ASCII码 
      mov byte ptr es:[di],al
      inc si
      add di,2
      loop s
      mov ax,4c00h
      int 21h 
      do0end:nop                       ;标记结束以方便记录指令长度
CODES ENDS
    END START



  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值