![]() | 第10章 细节补充 | -279- | |||||||||||||||||||
exit: start: loop1: code |
jnz mov int pop iret mov mov mov mov mov mov pushf pop or push popf jmp ends end |
exit ax,0e07h 10h ax ax,0 ds,ax bx,4 dx,offset new01 word ptr ds:[bx],dx word ptr ds:[bx+2],cs ax ah,1 ax loop1 begin |
;若计数器未满65536则退出服务程序 ;计数器计满65536后响一次铃 ;恢复AX寄存器 ;中断返回 ;初始化DS寄存器指向中断向量表 ;BX寄存器指向01H中断向量 ;将中断服务程序的入口地址 ;CS:OFFSET NEW01填入中断向量表 ;将标志寄存器压入堆栈 ;标志寄存器弹出至AX寄存器 ;将TF标志位置1 ;将修改后的标志寄存器压入堆栈 ;而后将其送回标志寄存器 ;陷入死循环 |
||||||||||||||||||
这个程序还演示了如何自行编制中断服务程序,其实编制中断服务程序与一般的程序设计方法一样,只是要注意在中断向量表中的相应位置填入正确的程序入口。这个程序运行之后就不能返回系统了,它将TF标志设为1,使CPU进入单步运行状态,而后进入了死循环。由于工作于单步状态下,所以CPU每次执行一个指令后就会产生01中断。而后CPU开始执行01中断服务程序。 NEW01就是中断服务程序的入口,这一小段程序设了一个计数器COUNTER,每当计数器计满65536之后就响一次铃,所以计算机会发出连续的蜂鸣音。 最后要提醒大家的是当CPU响应中断时IF标志会自动清零,所以CPU在执行中断服务程序时是连续执行的,不再产生单步中断。 |
|||||||||||||||||||||
10.3 条件转移指令 | |||||||||||||||||||||
条件转移指令在8086/88汇编语言中占据着重要的地位,它是CPU实现"判断"的基础。通过前面一段的学习我们已经知道,条件转移指令的条件实际上都来自于标志寄存器。所以原则上说除了TF、IF、DF等用于控制CPU工作状态的几个标志位没有对应的条件转移指令外,其 | |||||||||||||||||||||
Copyright © 2004-2015 Reanimator | www.cookmoon.org |