- 1、本文档共5页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
北京理工大学微机接口实验2
微机接口实验报告
实验一
郑明治米克哈勒
目录
一. 实验目的 3
二. 实验基本执行过程………………………………………………3
三. 对素材的修改………………………………………………….3
四. 实验结果 5
五. 实验总结 5
保护模式下的中断处理
实验目的:
1.通过本实验了解、熟悉保护模式下的中断以及它的处理方式。
2.巩固微机接口课程学习的80386DX在保护模式下相关的知识点。
实验环境:
DOSBOX 0.72
MASM611
实验基本执行过程
准备加载和设置在之前定义的各个段、门描述符
保存中断屏蔽寄存器(IMREG)值
保存IDTR,加载GDTR并切换到保护模式
初始化8255A,并设置中断屏蔽寄存器
程序循环等待,当有键盘和时钟中断时,调用中断服务程序显示字符
切回到实模式
对素材的修改:
1.将mov al, ; 开启定时器中断
out 021h, al ; 主8259, OCW1.
call io_delay
改成:mov al, ; 开启定时器中断和键盘中断
out 021h, al ; 主8259, OCW1.
call io_delay
这样可以同时响应定时器中断和键盘中断。
2.加入了回复中断屏蔽寄存器的代码
mov al, _SavedIMREG_S ; 恢复中断屏蔽寄存器(IMREG)的原值
out 0A1h, al ;
call io_delay
3.在SpuriousHandler后加入键盘中断KeyboardHandler
代码如下:
KeyboardHandler:
in al, 60h
cmp al, 1
jnz notEsc
mov ecx, 1
iretd
notEsc:
inc byte ptr gs:[((80 * 1 + 70) * 2)]
; 屏幕第 1 行, 第 70 列。
mov al, 20h
out 20h, al;发送EOI
Iretd
4.
原来素材为:
mov ebx,0
WaitLoop:
cmp ebx, 100
jb WaitLoop
修改为:
mov ebx,0
xor ecx,ecx
WaitLoop:
cmp ecx, 1
jnz WaitLoop
实验结果:
心得体会:
通过本次试验,对理论课上学习的中断向量和IDTR有了进一步的理解和体会。
通过这次试验,巩固了在实验三中对8255的理解,并有了新的理解。
了解了中断屏蔽寄存器的使用,中断屏蔽是通过OCW1来设置的。
对屏幕缓冲区000B8000H有点不理解。个人认为是这个缓冲区是系统设定的。只要把要输字符送到指定的屏幕位置,就能在屏幕上显示出该字符。计算位置是000B8000h + (y * 80 + x) * 2 其中x是列y行。
查了一些资料,了解了LGDT,LIDT等保护模式下系统控制的指令集。
3
文档评论(0)