目录 上一页 下一页 下一章

第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

目录 上一页 下一页 下一章