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的主要内容,如果未能解决你的问题,请参考以下文章