- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第二章汇编
第二章 编写主引导扇区代码 了解8086处理器的通用寄存器 程序重定位问题 8086处理器的段寄存器 8086处理器的内存分段机制 汇编语言 Intel处理器的启动过程 2.1 硬盘基本知识 磁道、柱面、扇区;扇区编号一般为1~63; 主引导扇区(Main Boot Sector, MBR):0面0道1扇区; 如果计算机的设置是从硬盘启动,那么ROM-BIOS将读取硬盘主引导扇区的内容,将它加载到内存地址0x0000:0x7c00处(即物理地址0x07c00),然后用一个jmp指令跳到那里接着执行:Jmp 0x0000:0x7c00 所以如果我们将编写的程序写入到主引导扇区,我们的程序就不需要操作系统的支持就可以执行。 2.1 硬盘基本知识 硬盘访问方法:CHS模式与LBA模式; LBA=C×磁头总数×每道扇区数┼H×每道扇区数┼(S―1) LBA是逻辑扇区号,C、H、S是物理扇区所在的磁道、磁头和扇区号。 一个有效的主引导扇区,其最后两个字节应当是0x55和0xAA,ROM-BIOS程序首先检测这两个标志,如果主引导扇区有效,则以一个段间转移指令Jmp 0x0000:0x7c00跳到那里继续执行。 2.1 硬盘基本知识 一个有效的主引导扇区,其最后两个字节应当是0x55和0xAA,ROM-BIOS程序首先检测这两个标志,如果主引导扇区有效,则以一个段间转移指令Jmp 0x0000:0x7c00跳到那里继续执行。? 一般来说,主引导扇区是由操作系统负责的。正常情况下,一段精心编写的主引导扇区代码将检测用来启动计算机的操作系统,并计算出它所在的硬盘位置。然后,它把操作系统的自举代码加载到内存,也用jmp指令跳转到那里继续执行,直到操作系统完全启动。 2.2 显卡和显存 显卡的图形模式和字符模式。 图形模式下,显卡的分辨率:像素个数(如1280×800),真彩色用3个字节表示一个像素的颜色。 在所有个人计算机上使用的显卡,在加电自检之后,都初始化为80×25的文本模式,在这种模式下,屏幕上可以显示25行,每行80个字符,每屏总共2000个字符。 2.2 显卡和显存 在8086处理器的计算机系统中,可以访问1MB内存,0x00000~0x9FFFF属于常规内存,由内存条提供,0xF0000~0xFFFFF为ROM-BIOS。 中间的0xA0000~0xEFFFF这320KB空间,由特定的外部设备来提供,其中就包括显卡。一直以来,0xB8000~0xBFFFF这段物理地址空间是留给显卡的,由显卡来使用,用来显示文本。 在文本模式下,屏幕上的每个字符对应着显存中的连续两个字符,前一个是字符的ASCII码,后一个是字符的显示属性,包括字符颜色(前景色)和底色(背景色)。 2.2 显卡和显存 在文本模式下,屏幕上的每个字符对应着显存中的连续两个字符,前一个是字符的ASCII码,后一个是字符的显示属性,包括字符颜色(前景色)和底色(背景色)。下图是显示属性字节的各位定义: 2.2 显卡和显存 2.3 汇编地址与标号 汇编地址:在源程序的编译阶段,编译器会把源程序整体上作为一个独立的段来处理,并从0开始计算和跟踪每一条指令的地址。因为该地址是在编译期间计算的,故称为汇编地址。所以汇编地址是在源程序编译期间,编译器为每条指令确定的汇编位置,指示该指令相对于程序起始处或者段起始处的偏移量,以字节计。当编译后的程序装入物理内存后,它又是该指令在内存段内的偏移地址。 2.3 汇编地址与标号 标号:在NASM汇编语言里,每条指令的前面都可以拥有一个标号,以代表和指示该指令的汇编地址。因为由程序员来计算和跟踪每条指令所在的汇编地址是极其困难的。如: infi:jmp near infi infi是标号,标号可以由字母、数字、”_”、”$”、”#”、”@”、”~”、”.”、”?”组成,但必须以字母、”_”、”.”、”?”中的任何一个开头。 infi:jmp near infi可以写成: infi jmp near infi 或写成: infi: jmp near infi 2.4 声明并初始化数据 伪指令:是汇编指令的一种,它没有对应的机器指令,所以不是机器指令的助记符。 使用伪指令DB、DW、DD、DQ来声明并初始化数据。 DB:声明字节数据,跟在DB后面的操作数在当前占一个字节。 DW:声明字数据,跟在DW后面的操作数在当前占一个字(2个字节)。 DD:声明双字数据,跟在DD后面的操作数在当前占一个双字(4个字节) 。 DQ:声明4字数据,跟在DQ后面的操作数在当前占一个4字(8个字节) 。 2.5 一些指令 mov指令:目的操作数是通用寄存器或内存单元;源操作数是相同数据宽度的通用寄存器或内存单元。 如: mov ah, bh mov ax,
文档评论(0)