C机的高级编程技术.ppt
《C机的高级编程技术.ppt》由会员分享,可在线阅读,更多相关《C机的高级编程技术.ppt(74页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、PCPC机的高级编程技术机的高级编程技术1第一节第一节 软件对接口的访问方式软件对接口的访问方式 裸机裸机BIOS直接访问直接访问 驱动程序驱动程序操作系统操作系统实实模模式式应用程序应用程序返回3页返回4页返回5页返回6页2一、一、直接访问层次直接访问层次 特点:特点:可以直接进行内存和端口的访问,也可以自可以直接进行内存和端口的访问,也可以自行决定是否在实模式和保护模式间切换。行决定是否在实模式和保护模式间切换。通常所有端口和内存都是对程序员开放的。通常所有端口和内存都是对程序员开放的。工具:工具:汇编语言或汇编语言或C C语言。语言。应用:应用:BIOSBIOS都是基于这种低级层次编写的
2、;驱动程都是基于这种低级层次编写的;驱动程序也有使用这种方法的;实模式下应用程序也可以使序也有使用这种方法的;实模式下应用程序也可以使用这种方法。用这种方法。优点:优点:编写的代码执行速度最快,占用空间最小。编写的代码执行速度最快,占用空间最小。缺点:缺点:需要对硬件和接口有很熟悉的了解;需要对硬件和接口有很熟悉的了解;熟悉汇编,或熟练使用熟悉汇编,或熟练使用C C语言的指针;语言的指针;不利于增加对新设备的控制。不利于增加对新设备的控制。转2页3二、二、BIOS访问层次访问层次 特点:特点:通过通过BIOSBIOS提供的功能调用间接地对内存或端提供的功能调用间接地对内存或端口访问,从而控制硬
3、件口访问,从而控制硬件。工具:工具:汇编语言或汇编语言或C C语言。语言。应用:应用:驱动程序有些会使用这些功能调用;驱动程序有些会使用这些功能调用;需要获得高效率的应用程序也采用此方法需要获得高效率的应用程序也采用此方法。优点:优点:编写的代码执行速度较快;编写的代码执行速度较快;编写的代码不需要直接对硬件进行控制。编写的代码不需要直接对硬件进行控制。缺点:缺点:需要对底层信号有所了解;需要对底层信号有所了解;增加对新设备的控制不很方便,但好于低级增加对新设备的控制不很方便,但好于低级层次。层次。转2页4三、三、驱动程序驱动程序层次层次 特点:特点:使用使用BIOSBIOS功能调用、操作系统
4、功能调用和直功能调用、操作系统功能调用和直接访问的方法编写符合特定操作系统管理规范的设备接访问的方法编写符合特定操作系统管理规范的设备驱动程序驱动程序。工具:工具:VC+VC+与与DDKDDK开发包,或第三方开发工具如开发包,或第三方开发工具如DriverStudioDriverStudio。应用:应用:在操作系统层面上的设备控制,并为应用程在操作系统层面上的设备控制,并为应用程序提供序提供APIAPI支持。支持。优点:优点:既能够控制硬件,又保证操作系统的完整与既能够控制硬件,又保证操作系统的完整与安全安全。缺点:缺点:需要对底层信号有所了解;需要对底层信号有所了解;需要对操作系统各管理模块
5、有深入的了解。需要对操作系统各管理模块有深入的了解。转2页5四、四、应用程序应用程序层次层次 特点:特点:使用操作系统和各种驱动程序所提供的功能使用操作系统和各种驱动程序所提供的功能调用或调用或APIAPI函数间接对硬件或内存进行访问函数间接对硬件或内存进行访问。工具:工具:VC+VC+、DelphiDelphi、JavaJava等。等。应用:应用:编写面向终端用户的各类应用程序编写面向终端用户的各类应用程序。优点:优点:无需对硬件控制有太多了解,只需完成应用无需对硬件控制有太多了解,只需完成应用层面的工作就可以,而且还保证操作系统的完整与安层面的工作就可以,而且还保证操作系统的完整与安全。全
6、。缺点:缺点:需要了解大量的需要了解大量的APIAPI和功能调用函数的功能;和功能调用函数的功能;由于是间接调用,所以代码的效率和编译系由于是间接调用,所以代码的效率和编译系统有很大的关系。统有很大的关系。转2页6第二节第二节 Pentium 4Pentium 4的内存管理的内存管理一、实模式的存储管理(同一、实模式的存储管理(同PC/XTPC/XT)采用内存分段的办法,内存分为若干段,段的大小采用内存分段的办法,内存分为若干段,段的大小根据需要决定,最大为根据需要决定,最大为64KB64KB。16位段地址位段地址16位段内偏移位段内偏移:16位段地址位段地址16位段内偏移位段内偏移(左移四位
7、)(左移四位)+20位物理地址位物理地址=软件地址:软件地址:物理地址:物理地址:思考:软件地址到物理地址变换的二义性及应用?思考:软件地址到物理地址变换的二义性及应用?段地址大小设置与地址变换的关联?段地址大小设置与地址变换的关联?7 内存区分配内存区分配:0000000A0000100000110000FFFFFF640KB常规内存常规内存384KB高端内存块高端内存块UMB64KB高端内存区高端内存区HMA14095MB扩展内存块扩展内存块EMB存放用户程序和存放用户程序和DOSDOS驻驻留部分留部分存放显存、网卡和部分用户存放显存、网卡和部分用户的的DOS驱动程序和驱动程序和BIOS存
8、放部分存放部分DOS驻留程序驻留程序大于大于1M以上的以上的扩展内存,扩展内存,DOS下不能直接访问,需要用下不能直接访问,需要用XMS规范使用。可利用规范使用。可利用DOS调调用或用或BIOS调用来使用。调用来使用。8二、保护模式下的系统地址寄存器二、保护模式下的系统地址寄存器 说明:说明:GDTRGDTR、IDTR IDTR 在进入保护模式前设置,在进入保护模式前设置,TRTR、LDTRLDTR在任在任 务切换时设置。务切换时设置。GDTGDT、IDTIDT整个系统各一个,整个系统各一个,TSSTSS、LDTLDT每个任务一个。每个任务一个。选择符与描述符含义不同。选择符与描述符含义不同。
9、名称名称缩写缩写长度长度内容内容全局描述符表寄存器全局描述符表寄存器GDTRGDTR4848位位GDTGDT的的3232位线性地址位线性地址+16+16位界限值位界限值中断描述符表寄存器中断描述符表寄存器IDTRIDTR4848位位IDTIDT的的3232位线性地址位线性地址+16+16位界限值位界限值任务状态段寄存器任务状态段寄存器TRTR1616位位TSSTSS的的1616位选择符位选择符全局描述符表寄存器全局描述符表寄存器LDTRLDTR1616位位LDTLDT的的1616位选择符位选择符1 1、系统地址寄存器汇总表、系统地址寄存器汇总表9基址基址界限界限选择符选择符TSSTSS描述符描
10、述符线性地址线性地址TSS结构结构2 2、系统地址寄存器与系统表关系、系统地址寄存器与系统表关系基址基址界限界限选择符选择符LDTLDT描述符描述符01LDT2段描述符段描述符段寄存器选择符段寄存器选择符选择符选择符基址基址界限界限IDTR(48bit)01门描述符门描述符IDT2门描述符门描述符基址基址界限界限GDTR(48bit)TR(16bit)选择符选择符01TSS描述符描述符GDT2LDT描述符描述符段描述符段描述符LDTR(16bit)选择符选择符描述符长均为描述符长均为8Byte8Byte返回下页返回12页返回13页10说明说明1 1:GDTGDT表项类型表项类型LDTLDT描述
11、符、描述符、TSSTSS描述符、段描述符;描述符、段描述符;IDTIDT表项类型表项类型中断门描述符、陷阱门描述符、任务门描中断门描述符、陷阱门描述符、任务门描 述符、调用门描述符;述符、调用门描述符;LDTLDT表项类型表项类型段描述符。段描述符。说明说明3 3:表或结构长度表或结构长度=(界限)(界限)+1+1。例:例:GDTRGDTR的内容为的内容为00F0000000FFH00F0000000FFH,求,求GDTGDT的首地址和末地址的首地址和末地址及该表含有多少个描述符及该表含有多少个描述符?转上页解:解:GDTGDT首址首址=00F00000H=00F00000H;GDTGDT末址
12、末址=00F00000H+0FFH=00F000FFH=00F00000H+0FFH=00F000FFH;GDTGDT描述符个数描述符个数=GDT=GDT长度长度/8=(0FFH+1)/8=32/8=(0FFH+1)/8=32。说明说明2 2:不同类型描述符通过第不同类型描述符通过第5 5字节的字节的D3D0D3D0区分。区分。转19页113 3、TSSTSS与与LDTLDT关系关系I/O允许位映象(最大允许位映象(最大8K)中断重定向位映象(中断重定向位映象(32字节)字节)操作系统可利用(长度可变)操作系统可利用(长度可变)I/OI/O允许位映象域基址允许位映象域基址 0 T0 T 0 0
13、 任务任务LDTLDT选择符选择符 0 GS0 GS、FSFS选择符选择符 0 DS0 DS、SSSS选择符选择符 0 CS0 CS、ESES选择符选择符EDIEDI、ESIESI、EBPEBP、EBXEBX、EDXEDX、ECXECX、EAXEAX EFLAG EFLAG、EIPEIPCR3CR3 0 SS2 0 SS2(特权级特权级2 2)ESP2ESP2 0 SS1 0 SS1(特权级特权级1 1)ESP1ESP1 0 SS0 0 SS0(特权级特权级0 0)ESP0ESP0 0 0 反向链反向链00H04H08H0cH10H14H18H1cH20H28H48H50H58H60H64H6
14、8HTSS段限段限TSS结构结构当前任务当前任务LDTR选择符选择符上一上一任务任务TR选择符选择符当前任务的段选择符当前任务的段选择符当前任务的优先级可改变,堆当前任务的优先级可改变,堆栈的优先级也要相应改变。栈的优先级也要相应改变。系统为任务的系统为任务的0202级堆栈指针用级堆栈指针用SSiSSi和和ESPiESPi表示。表示。虚拟虚拟8086模式且模式且CR4中中VME=1时有效时有效转10页124 4、门描述符与段选择符关系、门描述符与段选择符关系偏移偏移属性属性选择符选择符IDTRIDT边界边界属性属性基基地址地址GDT/LDT线性地址线性地址中断服务中断服务子程序子程序代码段代码
15、段基基地址地址偏偏移移EIP门描述符门描述符段选择符段选择符或或TSS选择符选择符段描述符段描述符说明:说明:利用段选择符的利用段选择符的bit2bit2确定查询确定查询GDTGDT或或LDTLDT。段选择符指向一个段描述符。段选择符指向一个段描述符。对任务门而言,选择符为对任务门而言,选择符为TSSTSS选择符。选择符。任务的切换:任务的切换:通过直接改变通过直接改变TRTR方式,方式,或通过任务门间接方式实现。或通过任务门间接方式实现。转10页13三、保护模式下三、保护模式下Pentium 4Pentium 4的段式存储管理的段式存储管理 1 1、段式管理的地址变换段式管理的地址变换段寄存
16、器的段寄存器的152位位偏移量偏移量4532310段描述符段描述符段表段表32位线性地址位线性地址物理物理地址地址逻辑逻辑地址地址段基址段基址Pentium系列的虚拟地址空间是系列的虚拟地址空间是24664TB。注意:注意:保护模式下段寄存器的含义已变为段选择符,保护模式下段寄存器的含义已变为段选择符,通常称段寄存器为段选择符。通常称段寄存器为段选择符。142 2、段描述符表与段选择符段描述符表与段选择符RPLTI段选择符段选择符15210索引索引TI=1TI=001GDT2段描述符段描述符段描述符段描述符01LDT2段描述符段描述符段描述符段描述符153 3、段描述符段描述符D7D0段界限段
17、界限70段界限段界限158基址基址70基址基址158基址基址2316基址基址3124TYPESAVLDPLPGD/B0段界限段界限191601234567返回20页16D7D0AVLGD/B0段界限段界限1916用户用户/操作系统可用位操作系统可用位D/B位位粒度位粒度位D/B位位代码段代码段(D位位)D=1使用使用32位操作系统和位操作系统和32位寻址方式位寻址方式D=0使用使用16位操作系统和位操作系统和16位寻址方式位寻址方式数据段数据段(B位位)B=1堆栈使用堆栈使用ESP寄存器,上限为寄存器,上限为FFFFFFFFHB=0堆栈使用堆栈使用SP寄存器,上限为寄存器,上限为FFFFH段描
18、述符中的第段描述符中的第6字节:字节:思考:如何知道该段为代码段或数据段?思考:如何知道该段为代码段或数据段?17段描述符中非系统段的第段描述符中非系统段的第5字节:字节:AWREDCE=0E=1S=1DPLPD7D0存在位存在位特权位特权位S=1是非系统段是非系统段S=0是系统描述符是系统描述符代码段标志代码段标志数据段标志数据段标志兼容位兼容位可读位可读位访问位访问位扩展方向位扩展方向位可写位可写位18段描述符中系统段的第段描述符中系统段的第5字节:字节:类型值类型值段类型段类型类型值类型值段类型段类型0(0000)未定义8(1000)未定义1(0001)286的有效任务状态段9(1001
19、)386的有效任务状态段2(0010)LDT描述符10(1010)未定义3(0011)286的忙碌任务状态段11(1011)386的忙碌任务状态段4(0100)286的调用门12(1100)386的调用门5(0101)286或386的任务门13(1101)未定义6(0110)286的中断门14(1110)386的中断门7(0111)286的陷阱门15(1111)386的陷阱门D7D0TYPESDPLP返回11页19#include stdafx.h#include#include/wtypes.h定义了定义了DWORDLONG,DWORD,WORD等数据类型等数据类型DWORDLONG gdt
20、r,savegdt;/下面是下面是GDT中将创建的数据段描述符表中将创建的数据段描述符表,基地址基地址0X00000F00,段界限为段界限为0XFFFF,优先级为优先级为/3的在内存中的可写数据段,同的在内存中的可写数据段,同P16段描述符段描述符WORD descriptor4=0 xFFFF,0X0F00,0XF200,0X0040;int result10;int main(int argc,char*argv)_asm pushebpsgdtgdtr/将将GDTR寄存器的内容读取到寄存器的内容读取到gdtr开始的开始的6个字节中,其中个字节中,其中/前两个字节给出前两个字节给出GDT的
21、界限值的界限值,高高4个字节给出个字节给出GDT的基地址的基地址movebp,dword ptr gdtr+2 /将将gdt的基地址读到的基地址读到EBP中中addebp,70h /我们选择我们选择70H偏移下的段描述符(偏移下的段描述符(GDT中第中第14个描述符)个描述符)leaedi,savegdtmovesi,ebpmovsdmovsd/以上以上4条指令保存原来在条指令保存原来在70H偏移上的描述符偏移上的描述符movedi,ebpleaesi,descriptor;movsdmovsd /把我们的数据段描述符装入把我们的数据段描述符装入70H偏移上偏移上pushesmovax,007
22、3h /选择字为描述符偏移选择字为描述符偏移70H拼接上低拼接上低3位控制位元位控制位元,/其中其中Ti为为0,表示访问表示访问GDT,RPL为为11,说明说明3级优先级级优先级,所以就为所以就为73H转16页20moves,ax/ES装入选择字装入选择字73Hleaedi,result /将存放输出结果的变量的地址放在将存放输出结果的变量的地址放在EDI中中moveax,1movebx,1_asmmovcx,10a1:moves:eax,eaxaddeax,4loopa1 /上面上面4条指令将向物理地址条指令将向物理地址0X00000F00处写处写10个双字个双字_asmmovcx,10a2
23、:moveax,es:ebxmovedi,eaxaddebx,4addedi,4loopa2/以上从物理地址以上从物理地址0X00000F00处依次读出处依次读出10个数据存放在个数据存放在/result数组中数组中_asmpopespopebp 21printf(result=););for(int i=0;i10;i+)printf(%d,resulti););/输出结果输出结果return 0;22四、保护模式下四、保护模式下Pentium 4Pentium 4的虚拟页式存储管理的虚拟页式存储管理主存主存页框页框页面页面程序程序1程序程序2程序程序3231 1、页面大小选择页面大小选择P
24、GEPCE83176543210MCEPAE PSEDE TSDVMEPVI保留,缺省为全保留,缺省为全0CR4PAEPSE物理地址位数物理地址位数页面大小页面大小0032位位4KB0132位位4KB/4MB1036位位4KB1136位位4KB/2MB242 2、3232位位4KB4KB分页方式地址变换分页方式地址变换 32位线位线性地址性地址页目录项号页目录项号页面号页面号偏移偏移CR332位物理地址位物理地址31222112110页目录页目录页表页表3112119876543210PWTPCD页表基地址页表基地址3112PRWUSAVLAD0页目页目录项录项PWTPCD页框基地址页框基地址
25、3112PRWUSAVLAD页表页表项项3112119876543210P=出现位,出现位,US=用户用户/监督位,监督位,PCD是页是页Cache禁止,禁止,D=Cache“脏脏”位,位,RW=读读/写位,写位,PWT=页写贯穿位,页写贯穿位,A=访问位,访问位,AVL=用户的操作系统可用用户的操作系统可用位。而第位。而第7位(位(PS)在在4KB分页中为分页中为0253 3、3232位位4MB4MB分页方式地址变换分页方式地址变换 32位线性地址位线性地址页目录项号页目录项号偏移偏移CR332位物理地址位物理地址3122210页目录页目录3122876543210PWTPCD页框基地址页框
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 高级 编程 技术
限制150内