- 1、本文档共13页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 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
您可能关注的文档
- (三)大气环流形势.doc
- (乙酸异戊酯)天那水MSDS.doc
- (人教版选修3-1)36带电粒子在匀强磁场中的运动.doc
- (北邮)运筹学课本答案.doc
- (投标用)施工组织设计.doc
- (新)第2章(2节)模拟题.doc
- (扩区)集中胶带大巷东揭煤措施3.doc
- (文献)青少年肥胖及代谢异常与INSIG2基因多态性.doc
- (铝)生产设备操作规程.doc
- (计算器).doc
- 部编版一年级语文下册第四单元《8 夜色》教学课件(2025年春-新编教材).pptx
- 江苏省盐城市五校2024-2025学年高一下学期4月期中联考数学试卷(含答案).pdf
- 2025年高一语文教师工作总结简单版(六).docx
- 第12课《台阶》课件 2024—2025学年统编版语文七年级下册(共39张PPT).pptx
- 部编版一年级语文下册第四单元《语文园地四》教学课件(2025年春-新编教材).pptx
- 部编版一年级语文下册第四单元《9 端午粽》教学课件(2025年春-新编教材).pptx
- 指导技能的关键要素与提升的策略研究与分享.docx
- 湖南省永州四中直升班2025届高三(下)适应性数学试卷(含答案).pdf
- 湖北省荆荆宜襄·四地七校联盟2024-2025学年高一(下)期中联考数学试卷(含答案).pdf
- 2025年04月17日袁荣的初中历史组卷.docx
文档评论(0)