汇编0号中断程序模拟

来源:互联网 发布:淘宝怎么根据图片搜索 编辑:程序博客网 时间:2024/04/29 12:55


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 ENDSSTACKS SEGMENT    dw 8 dup(0)STACKS ENDSCODES SEGMENT    ASSUME CS:CODES,DS:DATAS,SS:STACKSSTART: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
原创粉丝点击