微机原理与接口第10章PC机的高级编程技术.ppt
上传人:qw****27 上传时间:2024-09-12 格式:PPT 页数:75 大小:1.1MB 金币:15 举报 版权申诉
预览加载中,请您耐心等待几秒...

微机原理与接口第10章PC机的高级编程技术.ppt

微机原理与接口第10章PC机的高级编程技术.ppt

预览

免费试读已结束,剩余 65 页请下载文档后查看

15 金币

下载此文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

第10章PC机的高级编程技术(自学)10.1PC机环境下软件对接口的访问层次1.直接访问层次2.BIOS访问层次3.驱动程序层次4.应用层次16位段地址00000010.2.2保护模式下使用的系统地址寄存器10.2.3保护模式下Pentium4的段式存储管理2.段描述符D7D0A系统描述符中的TYPERPL#include"stdafx.h"#include<stdio.h>#include<wtypes.h>//wtypes.h定义了WORDLONG,//DWORD,WORD等数据类型DWORDLONGgdtr,savegdt;//下面是GDT中将创建的数据段描述符表,基地址0X00000F00,//段界限为0XFFFF,优先级为3的在内存中的可写数据段WORDdescriptor[4]={0xFFFF,0X0F00,0XF200,0X0040};intresult[10];intmain(intargc,char*argv[]){_asm{pushebpsgdtgdtr//将GDTR寄存器的内容读取到//gdtr开始的6个字节中,其中//前两个字节给出GDT的界限值,//高4个字节给出GDT的基地址movebp,dwordptr[gdtr+2]//将gdt的基//地址读到EBP中addebp,70h//我们选择70H偏移下的段描述//符(GDT中第14个描述符)leaedi,savegdtmovesi,ebpmovsd//以上4条指令保存原来在70H偏移上movsd//的描述符movedi,ebpleaesi,descriptor;movsd//把我们的数据段描述符装入70Hmovsd//偏移上pushesmovax,0073h//选择字为描述符偏移70H拼接上//低3位控制位元,其中Ti为0,表//示访问GDT,RPL为11,为3级优//先级,所以就为73Hmoves,ax//ES装入选择字73Hleaedi,result//将存放输出结果的变量//的地址放在EDI中moveax,1movebx,1}_asm{movcx,10a1:moves:[eax],eaxaddeax,4loopa1//上面4条指令将向物理地址//0X00000F00处写10个双字}_asm{movcx,10a2:moveax,es:[ebx]mov[edi],eaxaddebx,4addedi,4loopa2//以上从物理地址0X00000F00//处依次读出10个数据存放在//result数组中}_asm{popespopebp}printf("result=");for(inti=0;i<10;i++)printf("%d,",result[i]);//输出结果return0;}10.2.4保护模式下Pentium4的虚拟页式存储管理PGE4KB分页方式4MB分页方式3154321032位线性地址计算机底层硬件Windows9x10.3.1保护模式下的I/O端口访问V86模式下(DOSVM)的I/O端口访问3010.3.2保护模式下对中断或异常的处理CPU根据中断向量表IDT调用相应的VMM异常处理程序,从而切换到0特权级别。其他各种VxD可以通过安装回调例程来响应处理各种异常和中断,但是它们不能改变中断描述符表IDT中给出的各种VMM异常处理程序。VMM异常处理程序通过使用CALL指令调用安装的各个回调例程或自身处理异常。对于硬件中断,VMM则将控制权交给VPICD(虚拟可编程中断控制器)处理,VPICD就调用其他VxD通过系统服务VPICD_Virtualize_IRQ安装的回调例程处理硬件中断。VMM异常处理程序使用IRET或IRETD指令返回到虚拟机中,虚拟机中的应用程序重新获得控制从而继续执行。思路:#include"stdafx.h"#include<stdio.h>#include<wtypes.h>//wtypes.h定义了DWORDLONG,//DWORD,WORD等数据类型DWORD_cr0;//用来保存CR0寄存器的值void_declspec(naked)newint3(void)//运行在核心级的//中断3处理程序{_asm{moveax,cr0//这是必须在核心