(2011.11.03)汇编_王爽_第12章_学习小结
2011-11-03 18:07
281 查看
(2011.11.03)汇编_王爽_第12章_学习小结
本章内容:
1. 了解什么是内中断。
2. 如何处理内中断。
3. iret指令与中断处理程序的写法。
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
一.概念
1. 内中断:
CPU可以在执行完当前正在执行的指令之后,检测到从CPU外部发送过来的或内部产生的一种特殊信息(中断信息),并且可以立即对所接收到的信息进行处理。
2. 中断源
中断信息的事件,即中断信息的来源。
3. 中断向量表
中断处理程序入口地址的列表。
(在内存中保存着256个中断源所对应的中断处理程序入口0000:0000~0000:03FF)
4. 中断过程
CPU收到中断信息后,要对中断信息进行处理,首先将引发中断过程。
二. 产生中断原因:
1. 除法错误,比如,执行div指令产生的除法溢出(中断内型码0)
2. 单步执行(中断内型码1)
3. 执行into指令(中断内型码4)
4. 执行 int 指令
二. 中断过程主要任务
用中断码在中断向量表中找到中断程序的入口地址,设置CS和IP。
1. 取得中断类型码N
2. pushf
3. TF = 0, IF = 0
4. push CS
5. push IP
6. (IP) = (N*4), (CS) = (N*4+2)
三. 中断处理程序的编写
1. 保存用到的寄存器
2. 处理中断
3. 恢复用到的寄存器
4. 用iret指令返回
功能指令:iret
指令说明:pop IP -> pop CS -> popf
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
本章内容:
1. 了解什么是内中断。
2. 如何处理内中断。
3. iret指令与中断处理程序的写法。
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
一.概念
1. 内中断:
CPU可以在执行完当前正在执行的指令之后,检测到从CPU外部发送过来的或内部产生的一种特殊信息(中断信息),并且可以立即对所接收到的信息进行处理。
2. 中断源
中断信息的事件,即中断信息的来源。
3. 中断向量表
中断处理程序入口地址的列表。
(在内存中保存着256个中断源所对应的中断处理程序入口0000:0000~0000:03FF)
4. 中断过程
CPU收到中断信息后,要对中断信息进行处理,首先将引发中断过程。
二. 产生中断原因:
1. 除法错误,比如,执行div指令产生的除法溢出(中断内型码0)
2. 单步执行(中断内型码1)
3. 执行into指令(中断内型码4)
4. 执行 int 指令
二. 中断过程主要任务
用中断码在中断向量表中找到中断程序的入口地址,设置CS和IP。
1. 取得中断类型码N
2. pushf
3. TF = 0, IF = 0
4. push CS
5. push IP
6. (IP) = (N*4), (CS) = (N*4+2)
三. 中断处理程序的编写
1. 保存用到的寄存器
2. 处理中断
3. 恢复用到的寄存器
4. 用iret指令返回
功能指令:iret
指令说明:pop IP -> pop CS -> popf
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
; 程序名称:1201_内中断_编写中断处理程序.asm ; 程序功能:编写可以显示"overflow!"的中断处理程序. assume cs:code code segment start: ; 第一步: ; ----------------------------------------------------------------------------------- ; 将程序安装到程序向量表中 ; 即将由do0至doend段中的代码复制到向量表中 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 ; 0号中断向量表项为0:0 mov es, ax mov word ptr es:[0*4], 200h ; 偏移地址[低] -- 0:0 mov word ptr es:[0*4+2], 0 ; 段地址[高] -- 0:2 ; ---------------------------------------------------------------------------------- mov ax, 4c00h int 21h ; 第三步,开始中断处理子程序 ; ----------------------------------------------------------------------------------- ; 将字符串段写在代码段code中,可以防止被覆盖 do0: jmp short do0start db "overflow!" ; ----------------------------------------------------------------------------------- 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, 9 ; 设置cx为字符串长度 s: mov al, [si] mov es:[di], al inc si add di, 2 loop s mov ax, 4c00h int 21h do0end: nop ; 空操作,不执行指令 ; ------------------------------------------------------------------------------------ code ends end start
相关文章推荐
- (2011.10.28)汇编_王爽_第六章_学习小结
- (2011.11.02)汇编_王爽_第10章_学习小结
- (2011.11.04)汇编_王爽_第14章_学习小结
- (2011.11.10) 汇编_王爽_第17章_学习小结
- (2011.11.07) 汇编_王爽_第15章_学习小结
- (2011.10.29)汇编_王爽_第七章_学习小结
- (2011.11.02)汇编_王爽_第11章_学习小结
- (2011.10.29)汇编_王爽_第08章_学习小结
- (2011.11.01)汇编_王爽_第09章_学习小结
- (2011.11.04) 汇编_王爽_第13章_学习小结
- (2011.10.26)汇编_王爽_第五章_学习小结
- (2011.11.09)汇编_王爽_第16章_学习小结
- 王爽汇编语言第二版学习笔记之实验11
- 8086汇编学习小记-王爽汇编语言第十五章外中断及实验15
- 汇编语言学习笔记4(王爽)
- 汇编语言学习笔记3(王爽)
- 王爽汇编语言第二版学习笔记之检测点13.1
- 王爽汇编语言第二版学习笔记之实验14
- 王爽汇编语言学习笔记(六)
- 王爽汇编语言第二版学习笔记之实验12