java内核_用java做一个最小的操作系统内核2

(系列视频实战可观看网易云课堂:

Linux kernel Hacker, 从零构建自己的内核

)

上一节,我用java制作了一个虚拟软盘,当把软盘插入虚拟机,启动机器后,屏幕打印出java程序中设定的语句,然后卡死。

在java代码中,有一个二进制数组,imgContent, 它里面存储的实际上是一段二进制代码,当虚拟机设置为从软盘启动后,这段代码会被bios读取到内存中,然后指示cpu去执行imgContent 所存储的二进制代码。

那么这段二进制代码做了些什么呢,它主要是设置了一些初始化数据,然后调用bios中断,将某个缓冲区中的字符打印到屏幕上,然后进入一个死循环,实际上,这段二进制代码的功能,可以用汇编实现,然后用汇编编译器将其编译成二进制文件,然后再读入到imgConent缓冲区中,最后利用java程序生成虚拟软盘,最终也能实现相同的效果,我们先看看对应的汇编程序怎么写:

org 0x7c00

jmp entry

db 0x90

DB "OSKERNEL"

DW 512

DB 1

DW 1

DB 2

DW 224

DW 2880

DB 0xf0

DW 9

DW 18

DW 2

DD 0

DD 2880

DB 0,0,0x29

DD 0xFFFFFFFF

DB "MYFIRSTOS "

DB "FAT12 "

RESB 18

entry:

mov ax, 0

mov ss, ax

mov ds, ax

mov es, ax

mov si, msg

putloop:

mov al, [si]

add si, 1

cmp al, 0

je fin

mov ah, 0x0e

mov bx, 15

int 0x10

jmp putloop

fin:

HLT

jmp fin

msg:

DB 0x0a, 0x0a

db "hello, world"

db 0x0a

db 0

上面的汇编代码,实际上就实现了将hello, world 打印到屏幕上,然后进入死循环的功能,一般而言,操作系统的研究和设计,理论上已经很成熟,也不难懂,就是系统内容被加载如内存前,所做的一系列操作需要汇编来编写,而卡死很多人的,就是搞不懂汇编,就是因为掌握不了汇编,于是很多人被挡在了操作系统精髓的大门之外,其实,汇编没什么难的,我们一句一句来理解,就像背单词。

上面的程序第一句是 org 0x7c00, org 的意思是origin, 中文意思是“起始,起源,” org 后面的7c00 是物理内存地址,假设物理内存是一个byte类型的大数组,例如byte[] memory, 如果你有2 G内容&#x

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值