1贴子主题 有关TF
张爱玲语录-冬至手抄报
1.贴子主题: 有关TF
002xxx(20030518 10:55am) <
br>关于TF标志位的设置和清除是由程序来做的,没有特定的指令可以完成。书上P464倒数第二段说在中
断服务程
序返回前TF位既不是1也不是0,当指令IRET执行时才把TF位改为新的值。我想问的是
the new state是什么?是
在从中断服务子程序返回时从堆栈中POP出的原来的FLAG
原封不动的值,还是在返回的时刻又有新的中断来时,
原来的FLAG不POP出来,而是再装入这个新
的中断的FLAG标志? 后面的这一点也就是P463上面第三行的语句。
002yyy(20030518 11:30am)
我是这么想的,不知对不对:
平时TF应该为“0”吧,否则不是单步执行方式了吗?
TRON和TROFF是对堆栈中的
flags的TF位执行的,但因书上example12-1,example12-2两个程序的末尾都是<
br>“IRET”所以会再把它返回给当前的flag register--进行中断时的flag
register?
我对意思是,设置TF位的状态是对于中断服务子程序来说的,如果你想单步执行
你的中断服务子程序,那么进
行TRON,否则TROFF。
qbxiong(20030519 10:25am)
两位充分利用书上的例子来获取更多实用技术的做法值得提倡。
对于标志寄存器中
的中断标志IF,设有专门的指令STI将其置位,专门的指令CLI将其复位;但是,却并没有类
似的
指令,可以直接地操纵标志寄存器中的陷阱标志TF。
不过,这并不意味着就没有办法可以改变标志寄存器中T位的状态了;办法总比问题多:
<
br>书上的例子是,因中断时标志寄存器自动地压入了堆栈,故可以在中断服务程序中,用BP间址找到标志寄
存器
存放的内存单元,并用OR指令将其中的对应于TF的第8位置位;这样,当IRET指令使堆栈中
存放的原标志寄存器
内容自动地弹回到CPU中去时,其中的TF已是新的状态“1”了。
以上是464页例12-1标号为TRON的中断服务程序。同一页例12-2标号为TROFF的中断
服务程序,原理与之相同,
不同的只是用AND指令将其中的第8位复位。
推而广
之,这种将CPU或IO接口中的寄存器,先复制到内存中,在内存中改变其中的某些位,然后再复制回去,从而改变了CPU或IO接口中寄存器的相应位的状态,不失为一种普适的做法。其实,在我们课本已经接触
到的
例子中,也还有这样的做法,只是没有如此明讲而已。哪位还能找到其它的例子吗?
002xxx(20030519 12:09pm)
那么当从中断服务程序返回时,如果有新的中断打断它,此时FLAG还从堆栈中弹出来吗?
002yyy(20030519 07:22pm)
因为之前已经清了IF,所以此时应该不会响应新的中断(我认为这里处于p462最下端的第二步)。
2.贴子主题:
书474页图12-13关于用缓冲器扩充中断结构的方法有个疑问
002zzz(20030517
12:43pm)
器件74ALS244为什么八个端口不各接一个IR引脚,这样不就可以扩充到8
个,而书中是拿一个通过上拉电阻接电
源,这样不就少接一个IR了吗?它有什么特殊的作用吗?
qbxiong(20030517 05:00pm)
问得好。请再读一下474页最后那个自然段。
002uuu(20030517 09:35pm)
我有同样的问题,而且最后一个自然段的说明我没有看明白.
书上说“如果两个或
者更多的中断请求连续发生,那么就产生一个新的中断向量.当IR0,IR1同时发出中断请求
那么F
CH为新的中断向量号,而且若IR0收到的中断优先级比较高的话那么这个新的地址FCH就作为为IR0的中
断向量地址”
我的问题是下一句,为什么说“the entire top
half of the vector table and its interrupt vectors
must
be used to accommodate all possible
conditions of theses seven interrupt request
inputs”
它这里的128个向量是由这7个中断输入组合形成的吗?就这道例题而言,它的中断
向量表应该是怎样的?而且我
想不出这种处理多个中断输入的方式有什么效率可言.
qbxiong(20030518 09:36am)
讨论已渐入佳境,002uuu已注意到“the entire top half of the
vector table”的问题。还请注意,002zzz
首问中的“书中是拿一个通过上拉电阻接
电源”,这“一个”,从图中看是D7,决非偶然。大家不妨翻回课本
第459页,看一下倒数第2个自
然段,也就是“Interrupt Vectors”小节中的第2段,或许能悟出其中的道理了
吧。
002uuu看书很仔细,有意义的词都不放过,这是值得提倡的学习精神,问到的“效率”
,可能是指474页最后那
个自然段中的“cost-
effective”吧,那是节省成本的意思,英文文献中也经常出现。
002xxx(20030518 10:18am)
the entire top
half of the vector table and its interrupt vectors
是指从中断矢量号为80H-0FFH的这
128个中断矢量。它刚好是the vector
table 的上一半。这就是为什么D7接1的原因所在了,D7为1则限制了这
个电路所产生的中断
至少得从80H开始。这个D7接1不是偶然的,因为只有前32个中断向量是被reserved by
Intel.
后面的244个才是user interrupt
vectors.故只有D7接上拉电阻,使其为1,保证中断矢量号从31H以上的80H
开始。
002zzz(20030520 04:49pm)
谢谢大家,我知道了,原来它这样接个上拉电阻,是为了使这里的中断向量号在USER
INTRERRUPT的允许范
围内。
3.贴子主题:
书上478页图不懂之处
002vvv(20030513 02:00pm)
图中A1为何如此连呢?
002www(20030513
10:34pm)
你注意到了吗?一个8259A的两个端口之间相差2,所以要用A1连,而不能用A0
002ppp(20030514 10:43pm)
不过想问一下,为什么书上很多的例子的端口号都要两个两个隔开的?有什么道理吗
qbxiong(20030515 04:04pm)
有道理。
请回顾pp.395-397的标题为“8- And 16-Bit IO Ports”的那一小节
。看395页图11-13,设想将8259A的8根数
据引脚接数据总线的D7-D0
,比较自然的做法就是将这片8259A要用的2个端口地址,安排为连续的偶地址。
再回到476页,看倒数第3个自然段关于8259A的“D7-D0”的描述,可以理解其道理了吧。
002zzz(20030516 03:23pm)
对,因为数据线
的缘故,16位有两个bank,所以到底用哪个bank呢,这个就可以通过地址线A0来设置
qbxiong(20030517 11:11am)
注意到002zzz在新
辟的“是否A0=0时,8位IO端口一定接的是D0到D7,难道不可以接D8到D15吗?”主题中提出:<
br>“我觉得,把数据线接到哪个bank是人为规定的吧,像我这样的想法不知道可不可以,还是机器默认的
规则?”;
讲到了bank,也就讲到了问题的实质。
我想,可以在本主题中将此话题继续下去:
478页的图12-16是把8259
A的8根数据引脚接数据总线的D7-D0,所以将这片8259A要用的2个端口地址,安排为连
续的
偶地址;当然也可以人为安排把8259A的8根数据引脚接数据总线的D15-D8,那么,这片8259A的
2个端口地
址,就是连续的2个奇地址了。接下来的问题就是:若如此,图12-16又应作何改动呢?
当然,书上没有给出图
中16L8的编程,那其实是有关系的。
002qqq(20030517 08:59pm)
不过为什么同样接d0到d7,484页图将A0接到8259A的A0了呢?
002yyy(20030517 09:06pm)
我的maybe不成熟看法:
484页的是cpu是8088,外部数据线是8位的,它只有一个体的
002vvv(20030517 09:12pm)
因为484页这张图书上说“the
8259A is decoded at 8-bit IO ports 48h and
49h。这两个端口地址只差一,
所以接A0了
002qqq(20030517 09:14pm)
哦,应该是数据总线8位的缘故吧。
002rrr(20030519 12:16pm)
本来我也想问的,现在看了明白了不少
4.贴子主题:
P469 FIGURE 12-8
002sss(20030510 12:51pm)
为什么会有两个*INTA?
002ttt(20030510
01:54pm)
书上说 There are two *INTA pulses
generated by the system that ae used to insert the
vector type number
on the data
bus.而对于图上打*处,时序图下又有这么一句注释 This portion of the data
bus is ignored
and usually contains the vector
number.这是否指系统响应中断请求时,通过*INTA在数据总线D7-D0上放上
的有效的中
断类型号是第二次*INTA 脉冲处的。这里很不好理解,其中有何道理吗?我也不明白为何有两处
*INTA。哪位懂时序图的,帮忙解释一下啊!
qbxiong(20030510 02:45pm)
下面引用由002ttt在 20030510 01:54pm 发表的内容:
而对于图上打*处,时序图下又有这么一句注释 This portion of the data bus is ignored and usually
contains the vector number.这是否指系统响应中断请求时,通过*INTA在数据总线D7-D0上放上的有效
的中 断类型号是第二次*INTA 脉冲处的。
问得好;并且理解了这张图本身。
*INTA是微处理器发出的,微处理器的设计者这样设计,即中断响应周期中先后发两个*INTA,是考虑了 级连
(Cascade)的情况:第1级汇总多个第2级的中断请求给微处理器的INTR;响应的时候 ,微处理器用第1个*INTA
告诉第1级,我已进入中断响应周期,然后第1级就可以去通知第2级中 发出请求的那位,你可以在下面那个*INTA
到来时,把自己的向量号放到数据总线上去;微处理器在 这第2个*INTA期间采样数据总线,得到请求中断者的
向量号。
但是,实际 的系统中,也有中断源并不多,不用级连的情况,比如书上这第12-2节中所有的例子,看图就知道,
在第1个和第2个*INTA到来时,都会有同样的向量号放上数据总线;当然,微处理器已设计为在第2个*I NTA期间
采样数据总线,对于第1个*INTA期间数据总线上的
向量号,就只能是ignore了。
002yyy(20030511 09:17am)
那么书上的这个图是不是不对的?
应像ch12-1&中slides20那样?
002sss(20030511 12:31pm)
应该是的,谢谢。
5. 贴子主题: P469 FIGURE 12-8
[
汇 集者注:此主题与
4
天前开始的上一主题(碰巧同名)问题一样,内容也重复,这种情况最好不 要新开主
题
]
002aaa(20030514 08:41pm)
为什么有两个*INTA?
002vvv(20030514 09:43pm)
这个好像老师讲过的,这是在cascade情况下,先传给master,再传给slave
002www(20030514 10:17pm)
在一个8259 A的情况下,第一个*INTA使得ISR的相应位置1,第二次时将相应中断号放到数据总线上。
在 级联模式下,作用相似,只不过是要通过三根cas将设备号传输到slave,第二次响应后由slave将中 断号放到数
据线上
002bbb(20030514 10:47pm)
我想一楼问的是为什么图上会有两个INTA的线吧,我也不懂,请赐教
002ccc(20030520 04:09pm)
*LOCK又是什么东西?好象和第1个*INTA配合的很紧密嘛。
qbxiong(20030520 09:15pm)
问得好。
提示:
关于*LOCK,可以看教案ch09-1第31页的定义。不过,此处的*LOC
K并非由带“LOCK:”前缀的指令引起,而是
进入中断响应周期就自动变为有效,直到中断响应完毕
(即向量号放上了数据总线)才撤去。
还有,*LOCK信号可以通过即将在13-3节讲的828
9总线判优器起作用(见已在课程主页上发布的教案ch13-3第12
页)。
大家知道*LOCK信号的作用了吧。
想一下:为什么在中断响应周期先后两个*INTA期间,要让*LOCK引脚变为有效呢?
002ddd(20030520 09:38pm)
两个中断响应周期有严格的
时序逻辑,如果在一个响应周期以后,总线被其它控制器占据,之后总线将失效,
因为它并没有允许插入
等待状态。不知道是不是这样?
qbxiong(20030520
10:05pm)
讲得对,用*LOCK面向的就是多处理器系统,单处理器系统是用不着*LOCK的。
今天上课讲DMAC时已经讲到,若有请求,CPU是会在完成一个机器周期之后就放弃总线控制权的;
而中断响应用
了两个机器周期,每发一个*INTA就是一个机器周期;大家可以想一下:如果在这两个
机器周期之间放弃了总线
控制权,会发生什么情况呢?
qbxiong(20030521 04:30pm)
下面引用由002bbb在
20030514 10:47pm 发表的内容:
我想一楼问的是为什么图上会有两个INTA的线吧,我也不懂,请赐教
正确的图见教案ch12-1&2第20页。
002uuu(20030521 06:24pm)
再多罗嗦一句问一个问题,多个825
9A级联,如书后的问题9个8259A形成64个中断入口,Master的CAS0--
CAS2和
Slave的CAS0--CAS2是如何连接的呢?
我的方式是通过三个八个引脚的NAND
gate连接其他8个8259A的对应位置,因为没有经验,不知道这么处理是否
妥当.
002www(20030521 06:37pm)
让master的cas2
-cas0直接分别连到各个slave就可以了吧,我觉得似乎没必要用与门。
002qqq(20030521 09:26pm)
同意楼上的说法,直接相连即可
qbxiong(20030521 09:53pm)
下面引用由002uuu在 20030521 06:24pm 发表的内容:
再多罗嗦
一句问一个问题,多个8259A级联,如书后的问题9个8259A形成64个中断入口,Master的
p>
CAS0--CAS2和Slave的CAS0--CAS2是如何连接的呢?
确实应该问,并非“罗嗦”。
可看教案ch12-3to5第19页的图和20-21页的说明;注意CAS0--
CAS2也被称为一种“bus”。
002uuu(20030522 11:49am)
大概有些明白这个cascade bus 的意思了,CAS0--CAS2一共3条线,若是对所有
的slave进行内部操作,作为具体某
一个slave的内部地址可以通过这三条线选通,这样就和总
线的形式很像了,我想总线的意思就是这样吧.
qbxiong(20030522 03:38pm)
对。
这种拓扑,是教案
ch01_Bus第17页讲的“合用线”的一个子类,特点是“不对称”:只有一个Master,只能
由它发,其它都是Slave,并且都只能收,曾有人将这种拓扑称为“Multidrop”。
6.贴子主题: P476 EXAMPLE 12-7
002eee(20030510 02:48pm)
想问一下
LEVEL_1,LEVEL_2,LEVEL_3 分别是什么,跳转到它们所指的地方在哪里?
程序中没有标出来啊?
qbxiong(20030510 03:18pm)
LEVEL_0是为第1片82C55端口B中断请求服务的中断服务程序的入口;
LEVEL_1是为第1片82C55端口A中断请求服务的中断服务程序的入口;
LEVEL_2是为第2片82C55端口B中断请求服务的中断服务程序的入口;
LEVEL_3是为第2片82C55端口A中断请求服务的中断服务程序的入口。
7.贴子主题: 书本的487的修改和问题?
002fff(20030515 12:18pm)
P489的Example-12-3
的代码倒数第四行的
OUT 49H,AL
应改为 OUT
48H,AL
问题为:
这条指令使8259产生哪些信号?
002zzz(20030516 01:41pm)
我觉得就是书中所说的产生8259A的EOI信号,你可以看看书中关于OCW2的定义
8.贴子主题:
课本的P473上的EXAMPLE12-6中的汇编代码的倒数第3行的INC对吗?
002ccc(20030517 09:30am)
课本的P473上的EXAMPLE12-6中的汇编代码的倒数第3行的INC对吗?
是否应改成DEC
002ppp(20030518
08:19am)
INC应该是对的吧.OUTP是队列的头指针,移动头指针使数据出队列.在P4
72里的Code的0121行是移动INP,也就是
队列的尾指针使数据入队列.用的
也是INC,只要头指针和尾指针移动方向一样就会构成队列的.
比如INP和OUTP开始都指向0
,然后a,b,c,d入了队列,INP就指向4,OUTP还是0,这时候OUTP加1指向1的话,a就出队
列了.
9.贴子主题: 实模式下和保护模式下的中断.
002xxx(20030518 10:35am)
我想问两个问题:
1.在保护模式下的IDT可以放在内存的任意空间里,而中断向量表只能放在内存的最低层的1024个字节
里面。这
是正确的,但我不明白书后第14题的答案里说道这么一句话:保护模式下的中断服务程序可以
放在内存的任意
空间,但实模式下的却不可以。why???在保护模式下只是因为在描述符中的seg
ment selector 可以定义段地址
在内存的任意空间,所以中断服务程序可以放在内存的任
意空间。但在实模式下,我也可以把中断服务程序的
段地址定义在内存的任意空间里呀。书上又没有说这
个段地址一定也要在the first 1M的空间里???
2.书上P463中间部分的第三段末里a single selector
„„„„这句话是什么意思?它和全局描述符表有什么
联系?
002yyy(20030518 11:46am)
80868088的下地址空间只有1
M。高档的机器在实模式下运行时或许规定只用到A19-A0,其余地址线高位置为0,
这样就只能寻
址到FIRST 1M了。
我觉得这是最优的实现方法。
其实很多东西或许是老师所说的“非不能也,是不为也”
002ggg(20030518 01:46pm)
IDT本身也是一个段,对这个段的描述自然是放在GDT中了;
其实保护模式不只是寻址空间扩大这么简单的意思,所谓“保护”不知道大家是怎么理解的;
实模式下面总的寻址空间只有1M,你可以去看一下在着1M的空间里,是怎么分布一些程序和数据的。
中断服务
程序别忘了,还是要装到CS和IP中去的,而在实模式下面寻址方式就是简单的段地址+偏移
量;而在保护模式
下面,他的寻址方式的不同,意味着中断服务程序的载入不再是实模式下面那么简单的
计算方法,在保护模式
下面地址往往可以重定位到内存中允许的任何地方;
当然了
,作为程序员的我们,仍然可以按照段方式在我们的虚拟空间里面编程,只是此时的段的意思有了不同
的
意思
1.贴子主题: 有关TF
002xxx(20030518
10:55am)
关于TF标志位的设置和清除是由程序来做的,没有特定的指令可以完成。书上P4
64倒数第二段说在中断服务程
序返回前TF位既不是1也不是0,当指令IRET执行时才把TF位改
为新的值。我想问的是the new state是什么?是
在从中断服务子程序返回时从堆栈中PO
P出的原来的FLAG原封不动的值,还是在返回的时刻又有新的中断来时,
原来的FLAG不POP出
来,而是再装入这个新的中断的FLAG标志? 后面的这一点也就是P463上面第三行的语句。
002yyy(20030518 11:30am)
我是这么想的,不知对不对:
平时TF应该为“0”吧,否则不是单步执行方式了吗? TRON和TROFF是对堆栈中的flags的TF位执行的,但因书上example12-1,exa
mple12-2两个程序的末尾都是
“IRET”所以会再把它返回给当前的flag
register--进行中断时的flag register?
我对意思是,设置TF位的状态是
对于中断服务子程序来说的,如果你想单步执行你的中断服务子程序,那么进
行TRON,否则TROF
F。
qbxiong(20030519 10:25am)
两位充分利用书上的例子来获取更多实用技术的做法值得提倡。
对于标志寄存器中
的中断标志IF,设有专门的指令STI将其置位,专门的指令CLI将其复位;但是,却并没有类
似的
指令,可以直接地操纵标志寄存器中的陷阱标志TF。
不过,这并不意味着就没有办法可以改变标志寄存器中T位的状态了;办法总比问题多:
<
br>书上的例子是,因中断时标志寄存器自动地压入了堆栈,故可以在中断服务程序中,用BP间址找到标志寄
存器
存放的内存单元,并用OR指令将其中的对应于TF的第8位置位;这样,当IRET指令使堆栈中
存放的原标志寄存器
内容自动地弹回到CPU中去时,其中的TF已是新的状态“1”了。
以上是464页例12-1标号为TRON的中断服务程序。同一页例12-2标号为TROFF的中断
服务程序,原理与之相同,
不同的只是用AND指令将其中的第8位复位。
推而广
之,这种将CPU或IO接口中的寄存器,先复制到内存中,在内存中改变其中的某些位,然后再复制回去,从而改变了CPU或IO接口中寄存器的相应位的状态,不失为一种普适的做法。其实,在我们课本已经接触
到的
例子中,也还有这样的做法,只是没有如此明讲而已。哪位还能找到其它的例子吗?
002xxx(20030519 12:09pm)
那么当从中断服务程序返回时,如果有新的中断打断它,此时FLAG还从堆栈中弹出来吗?
002yyy(20030519 07:22pm)
因为之前已经清了IF,所以此时应该不会响应新的中断(我认为这里处于p462最下端的第二步)。
2.贴子主题:
书474页图12-13关于用缓冲器扩充中断结构的方法有个疑问
002zzz(20030517
12:43pm)
器件74ALS244为什么八个端口不各接一个IR引脚,这样不就可以扩充到8
个,而书中是拿一个通过上拉电阻接电
源,这样不就少接一个IR了吗?它有什么特殊的作用吗?
qbxiong(20030517 05:00pm)
问得好。请再读一下474页最后那个自然段。
002uuu(20030517 09:35pm)
我有同样的问题,而且最后一个自然段的说明我没有看明白.
书上说“如果两个或
者更多的中断请求连续发生,那么就产生一个新的中断向量.当IR0,IR1同时发出中断请求
那么F
CH为新的中断向量号,而且若IR0收到的中断优先级比较高的话那么这个新的地址FCH就作为为IR0的中
断向量地址”
我的问题是下一句,为什么说“the entire top
half of the vector table and its interrupt vectors
must
be used to accommodate all possible
conditions of theses seven interrupt request
inputs”
它这里的128个向量是由这7个中断输入组合形成的吗?就这道例题而言,它的中断
向量表应该是怎样的?而且我
想不出这种处理多个中断输入的方式有什么效率可言.
qbxiong(20030518 09:36am)
讨论已渐入佳境,002uuu已注意到“the entire top half of the
vector table”的问题。还请注意,002zzz
首问中的“书中是拿一个通过上拉电阻接
电源”,这“一个”,从图中看是D7,决非偶然。大家不妨翻回课本
第459页,看一下倒数第2个自
然段,也就是“Interrupt Vectors”小节中的第2段,或许能悟出其中的道理了
吧。
002uuu看书很仔细,有意义的词都不放过,这是值得提倡的学习精神,问到的“效率”
,可能是指474页最后那
个自然段中的“cost-
effective”吧,那是节省成本的意思,英文文献中也经常出现。
002xxx(20030518 10:18am)
the entire top
half of the vector table and its interrupt vectors
是指从中断矢量号为80H-0FFH的这
128个中断矢量。它刚好是the vector
table 的上一半。这就是为什么D7接1的原因所在了,D7为1则限制了这
个电路所产生的中断
至少得从80H开始。这个D7接1不是偶然的,因为只有前32个中断向量是被reserved by
Intel.
后面的244个才是user interrupt
vectors.故只有D7接上拉电阻,使其为1,保证中断矢量号从31H以上的80H
开始。
002zzz(20030520 04:49pm)
谢谢大家,我知道了,原来它这样接个上拉电阻,是为了使这里的中断向量号在USER
INTRERRUPT的允许范
围内。
3.贴子主题:
书上478页图不懂之处
002vvv(20030513 02:00pm)
图中A1为何如此连呢?
002www(20030513
10:34pm)
你注意到了吗?一个8259A的两个端口之间相差2,所以要用A1连,而不能用A0
002ppp(20030514 10:43pm)
不过想问一下,为什么书上很多的例子的端口号都要两个两个隔开的?有什么道理吗
qbxiong(20030515 04:04pm)
有道理。
请回顾pp.395-397的标题为“8- And 16-Bit IO Ports”的那一小节
。看395页图11-13,设想将8259A的8根数
据引脚接数据总线的D7-D0
,比较自然的做法就是将这片8259A要用的2个端口地址,安排为连续的偶地址。
再回到476页,看倒数第3个自然段关于8259A的“D7-D0”的描述,可以理解其道理了吧。
002zzz(20030516 03:23pm)
对,因为数据线
的缘故,16位有两个bank,所以到底用哪个bank呢,这个就可以通过地址线A0来设置
qbxiong(20030517 11:11am)
注意到002zzz在新
辟的“是否A0=0时,8位IO端口一定接的是D0到D7,难道不可以接D8到D15吗?”主题中提出:<
br>“我觉得,把数据线接到哪个bank是人为规定的吧,像我这样的想法不知道可不可以,还是机器默认的
规则?”;
讲到了bank,也就讲到了问题的实质。
我想,可以在本主题中将此话题继续下去:
478页的图12-16是把8259
A的8根数据引脚接数据总线的D7-D0,所以将这片8259A要用的2个端口地址,安排为连
续的
偶地址;当然也可以人为安排把8259A的8根数据引脚接数据总线的D15-D8,那么,这片8259A的
2个端口地
址,就是连续的2个奇地址了。接下来的问题就是:若如此,图12-16又应作何改动呢?
当然,书上没有给出图
中16L8的编程,那其实是有关系的。
002qqq(20030517 08:59pm)
不过为什么同样接d0到d7,484页图将A0接到8259A的A0了呢?
002yyy(20030517 09:06pm)
我的maybe不成熟看法:
484页的是cpu是8088,外部数据线是8位的,它只有一个体的
002vvv(20030517 09:12pm)
因为484页这张图书上说“the
8259A is decoded at 8-bit IO ports 48h and
49h。这两个端口地址只差一,
所以接A0了
002qqq(20030517 09:14pm)
哦,应该是数据总线8位的缘故吧。
002rrr(20030519 12:16pm)
本来我也想问的,现在看了明白了不少
4.贴子主题:
P469 FIGURE 12-8
002sss(20030510 12:51pm)
为什么会有两个*INTA?
002ttt(20030510
01:54pm)
书上说 There are two *INTA pulses
generated by the system that ae used to insert the
vector type number
on the data
bus.而对于图上打*处,时序图下又有这么一句注释 This portion of the data
bus is ignored
and usually contains the vector
number.这是否指系统响应中断请求时,通过*INTA在数据总线D7-D0上放上
的有效的中
断类型号是第二次*INTA 脉冲处的。这里很不好理解,其中有何道理吗?我也不明白为何有两处
*INTA。哪位懂时序图的,帮忙解释一下啊!
qbxiong(20030510 02:45pm)
下面引用由002ttt在 20030510 01:54pm 发表的内容:
而对于图上打*处,时序图下又有这么一句注释 This portion of the data bus is ignored and usually
contains the vector number.这是否指系统响应中断请求时,通过*INTA在数据总线D7-D0上放上的有效
的中 断类型号是第二次*INTA 脉冲处的。
问得好;并且理解了这张图本身。
*INTA是微处理器发出的,微处理器的设计者这样设计,即中断响应周期中先后发两个*INTA,是考虑了 级连
(Cascade)的情况:第1级汇总多个第2级的中断请求给微处理器的INTR;响应的时候 ,微处理器用第1个*INTA
告诉第1级,我已进入中断响应周期,然后第1级就可以去通知第2级中 发出请求的那位,你可以在下面那个*INTA
到来时,把自己的向量号放到数据总线上去;微处理器在 这第2个*INTA期间采样数据总线,得到请求中断者的
向量号。
但是,实际 的系统中,也有中断源并不多,不用级连的情况,比如书上这第12-2节中所有的例子,看图就知道,
在第1个和第2个*INTA到来时,都会有同样的向量号放上数据总线;当然,微处理器已设计为在第2个*I NTA期间
采样数据总线,对于第1个*INTA期间数据总线上的
向量号,就只能是ignore了。
002yyy(20030511 09:17am)
那么书上的这个图是不是不对的?
应像ch12-1&中slides20那样?
002sss(20030511 12:31pm)
应该是的,谢谢。
5. 贴子主题: P469 FIGURE 12-8
[
汇 集者注:此主题与
4
天前开始的上一主题(碰巧同名)问题一样,内容也重复,这种情况最好不 要新开主
题
]
002aaa(20030514 08:41pm)
为什么有两个*INTA?
002vvv(20030514 09:43pm)
这个好像老师讲过的,这是在cascade情况下,先传给master,再传给slave
002www(20030514 10:17pm)
在一个8259 A的情况下,第一个*INTA使得ISR的相应位置1,第二次时将相应中断号放到数据总线上。
在 级联模式下,作用相似,只不过是要通过三根cas将设备号传输到slave,第二次响应后由slave将中 断号放到数
据线上
002bbb(20030514 10:47pm)
我想一楼问的是为什么图上会有两个INTA的线吧,我也不懂,请赐教
002ccc(20030520 04:09pm)
*LOCK又是什么东西?好象和第1个*INTA配合的很紧密嘛。
qbxiong(20030520 09:15pm)
问得好。
提示:
关于*LOCK,可以看教案ch09-1第31页的定义。不过,此处的*LOC
K并非由带“LOCK:”前缀的指令引起,而是
进入中断响应周期就自动变为有效,直到中断响应完毕
(即向量号放上了数据总线)才撤去。
还有,*LOCK信号可以通过即将在13-3节讲的828
9总线判优器起作用(见已在课程主页上发布的教案ch13-3第12
页)。
大家知道*LOCK信号的作用了吧。
想一下:为什么在中断响应周期先后两个*INTA期间,要让*LOCK引脚变为有效呢?
002ddd(20030520 09:38pm)
两个中断响应周期有严格的
时序逻辑,如果在一个响应周期以后,总线被其它控制器占据,之后总线将失效,
因为它并没有允许插入
等待状态。不知道是不是这样?
qbxiong(20030520
10:05pm)
讲得对,用*LOCK面向的就是多处理器系统,单处理器系统是用不着*LOCK的。
今天上课讲DMAC时已经讲到,若有请求,CPU是会在完成一个机器周期之后就放弃总线控制权的;
而中断响应用
了两个机器周期,每发一个*INTA就是一个机器周期;大家可以想一下:如果在这两个
机器周期之间放弃了总线
控制权,会发生什么情况呢?
qbxiong(20030521 04:30pm)
下面引用由002bbb在
20030514 10:47pm 发表的内容:
我想一楼问的是为什么图上会有两个INTA的线吧,我也不懂,请赐教
正确的图见教案ch12-1&2第20页。
002uuu(20030521 06:24pm)
再多罗嗦一句问一个问题,多个825
9A级联,如书后的问题9个8259A形成64个中断入口,Master的CAS0--
CAS2和
Slave的CAS0--CAS2是如何连接的呢?
我的方式是通过三个八个引脚的NAND
gate连接其他8个8259A的对应位置,因为没有经验,不知道这么处理是否
妥当.
002www(20030521 06:37pm)
让master的cas2
-cas0直接分别连到各个slave就可以了吧,我觉得似乎没必要用与门。
002qqq(20030521 09:26pm)
同意楼上的说法,直接相连即可
qbxiong(20030521 09:53pm)
下面引用由002uuu在 20030521 06:24pm 发表的内容:
再多罗嗦
一句问一个问题,多个8259A级联,如书后的问题9个8259A形成64个中断入口,Master的
p>
CAS0--CAS2和Slave的CAS0--CAS2是如何连接的呢?
确实应该问,并非“罗嗦”。
可看教案ch12-3to5第19页的图和20-21页的说明;注意CAS0--
CAS2也被称为一种“bus”。
002uuu(20030522 11:49am)
大概有些明白这个cascade bus 的意思了,CAS0--CAS2一共3条线,若是对所有
的slave进行内部操作,作为具体某
一个slave的内部地址可以通过这三条线选通,这样就和总
线的形式很像了,我想总线的意思就是这样吧.
qbxiong(20030522 03:38pm)
对。
这种拓扑,是教案
ch01_Bus第17页讲的“合用线”的一个子类,特点是“不对称”:只有一个Master,只能
由它发,其它都是Slave,并且都只能收,曾有人将这种拓扑称为“Multidrop”。
6.贴子主题: P476 EXAMPLE 12-7
002eee(20030510 02:48pm)
想问一下
LEVEL_1,LEVEL_2,LEVEL_3 分别是什么,跳转到它们所指的地方在哪里?
程序中没有标出来啊?
qbxiong(20030510 03:18pm)
LEVEL_0是为第1片82C55端口B中断请求服务的中断服务程序的入口;
LEVEL_1是为第1片82C55端口A中断请求服务的中断服务程序的入口;
LEVEL_2是为第2片82C55端口B中断请求服务的中断服务程序的入口;
LEVEL_3是为第2片82C55端口A中断请求服务的中断服务程序的入口。
7.贴子主题: 书本的487的修改和问题?
002fff(20030515 12:18pm)
P489的Example-12-3
的代码倒数第四行的
OUT 49H,AL
应改为 OUT
48H,AL
问题为:
这条指令使8259产生哪些信号?
002zzz(20030516 01:41pm)
我觉得就是书中所说的产生8259A的EOI信号,你可以看看书中关于OCW2的定义
8.贴子主题:
课本的P473上的EXAMPLE12-6中的汇编代码的倒数第3行的INC对吗?
002ccc(20030517 09:30am)
课本的P473上的EXAMPLE12-6中的汇编代码的倒数第3行的INC对吗?
是否应改成DEC
002ppp(20030518
08:19am)
INC应该是对的吧.OUTP是队列的头指针,移动头指针使数据出队列.在P4
72里的Code的0121行是移动INP,也就是
队列的尾指针使数据入队列.用的
也是INC,只要头指针和尾指针移动方向一样就会构成队列的.
比如INP和OUTP开始都指向0
,然后a,b,c,d入了队列,INP就指向4,OUTP还是0,这时候OUTP加1指向1的话,a就出队
列了.
9.贴子主题: 实模式下和保护模式下的中断.
002xxx(20030518 10:35am)
我想问两个问题:
1.在保护模式下的IDT可以放在内存的任意空间里,而中断向量表只能放在内存的最低层的1024个字节
里面。这
是正确的,但我不明白书后第14题的答案里说道这么一句话:保护模式下的中断服务程序可以
放在内存的任意
空间,但实模式下的却不可以。why???在保护模式下只是因为在描述符中的seg
ment selector 可以定义段地址
在内存的任意空间,所以中断服务程序可以放在内存的任
意空间。但在实模式下,我也可以把中断服务程序的
段地址定义在内存的任意空间里呀。书上又没有说这
个段地址一定也要在the first 1M的空间里???
2.书上P463中间部分的第三段末里a single selector
„„„„这句话是什么意思?它和全局描述符表有什么
联系?
002yyy(20030518 11:46am)
80868088的下地址空间只有1
M。高档的机器在实模式下运行时或许规定只用到A19-A0,其余地址线高位置为0,
这样就只能寻
址到FIRST 1M了。
我觉得这是最优的实现方法。
其实很多东西或许是老师所说的“非不能也,是不为也”
002ggg(20030518 01:46pm)
IDT本身也是一个段,对这个段的描述自然是放在GDT中了;
其实保护模式不只是寻址空间扩大这么简单的意思,所谓“保护”不知道大家是怎么理解的;
实模式下面总的寻址空间只有1M,你可以去看一下在着1M的空间里,是怎么分布一些程序和数据的。
中断服务
程序别忘了,还是要装到CS和IP中去的,而在实模式下面寻址方式就是简单的段地址+偏移
量;而在保护模式
下面,他的寻址方式的不同,意味着中断服务程序的载入不再是实模式下面那么简单的
计算方法,在保护模式
下面地址往往可以重定位到内存中允许的任何地方;
当然了
,作为程序员的我们,仍然可以按照段方式在我们的虚拟空间里面编程,只是此时的段的意思有了不同
的
意思