码迷,mamicode.com
首页 > 其他好文 > 详细

第三天、BootSector 来了

时间:2015-11-02 12:27:59      阅读:190      评论:0      收藏:0      [点我收藏+]

标签:

    今天正式开始照猫画虎了——对着书抄代码。从Boot Sector 开始:

; PC通电启动后,由内存地址 FFFF:0000(ROM中) 处开始,执行一个 jump 指令,
; 跳转到另一个 ROM 位置开始自检(RAM、keyboard、显示器、软硬磁盘等)。
; 之后控制权转移给 ROM 中的启动程序,将引导盘上的 Boot Sector 读入内存绝对位置 07C00h 处。
; 然后 JUMP 到 0X7C00 处,开始后运行 Boot Sector 程序。

	org 07c00h		; org 指令告诉编译器本程序将要被加载到内存的起始地址,
					; 编译器会把本程序中所有用到的段内偏移地址自动加上 org 后跟随的数值。
					; org 指令指示地址偏移调整是编译期概念,只影响内存寻址指令的编译,
					; 编译产生的程序已经加上偏移量。

	mov ax, cs
	mov ds, ax
	mov es, ax

	call DispStr
	jmp $

	; 显示字符串
DispStr:
	mov ax, BootMessage	; 变量和标签无区别,无[]为地址,有[]为值
	mov bp, ax			; es:bp = 字符串地址
	mov cx, 16			; cx = 字符串长度
	mov ax, 1301h		; ah = 功能号(13h,在Teletype模式下显示字符串),
						; al = 显示方式(01h,显示属性在BL中,光标跟随移动)
	mov bx, 000Ch		; bh = 页号(0h), bl =(AL = 0、1时)显示属性(0Ch,黑底红字)
	mov dx, 0			; DH、DL = 起始行、列
	int 10h
	ret

BootMessage:
	db ‘Hello, World!‘, 0
	times 510 - ($ - $$) db 0	; $ = 编译后本行的地址,$$ = 编译后本节的起始地址
								; times = 重复
	dw 0xAA55					; Boot Sector 最后2个字节为 0xAA55,表示这是启动程序


    编译,用昨天写的小程序覆写,虚拟机加载启动。。。。。。成功!

第三天、BootSector 来了

标签:

原文地址:http://my.oschina.net/u/580100/blog/524748

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!