- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第2章 汇编语言程序设计2-4
2.5 微处理器保护模式程序结构 2.5.1 保护模式下操作系统类指令 2.5.2 保护模式下特殊汇编伪指令 2.5.3 保护模式下程序设计举例 2.6 汇编语言和C/C++语言混合编程 2.6.1 在C/C++语言中使用汇编语言 2.6.2 在C/C++中利用中断访问BIOS例行程序 2.6.3 利用C/C++库函数调用DOS例行程序 void cls(void) { union REGS regs; regs.h.ah=6; regs.h.al=0; regs.h.ch=0; regs.h..cl=0; regs.h.dh=24; regs.h.dl=79; regs.h.bh=7; int86(0x10,regs,regs); } * 2.4.1 前面已详细讨论了微处理器的实模式操作以及它所运行的指令系统,微处理器一旦复位,它就在实模式下工作,但可以利用控制寄存器CR0中的PE位,通过软件切换到保护模式。在保护模式下,CPU的寻址方式与实模式不同。在实模式下,CPU的寻址方式是段地址加段内偏移地址。但在保护模式下,段寄存器CS、DS、ES、SS、FS、GS的意义和实模式不同,它们里面放的不再是段地址,而是指向全局描述符表(GDT)或局部描述符表(中的某项的指针,称为选择子。GDT或LDT由GDTR或LDTR指出。对于全局描述符表GDT,它的起始地址GDTR寄存器给出,对于局部描述符表LDT,要由LDTR指向GDT中的一个描述符,然后由这个描述符来指出LDT的位置和界限长度。 选择子位0和位1的值是特权级,标志着当前代码的特权或数据所属的特权级。它的值可以是0~3。数值越大,特权越低。CS寄存器中的代2位称为当前特权级。当前特权级低的代码不能用简单的方法修改特权级高的数据;若要修改当前特权级,则必须用特别的方法,而不能只简单地通过CS的值来实现。 选择子位2是GDT或LDT的标志。为0时表示GDT,为1时选择LDT。 选择子位3~位15为描述符在GDT或LDT中的索引,用于指向第几个描述符。描述符可以为普通段描述符、系统段描述符和门描述符。在编程时,一般使用普通段描述符。描述符的格式如图1-28所示。 图1-28 描述符的格式 80X86向操作系统的开发者提供了实现多任务、多用户以及虚拟存储的操作系统所必须的各种指令,其中有些指令可以在实模式下使用,而另一些只能在保护模式下方能使用。下面介绍在保护模式下使用的操作系统类指令 1.加载全局描述符表LGDT 格式:LGDT mem48 执行操作:GDTR.Limit=[mem48 ] /*16位GDT界限*/ GDTR.Base=[mem48+2]; /*32位GDT基址*/ 功能:LGDT将指令中给定的48位伪描述符(mem48)装入全局描述符表寄存器。伪描述符由两部分组成,在低位字中装的是界限,而在高32位中装的是基地址。 2.存储全局描述符表SGDT 格式: SGDT mem48 执行操作: [mem48 ]=GDTR.Limit [mem48+2]=GDTR.Base 功能:把全局描述符表寄存器的内容被存入由mem48所指定的6个字节的伪描述符中。全局描述符表寄存器中的界限(16位)存于存储器低16位,而基址存于存储器的高32位。 3.加载中断描述符表LIDT 格式:LIDT mem48 执行操作: IDTR.Limit=[mem48] /*1 6位IDT界限*/ IDTR.Base=[mem48+2] /*32位IDT界限*/ 功能:LIDT将指令中给定的48位伪描述符装入中断描述符表寄存器,其中伪描述符的低位字装入中断描述符表寄存器的界限部分,而高32位装IDTR的基址部分。 4.存储中断描述符表SIDT 格式: SIDT mem 48 功能:中断描述符表寄存器内容被存入由mem48所指定的伪描述符中。IDTR的16位界限被存入伪描述符的低16位,IDTR的基址被存入伪描述符的高32位。 5.加载局部描述符表LLDT 格式:LLDT regl6/meml6 功能:LLDT将寄存器/存储器中的选择子装入局部描述符表(LDT)寄存器中。其中选择子必须指向全局描述符表(GDT)中的局部描述符。此指令一般在保护方式下使用。如果选择子为空,将使得LDT被标为无效。 6.存储局部描述符表SLDT 格式: SLDT regl6/meml6 功能:局部描述符表寄存器的内容存入寄存器/存储器中。 7.加载任务寄存器LTR
文档评论(0)