![]() | 第3章 中断调用与子程序 | -29- | |||||||||||||||||||
“nn”可以是00H-0FFH中任一个数。① 每个被使用中断都有对应的中断服务程序,所有这些中断服务程序在内存中的起始(入口)逻辑地址被组织在一起,保存于内存中的一段特定的区域内。这段区域从逻辑地址0000:0000开始,到0000:03FFH为止共1KB字节。 每4个字节保存一个中断服务程序的入口,从0000:00000开始,0-3字节保存0号中断服务程序的入口地址,4-7字节保存1号中断服务程序的入口地址,以此类推。保存所有256个中断服务程序的入口地址恰好使用1KB存储器。 由于每个入口地址都指向内存中的一段程序,所以我们引用数学中向量的概念,把这些入口地址称为"中断向量",256个"中断向量"组织在一起形成一个"表",我们把这个"表"称为"中断向量表"。这个表就是CPU取得中断服务程序入口地址的依据。给定一个中断号,即可根据下式计算其对应服务程序入口地址在中断向量表中的偏移量: 偏移量=nn×4 利用DEBUG程序可以观察到中断向量表。进入DEBUG,在"-"后打入"D0:0[Enter]",屏幕上就会显示出中断向量表中的部分入口地址。 |
|||||||||||||||||||||
![]() |
为了能观察内存中任意位置存放的数据,DEBUG提供了一条"内存转储"命令,命令码是"D"(Dump)。使用方法很简单,在提示符后输入"D 逻辑地址 长度"并回车,DEBUG会从指定地址开始将内存中的数据以16进制形式显示在屏幕上,同时在屏幕右则显示出一些数据所对应的ASCII字符。 如果没有给出完整的逻辑地址,只给出偏移量,则DEBUG会默认DS为段地址。如果未指定地址,则DEBUG就认为起始地址是跟在由前一个D命令所显示的单元的后面。连续输入不带参数的D命令,可连续显示内存中的数据。下面列出了D命令的一些用法: -D0:0[Enter] 从内存0:0处开始显示数据 -DES:100[Enter] 从内存中ES所指定段的偏移100H处开始显示数据 -D0B30:0 3FF[Enter] 从内存中0B30:0处开始连续显示1KB数据 |
||||||||||||||||||||
下面列出的数据就是笔者所用PC中的一部分中断向量表。 | |||||||||||||||||||||
-d0:0 5F | 16进制形式的数据 | 相应的ASCII码 | |||||||||||||||||||
0000:0000 | 89 3E 7E BE B0 05 70 00-C3 E2 00 F0 B0 05 70 00 | .>~...p.......p. | |||||||||||||||||||
0000:0010 | B0 05 70 00 54 FF 00 F0-4C E1 00 F0 6F EF 00 F0 | ..p.T...L...o... | |||||||||||||||||||
0000:0020 | 76 18 B0 D3 88 20 B0 D3-6F EF 00 F0 6F EF 00 F0 | v.... ..o...o... | |||||||||||||||||||
0000:0030 | 6F EF 00 F0 6F EF 00 F0-57 EF 00 F0 B0 05 70 00 | o...o...W.....p. | |||||||||||||||||||
0000:0040 | C4 21 B0 D3 4D F8 00 F0-41 F8 00 F0 EA 02 A7 B0 | .!..M...A....... | |||||||||||||||||||
0000:0050 | 39 E7 00 F0 AE 03 71 02-01 06 AC B2 D2 EF 00 F0 | 9.....q......... | |||||||||||||||||||
屏幕右边所显示的是和数据对应的ASCII字符,关于ASCII码的知识第一章中有介绍。在中断向量表中有一些向量为0,表示这个向量未使用。 | |||||||||||||||||||||
① INT指令是“万能”的,它可以调用系统中任意一个中断,不论这个中断为谁服务。 | |||||||||||||||||||||
Copyright © 2004-2015 Reanimator | www.cookmoon.org |