




已阅读5页,还剩8页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
微机接口技术实验五 计算机学院05级微机接口技术实验实验五 保护模式下的中断处理姓名:胡诣嵩 学号:20053449日期:2008-5-30一 实验名称保护模式下的中断处理二 实验目的1通过本实验了解、熟悉保护模式下的中断以及它的处理方式。2巩固微机接口课程学习的80386DX在保护模式下相关的知识点。三 简述程序执行过程1、作切换到保护方式的准备2、切换到保护方式3、程序循环等待,当有键盘和时钟中断时,调用中断服务程序显示字符4、切换回实模式四 实验源程序;功能:演示保护方式下的中断处理过程.386P;-;存储段描述符结构类型定义;-Desc STRUCLimitL DW 0 ;段界限(BIT0-15)BaseL DW 0 ;段基地址(BIT0-15)BaseM DB 0 ;段基地址(BIT16-23)Attributes DB 0 ;段属性LimitH DB 0 ;段界限(BIT16-19)(含段属性的高4位)BaseH DB 0 ;段基地址(BIT24-31)Desc ENDS;-;伪描述符结构类型定义(用于装入全局或中断描述符表寄存器);-PDesc STRUCLimit DW 0 ;16位界限Base DD 0 ;32位基地址PDesc ENDS;-;门描述符结构类型定义;-Gate STRUCOffsetL DW 0 ;32位偏移的低16位Selector DW 0 ;选择子DCount DB 0 ;双字计数GType DB 0 ;类型OffsetH DW 0 ;32位偏移的高16位Gate ENDS;-;存储段描述符类型值说明;-ATDR EQU 90h ;存在的只读数据段类型值ATDW EQU 92h ;存在的可读写数据段属性值ATDWA EQU 93h ;存在的已访问可读写数据段类型值ATCE EQU 98h ;存在的只执行代码段属性值ATCER EQU 9ah ;存在的可执行可读代码段属性值ATCCO EQU 9ch ;存在的只执行一致代码段属性值ATCCOR EQU 9eh ;存在的可执行可读一致代码段属性值DA_386IGateEQU8Eh ;386 中断门类型值;-DSEG SEGMENT USE16 ;16位数据段;-_SavedIMREG_M db 0 ; 中断屏蔽寄存器值_SavedIMREG_S db 0 ; DB 512 dup (0)TopOfStack LABEL BYTEGDT LABEL BYTE ;全局描述符表DUMMY Desc ;空描述符Code Desc ;代码段描述符DataV Desc ;源数据段描述符DataP Desc ;目标数据段描述符Code32 Desc ;代码段描述符;-GDTLen = $-GDT ;全局描述符表长度VGDTR PDesc ;伪描述符;-Code_Sel = Code-GDT ;代码段选择子DataV_Sel = DataV-GDT ;源数据段选择子DataP_Sel = DataP-GDT ;目标数据段选择子Code32_Sel = Code32-GDT ;目标数据段选择子;-; IDTALIGN 32IDTLABELBYTEIDT_00_1F Gate 32 dup ()IDT_20 Gate 1 dup ()IDT_21 Gate 1 dup () ;IDT_21_7F Gate 94 dup ()IDT_80 Gate 1 dup ()IDTLen = $-IDT ;中断描述符表长度VIDTR PDesc ;伪描述符_wSSValueInRealMode dw 0_wSPValueInRealModedw0_SavedIDTRdd0; 用于保存 IDTRdd0;-DSEG ENDS ;数据段定义结束;-;打开A20地址线;-EnableA20 MACRO push ax in al,92h or al,00000010b out 92h,al pop ax ENDM;-;关闭A20地址线;-DisableA20 MACRO push ax in al,92h and al,11111101b out 92h,al pop ax ENDM;-;16位偏移的段间直接转移指令的宏定义(在16位代码段中使用);-JUMP16 MACRO Selector,Offset DB 0eah ;操作码 DW Offset ;16位偏移量 DW Selector ;段值或段选择子 ENDM;-CSEG SEGMENT USE16 ;16位代码段 ASSUME CS:CSEG,DS:DSEG;-Start PROC mov ax,DSEG mov ds,ax mov _wSSValueInRealMode,ss ;堆栈段 mov _wSPValueInRealMode,sp ;堆栈指针 ;准备要加载到GDTR的伪描述符 mov bx,16 mul bx add ax,OFFSET GDT ;计算并设置基地址 adc dx,0 ;界限已在定义时设置好 mov WORD PTR VGDTR.Base,ax mov WORD PTR VGDTR.Base+2,dx ;准备要加载到IDTR的伪描述符 mov ax,SEG IDT mov bx,16 mul bx add ax,OFFSET IDT ;计算并设置基地址 adc dx,0 ;界限已在定义时设置好 mov WORD PTR VIDTR.Base,ax mov WORD PTR VIDTR.Base+2,dx ;设置代码段描述符 mov ax,cs mul bx mov WORD PTR Code.BaseL,ax ;代码段开始偏移为0 mov BYTE PTR Code.BaseM,dl ;代码段界限已在定义时设置好 mov BYTE PTR Code.BaseH,dh mov ax,seg SpuriousHandler mul bx mov WORD PTR Code32.BaseL,ax ;代码段开始偏移为0 mov BYTE PTR Code32.BaseM,dl ;代码段界限已在定义时设置好 mov BYTE PTR Code32.BaseH,dh mov ax,8000h mov dx,000BH mov WORD PTR DataV.BaseL,ax mov BYTE PTR DataV.BaseM,dl mov BYTE PTR DataV.BaseH,dh ;设置目标数据段描述符 mov ax,ds mul bx ;计算并设置目标数据段基址 mov WORD PTR DataP.BaseL,ax mov BYTE PTR DataP.BaseM,dl mov BYTE PTR DataP.BaseH,dh ; 保存中断屏蔽寄存器(IMREG)值 inal, 21h mov _SavedIMREG_M, al ;主片IMR=21h in al, 0A1h mov _SavedIMREG_S, al ;从片IMR=A1h ; 保存 IDTR sidtQWORD PTR _SavedIDTR ;加载GDTR lgdt QWORD PTR VGDTR cli ;关中断 EnableA20 ;打开地址线A20 lidt QWORD PTR VIDTR ;加载IDT ;切换到保护方式 mov eax,cr0 or eax,1 mov cr0,eax ;清指令预取队列,并真正进入保护方式 JUMP16 Code_Sel,ALIGN 32Virtual: ;现在开始在保护方式下运行 mov ax,DataV_Sel mov gs,ax ;加载源数据段描述符 mov ax,DataP_Sel mov ds,ax ;加载源数据段描述符 movss,ax ; 堆栈段选择子 mov sp,offset TopOfStack call Init8259Amovah, 0Ch; 0000 黑底 1100 红字moval, !movgs:(80 * 0 + 72) * 2), ax; 屏幕第 0 行, 第 72 列。; x: jmp xint 080hstimov ebx,0 xor ecx,ecxWaitLoop: ; cmp ebx, 100 ;jb WaitLoop cmp ecx,1;等到Esc jnz WaitLoopcli call SetRealmode8259A ;切换回实模式 mov eax,cr0 and al,11111110b mov cr0,eax ;清指令预取队列,进入实方式 JUMP16 ,; Init8259A -Init8259A:moval, 011hout020h, al; 主8259, ICW1.callio_delayout0A0h, al; 从8259, ICW1.callio_delaymoval, 020h; IRQ0 对应中断向量 0x20out021h, al; 主8259, ICW2.callio_delaymoval, 028h; IRQ8 对应中断向量 0x28out0A1h, al; 从8259, ICW2.callio_delaymoval, 004h; IR2 对应从8259out021h, al; 主8259, ICW3.callio_delaymoval, 002h; 对应主8259的 IR2out0A1h, al; 从8259, ICW3.callio_delaymoval, 001hout021h, al; 主8259, ICW4.callio_delayout0A1h, al; 从8259, ICW4.callio_delaymoval, 11111100b; out021h, al; 主8259, OCW1.callio_delaymoval, 11111111b; 屏蔽从8259所有中断out0A1h, al; 从8259, OCW1.callio_delayret; Init8259A -; SetRealmode8259A -SetRealmode8259A:moval, 011hout020h, al; 主8259, ICW1.callio_delayout0A0h, al; 从8259, ICW1.callio_delay mov al, 08h ; IRQ0 对应中断向量 0x20out021h, al ; 主8259, ICW2.callio_delay mov al, 70h ; IRQ8 对应中断向量 0x28out0A1h, al ; 从8259, ICW2.callio_delaymoval, 004h; IR2 对应从8259out021h, al; 主8259, ICW3.callio_delaymoval, 002h; 对应主8259的 IR2out0A1h, al; 从8259, ICW3.callio_delaymoval, 001hout021h, al; 主8259, ICW4.callio_delayout0A1h, al; 从8259, ICW4.callio_delay moval, 11111111b; 屏蔽从8259所有中断out0A1h, al; 从8259, OCW1.callio_delay mov al, _SavedIMREG_M ; 恢复中断屏蔽寄存器(IMREG)的原值out021h, al; callio_delay ;mov al, _SavedIMREG_S ; 恢复中断屏蔽寄存器(IMREG)的原值 ;out 0A1h, al ; ;callio_delayret; SetRealmode8259A -io_delay:nopnopnopnopret Real: ;现在又回到实方式 DisableA20 lidt QWORD PTR _SavedIDTR mov ax,DSEG mov ds,ax mov ss,_wSSValueInRealMode mov sp,_wSPValueInRealMode sti mov ax,4c00h int 21hStart ENDP;-CSEG ENDS ;代码段定义结束;-CSEG32 SEGMENT USE32; interrupt handler -ASSUME CS:CSEG32,DS:DSEGClockHandler: inc ebxincbyte ptr gs:(80 * 0 + 70) * 2) ; 屏幕第 0 行, 第 70 列。moval, 20hout20h, al; 发送 EOIiretdEscHandler: ; in al,60h cmp al,1 jnz Nesc mov ecx,1Nesc: inc byte ptr gs:(80*1+70)*2) mov al,20h out 20h,al iretdUserIntHandler:movah, 0Ch; 0000 黑底 1100 红字moval, Imovgs:(80 * 0 + 71) * 2), ax; 屏幕第 0 行, 第 71 列。iretdSpuriousHandler:movah, 0Ch; 0000 黑底 1100 红字moval, !movgs
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 政治中招模拟试题及答案
- 2025年一建法规真题及答案
- 小学毕业模拟试题及答案
- 农发行曲靖市富源县2025秋招笔试英语题专练及答案
- 会计专硕考研真题及答案
- 2025年首届高考生物试卷及答案
- 农发行宜昌市西陵区2025秋招群面案例总结模板
- 全国监理工程师考试试题及答案
- 农发行石家庄市晋州市2025秋招半结构化面试题库及参考答案
- 三基考试题库及答案文档
- 法院报名登记表
- 上海市闵行区区管国企招聘笔试冲刺题2025
- 2025年恒丰银行烟台分行招聘笔试参考题库含答案解析
- 中外建筑史课件
- 2024年度商业保理合同:保理公司与出口商之间的商业保理协议3篇
- 宣传网络安全文明上网
- 应急管理部14号令《生产安全事故罚款处罚规定》 修改前后对照表及解读
- ASTM-D3359-(附著力测试标准)-中文版
- 中华人民共和国标准设计施工总承包招标文件(2012年版)
- 2022年内分泌医疗质量控制评价体系与考核标准
- 全国中小学生学籍信息管理系统学生基本信息采集表(2022修订版)
评论
0/150
提交评论