保护模式编程.pdfVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
保护模式编程

第1章 保护模式编程一 如果想更深、更亲近的了解电脑软件。那么学习cpu 是你的必选!! 386 是CPU 史的一大 转折点,那386 做基础课是最好不过了。那么我们将开始进行学习之旅!!!大家跟我一块学 习吧,呵呵!!! 1.1 准备工作 l 1 、NASM 编译环境(当然Masm 也可以 但是用它来写COM 程序比较 麻烦) l 2 、虚拟机 Virtual PC(Windows 平台 ,执行比较快,即模拟又虚拟硬件)、 WMWarve(WIndows 平台 虚拟硬件,)、 Bochs(支持Windows 平台、也支持在Linux 平台上运行 有RPM 版本的) 我们这些生长在Windows 这棵大树下的朋友们,还是用Virtual PC 吧.。 l 3 、写虚拟启动镜像文件的程序 :不知道我观察的对不对?用Nasm 编译一个bin 然后将它转换为img 镜像文件的时候。 只要文件大小符合软驱的标准就能启动。那么就代表 a.bin 与 a.img 文件的内容一模样就是 文件大小不一样!我是不太了解镜像文件格式.我用的是Virtual PC。 1.2 开始接触引导程序 1.2.1 Com 文件 Com 文件是纯二进制的文件,也是直接与 Cpu 交换的顺序指令文件。Com 文件的大小 是有限制的,不能超过64KB.因为8086 时代的CPU 地址线是20 位的,20 位能表达的数值也 就是fffffh(1MB )。而寄存器最高也只是16 位,无法用5 个F 的形式来表达地址,所以用CS(段 基地址)*16:IP(偏移地址)来寻址!80386 后通用寄存器都得到了32 位扩展! 而Cpu 地址线也得 到了32 位的扩展。引导程序前期是需要进入实模式的,因为这是硬件上的限制是IA32 的限 制。386cpu 只有两种模式: 实模式与保护模式!!!!,, 1.2.2 引导程序 引导程序也是有限制的,这个限制是靠Bios 处理的,开机后Bios 经过自检后,会从软驱或 者硬盘的 0 面 0 磁道 1 扇区搜寻一个程序文件。该文件的数据必需是等于 512Byte,并且以 aa55h 结尾的(高高低低)。那么bios 会认为它是引导程序,这个时候就会把该512byte 装载到 内存7c00 开始处。然后将主控权交给程序的第一行代码。那么这个时候程序脱离Bios 的控 制。Cpu 将执行程序的代码. 1.2.3 写一个引导程序 引导程序可以说是非常简单: 1、boot.asm(nasm 的源文件如下) ;欲编译,这里改成100h 就是com 程序 %define _BOOT_DEBUG_ ;做调试的时候用100h %ifdef _BOOT_DEBUG_ org 0100h %else org 07c00h ; 告诉编译器 以下代码段将从07c00h 内存地址处开始 %endif mov ax,cs ;让数据段与附加段寄存器跟代码段一样,因为COM 代码数据是混合. mov ds,ax mov es,ax call _HelloWorld ;让程序显示一个HelloWorld jmp $ ;$ 表示当前地址 无限循环 _HelloWorld: mov ax,strHello ;取得字符串的地址 mov bp,ax ;给堆栈基寄存器 mov cx,strLen mov ax,1301H ;ah 代表功能号 mov bx, 000ch ; 页号为0(BH = 0) 黑底红字(BL = 0Ch,高亮 mov dx,0001h ;显示的行与列 int 10h ;bios 10h 显示中断 ret strHello: db Hello World strLen equ $ - strHello times 510-($-$$) db 0 ; times 重复定义 510-($-$$)个 $$ 表示段的起始地址 dw 0xAA55 那么引导程序完成了,用 nasm boot.asm -o 就可以运行看效果. ,如改成引导程序只需把%define _DEBUG_BOOT_注释 然后 n

文档评论(0)

xxj1658888 + 关注
实名认证
文档贡献者

教师资格证持证人

该用户很懒,什么也没介绍

领域认证该用户于2024年04月12日上传了教师资格证

1亿VIP精品文档

相关文档