网站大量收购独家精品文档,联系QQ:2885784924

12第十二章模式转换从实模式进入保护模式.doc

12第十二章模式转换从实模式进入保护模式.doc

  1. 1、本文档共13页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
12第十二章模式转换从实模式进入保护模式

第十二章 模式转换——从实模式进入保护模式 12.1 NASM编译实践 12.1.1 实验20 —— NASM编译 情景描述 使用NASM编译一段程序,并可以在裸机上运行。 实现功能 在开机后显示Hello, OS world! 流程 初始化寄存器 调用BIOS int 10h,显示字符串 进入死循环 代码及注释 %define _BOOT_DEBUG_ %ifdef _BOOT_DEBUG_ org 0100h %else org 07c00h %endif ;告诉编译器加载到0100处生成,这样方便生成com文件。 ;或者告诉编译器加载到7c00处生成,这样方便 mov ax,cs ;将当前段地址放入ax,可以不要 mov ds,ax ;将当前段地址放入数据寄存器,可以不要 mov es,ax ;将当前段地址放入extra寄存器,可以不要 call DispStr ;调用显示字符串程序 jmp $ ;无限循环(跳转到当前地址) DispStr: mov ax,BootMessage ;BootMessage的首地址送ax mov bp,ax ; 段内地址送到bp,至此地址完成 —— CS:BP = 串地址 mov cx,16 ; CX = 串长度 mov ax,01301h ; AH = 13,AL = 01h mov bx,000ch ; BH = 0(页号为0),BL = 0ch(黑底红字高亮) mov dl,0 ; 0送dx寄存器的低字节 int 10h ; 10h号中断(视频中断,对应的中断向量为40-43H) ret ; 从显示子程序中返回到主程序 BootMessage: db Hello, OS world! times 510-($-$$) db 0 ; 用“0”填充0面0磁道1扇区剩下的空间,使生成的二进制代码恰好为512字节; ;$是当前行的段内偏移地址,$$是本小节代码的第一行代码,在本程序中就是“org 07c00h” 的段内偏移地址。 dw 0xaa55 ;结束标志. 使得0面0磁道1扇区510字节存55,511字节存aa,0扇区从0-511号单元,共512个字节。(引导扇区的结束标志) 显示界面 运行程序界面如图12-1所示。 图12-1 运行程序界面 12.1.2 实验补充资料 一. 内存引导地址7C00 Intel公司当初设计8086系统内存时对内存(1M)是这样规定的内存包括暂驻程序区640K和系统内存区384K,在640K中把BIOS和驻留操作系统的数据和程序安排在低地址处,在保留一定的可扩展空间后,为配合BIOS和磁盘操作系统就把7C00规定为硬件及软件都支持的启动引导的内存地址,并写成引导规范。在当时各个公司都有自己的一些未公开的标准,而IBM公开推行IBM计算机的内部详细的结构时,他采用的是Intel的芯片,所以他遵循了这个标准,又由于大批的公司知道了这个标准之后,都兼容这个标准,以后也继续兼容,就真正成为一个共同的标准了,现在的CPU都是向下兼容的,还在用7C00。 由于引导扇区被加载到了7c00h处,代码中BootMessage的首地址放入bp中时,只是将8位放入了bp,缺省了高8位,这高8位需要由org指定,否则无法将正确的字符串相对偏移地址放入bp中: BootMessage变量对应字符串在内存中首地址=0000(es段值):{7c00(org指定)+BootMessage在程序段内偏移(8位2进制)} org会在编译期影响到内存寻址指令的编译(编译器会把所有程序用到的段内偏移地址自动加上org 后跟的数值),而其自身并不会被编译成机器码。就是为程序中所有的引用地址(需要计算的相对地址)增加一个段内偏移值。 二. 10h中断说明 10h中断表示,功能号为AH=13h时为写入字符串;AL=01h表示字符串包含属性;BH=页数;BL=显示属性;CX=字符串中的字符数量;DL,DH=从哪一列,行开始写;ES:BP指向该字符串 12.1.3 实验21 —— 反编译 通过反编译,可以将程序返回至源代码内容 反编译方法:ndisasmw -o 0x7c00 1.com 1.asm 显示1.asm内容如下: 00007C00 8CC8 mov ax,cs 00007C02 8ED8 mov ds,ax 00007C04 8EC0 mov es,ax 00007C06 E80200 call 0x7c0b 00007C09 EBFE jmp short 0x7c09 00007C0B B81E01

文档评论(0)

shenlan118 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档