欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

俺啥也不懂-不知道什么时候才会编写操作系统-一个hello world写一年-10h中断黑底绿字

程序员文章站 2022-07-14 10:05:13
...

先看代码

	org	07c00h			; 告诉编译器程序加载到7c00处
	mov	ax, cs
	mov	ds, ax
	mov	es, ax
	call	DispStr			; 调用显示字符串例程
	jmp	$			; 无限循环
DispStr:
	mov	ax, BootMessage
	mov	bp, ax			; ES:BP = 串地址
	mov	cx, len_string			; CX = 串长度
	mov	ax, 01301h		; AH = 13,  AL = 01h
	mov	bx, 000ah		; 页号为0(BH = 0) 黑底红字(BL = 0Ch,高亮),改成bh试一下,
	mov	dl, 0
	int	10h			; 10h 号中断
	ret
BootMessage:		db	"Hello, OS world!"
len_string  equ  $ - BootMessage
times 	510-($-$$)	db	0	; 填充剩下的空间,使生成的二进制代码恰好为512字节
dw 	0xaa55				; 结束标志

10h中断时和ah寄存器配合使用的,注意上面代码中的mov    ax, 01301h,ah等于13,这个13是16进制的,不是10进制的,13号中断代表的是:在Teletype模式下显示字符串,具体说就是在屏幕的光标处写一个字符,并推进光标的位置,注意:红字这句是搜索来的,地址:https://www.cnblogs.com/longintchar/p/5224408.html

bl代表属性,如注释中bl=0ch,代表黑底红字,高亮,诸位可以试一下bl=0ah或者bl=0bh,也就是mov bx,000ah或者mov bx,000bh。

具体的关于10h的中断,不细讲,很多教科书级别的文章写的很清楚。各位自行搜索,自行修改代码试验。

关于dw     0xaa55,俺觉得大家可以读一下这篇文章,很简单,但是看了就懂:https://blog.csdn.net/iteye_4515/article/details/81721631