- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
说明一下,这里省略了一些print信息,目的是为了使代码短一些,而且print信息的代码都很简单,大家有兴趣可以自己读一下。
#include linux/config.h /* for CONFIG_ROOT_RDONLY */
#include asm/boot.h
// 我把这些宏的定义都列在下面了。
SETUPSECS =4 /* default nr ofsetup-sectors */
BOOTSEG =0x07C0 /* original address ofboot-sector */
INITSEG =0x9000 /* we move boot here - out of theway */
SETUPSEG =0x9020 /* setup starts here */
SYSSEG =0x10000 /* system loadedat 0x10000 (65536) */
SYSSIZE =0x7F00 /* system size: # of16-byte clicks */
/* to be loaded */
ROOT_DEV =0 /* ROOT_DEV is nowwritten by build */
SWAP_DEV =0 /* SWAP_DEV is nowwritten by build */
#ifndef SVGA_MODE
#define SVGA_MODE ASK_VGA
#endif
#ifndef RAMDISK
#define RAMDISK 0
#endif
#ifndef CONFIG_ROOT_RDONLY
#define CONFIG_ROOT_RDONLY 1
#endif
// 在此这上的部分,是不会出现在编译运行的二进制中的,这一部分内容只是汇编器所需要的信息
//下面是真正运行的代码了
.code16 // 表示下面的代码运行在16位模式下
.text
.global _start //global标签的意思是让链接器可以看到_start符号。
_start:
/* section 1的内容很简单,开机上电bios会把启动设备的一个扇区,加载到0x0:0x7c00
* 即BOOTSEG,并跳转到这里执行,然后程序会把自己搬运到0x:0x9000,如何搬?下面的* 代码很简单,不说了!为什么搬?最好的解释是,这块内存后面会挪作他用。
*/
*****************section1******************
movw $BOOTSEG, %ax
movw %ax, %ds
movw $INITSEG, %ax
movw %ax, %es
movw $256, %cx
subw %si, %si
subw %di, %di
cld
rep
movsw
****************section 1*******************
// 所谓的长跳转,后面跟段基址:段内偏移。别忘了这里是16位实模式
ljmp $INITSEG, $go
// 上面的ljmp的作用,就是在搬运完之后从go这里开始继续执行
go: movw $0x4000-12, %di // 用来设置栈底
// 注意在上面的搬运过程中ax被置为0x9000,即INITSEG
movw %ax, %ds
// 接下来这两句,将stack设置在0x9000:(0x4000 -12)
movw %ax, %ss
movw %di, %sp
您可能关注的文档
- ICT HP3070维修人员基本培训讲义.doc
- iCylan for iPad安装使用说明.doc
- Ifconfig网络配置工具详解.doc
- II. C语言本质_26链表、二叉树和哈希表_3 哈希表.doc
- III. Linux系统编程_28文件与I/O_2 C标准I/O库函数与Unbuffered I/O函数.doc
- III. Linux系统编程_ 32正则表达式_4 awk.doc
- III. Linux系统编程_ 33 信号_ 1 信号的基本概念.doc
- III. Linux系统编程_ 33 信号_ 2 产生信号.doc
- III. Linux系统编程_ 35 线程_4 编程练习.doc
- IIS和APACHE+PHP+MYSQL+ZEND+PHPMYADMIN配置详解.doc
文档评论(0)