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添加进虚拟软驱,启动虚拟机:
在这里插入图片描述
屏幕打印了这行字符串

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值