一个简单的NASM 程序,开机输出字符串

当BIOS启动时,会将启动设备的第一个扇区(通常是512B大小)加载到内存的0x7c00处,并开始执行,因此,顺着这个思路,我们使用nasm编写一个简单的汇编程序,并将其写入到启动设备的第一个扇区中,这样,在电脑启动时就会去加载并执行我们的程序。

另外,需要知道的是对于8086机器,内存的0xB800处开始到BFFFF的地址 被映射到显卡的显存中,因而,如果想要通过显卡来在屏幕上面显示字符串的话,必须要将字符串写入到该块内存中。以一个字符为例,若想将其输出到屏幕上,首先,将它复制到0xB800处, 然后在后面的一个字节(即0xB801处)放置该字符的显示格式(0x07代表普通的黑底白字)。如果有多个字节将要输出,则依次类推,每个字符后面都紧跟着其显示格式。。。。

还有一点要注意的是,BIOS在加载启动扇区时,会检查其代码格式,只有最后两个字节(即511 和 512字节)为0xaa, 0x55时,才是符合要求的引导程序。所以在程序的最后要对这两个字节进行设定


;boot program

BOOTSEG 	equ 0x07c0
DISPLAYSEG	equ 0xb800

_start:

	;初始化数据段,使其指向段基址0X7C0处,即Boot代码被加载的地方
	mov		ax, BOOTSEG
	mov		ds, ax

	;将文本显示内存段基址 放在ES中,供后面显示字符使用
	mov 	ax, DISPLAYSEG
	mov 	es, ax

	mov		cx, msglen
	mov		si, message
	xor		di, di

print_str:

	mov		al, [si]
	mov		[es:di], al
	inc   si
	inc 	di
	mov byte	[es:di], 0x07
	inc 	di
	loop	print_str

	jmp near $      ;死循环,程序在此处终止


	message 	db "Loading System...", 13, 10
	msglen		db $ - message

	times 510-($-$$) db 0
	dw	0xaa55

具体的可以使用bochs仿真器来运行看看效果

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值