2.Hello,DTOS

Posted 阿弥陀佛.a

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2.Hello,DTOS相关的知识,希望对你有一定的参考价值。








把0x07这个数据放入0xb800:0x01地址处,数据只占一个字节

至于为什么参数寄存器这么写,不用深究,可以查阅相关手册

org 0x7c00	//指明入口地址,主引导程序入口地址为这个

start:		//标签,另一层含义是下面一行指令的地址
    mov ax,cs	//下面四行:把相关寄存器值清零
    mov ss,ax
    mov ds,ax
    mov es,ax
	
	mov si,msg	//将msg代表的地址放入si寄存器,也就是msg下面一行指令的地址

print:
	mov al,[si]	//si寄存器里保存的数据放入al寄存器,al代表si所指向的内存中的数据
	add si,1	//si保存的地址值加1
	cmp al,0x00 //判断al保存的是否为0x00,一次判断是否结束
	je last	//je:判断比较是否相等,若相等则跳转到last标签所在之处
	mov ah,0x0e
	mov bx,0x0f
	int 0x10 //触发中断
	jmp print	//循环打印下一个字符,对应C语言中的while循环

last:		//相当于打印结束了,开始死循环
	hlt
	jmp last

msg:
    db 0x0a,0x0a	//define byte 用来定义数据,0x0a就是换行
    db "Hello,DTOS!"
    db 0x0a,0x0a //两个换行符
    times 510-($-$$) db 0x00 	//0x00代表数据结束符,由于没有达到512字节所以需要填零操作
    db 0x55,0xaa

($-$$): $代表这一行的起始地址,$$代表这些汇编的起始地址,那么两者相减就得到这段汇编占的字节,然后用510去减掉就是要填零的个数,为什么不是512,因为最后要有0x55,0xaa,所以是510。编写完保存为boot.asm
cs:代码段
ds:数据段
es:附加数据段




-fd:创建虚拟软盘,大小为1.44
dd:将二进制文件写入虚拟软盘
count=1 conv=notrunc : 连续写入不要有间隔


创建过程省略:


将虚拟软盘a.img添加进虚拟软驱,启动虚拟机:

屏幕打印了这行字符串

以上是关于2.Hello,DTOS的主要内容,如果未能解决你的问题,请参考以下文章

操作系统-Hello,DTOS!的创建

Hello,DTOS!(下)

联想新视界帝拓思(DTOS)联想CVC首亮相

DTOS帝拓思的3D引擎将取代游戏引擎巨兽,实现国产化替代

DTOS帝拓思的3D引擎将取代游戏引擎巨兽,实现国产化替代

ABP vNext微服务架构详细教程(补充篇)——单层模板(下)