简单计算机java程序_JAVA程序员需要知道的计算机底层基础10-操作系统引导程序的简单...

JAVA程序员需要知道的计算机底层基础10-操作系统引导程序的简单

JAVA程序员需要知道的计算机底层基础10-操作系统引导程序的简单制作

汇编实现引导程序

; 文件名 boot.asm

org 7c00h ; BIOS读入MBR(Master Boot Record主引导记录)后,从0x7c00h处开始执行,所以这里把程序扔到内存的0x7c00h中去

; 下面部分和10h有关中断,10h中断用来显示字符

mov ax, cs

mov es, ax

mov ax, msg

mov bp, ax ; ES:BP表示显示字符串的地址

mov cx, msgLen ; CX存字符长度

mov ax, 1301h ; AH=13h表示向TTY显示字符,AL=01h表示显示方式(字符串是否包含显示属性,01h表示不包含)

mov bx, 000fh ; BH=00h表示页号,BL=0fh表示颜色

mov dl, 0 ; 列

int 10h ;10h代表显示器硬件对应的中断信号

msg: db "hello world, welcome to OS!"

msgLen: equ $ - msg ; 字符串长度

times 510 - ($ - $$) db 0 ; 因为整个程序不足512字节,需要填充剩余部分

dw 0aa55h ; 魔数,必须有这两个字节BIOS才确认是MBR

程序实现的就是一个系统引导程序,在屏幕中输入一段文字。

可以发现这就是一个硬中断的简单实践,实际上和软中断的调用过程类似,也是给出参数到对应的寄存器,然后进行中断操作,由内核做出对应的操作。

nasm boot.asm -o boot.bin

1、 生成空白软盘镜像(软盘大小必须为1.44M,因此bs=1474560 )

dd if=/dev/zero of=floppy.img bs=1474560 count=1

2、制作包含主引导记录boot.bin的启动镜像文件(引导程序占512byte)

dd if=boot.bin of=myos.img bs=512 count=1

3、将第2步生成的bin引导镜像文件复制到空白软盘中,并在引导镜像内容后面的软盘内容补上空白,成为合适大小的软盘镜像,一共2880个扇区,略过第一个

dd if=floppy.img of=myos.img skip=1 seek=1 bs=512 count=2879

1、将myos.img下载到windows

2、VMWare创建空的虚拟机

a、文件 - 创建新的虚拟机 - 典型

b、稍后安装操作系统

c、其他

d、一路next 完成

e、虚拟机设置,去掉CD/DVD选项中“启动时连接”

f、网络,选择“仅主机模式”,勾选“启动时连接”(好像无所谓)

g、添加软盘驱动器 使用软盘映像 找到myos.img

3、启动虚拟机

内存时模式

内存时模式指的是计算器启动后,内存里存放的内容结构。

4e524162f181300c0172de45c35bdc45.png

从这里可以发现,操作系统的引导程序确实是在内存地址中的07C00H位置上。在这个引导程序之前的内存还存放了一些其他的东西,是关于一些例如BIOS自身的数据(例如我怎么输入了一串英文,但实质这对计算机来说就是一段01的数,如何让显示器可以把这段翻译成英文显示? 我猜测BIOS Data Area中就是装了这个映射的东西。

内存从引导程序再向上面看,发现还有一些固定的硬件之类的了。

为什么引导程序一定在07C00H?

简单来说,IBM最初约定的是在07C00H,但后续为了兼容性,就都统一都放在这个地方了。

参考:https://www.glamenv-septzen.net/en/view/6

JAVA程序员需要知道的计算机底层基础10-操作系统引导程序的简单相关教程

JAVA程序员需要知道的计算机底层基础07-中断

JAVA程序员需要知道的计算机底层基础07-中断 中断是和操作系统内核通信的一种机制,它本身也是一种信号,举个例子,一个应用程序运行过程中出现了卡顿,此时CPU在全力执行这个程序的进程,我们想通过键盘或者鼠标的某个按键来告诉操作系统将这个进程进行关闭

写在1024,致程序员致程序员节致自己

写在1024,致程序员致程序员节致自己 目录 前言 冷知识简谱 回忆 hello world 现今 感慨 在此总结了三点: 技术更新 技术类别与业务 展忘 多跑步多健身。 精进洞箫,》》》我可是资深二次元了。naruto main theme 人都是不完整的,自己缺失的角都需要她人来补

(助力校招)还在找工作的小伙伴看过来,2020年Java基础面试题(

(助力校招)还在找工作的小伙伴看过来,2020年Java基础面试题(附答案和解析) 金九银十,马上2020年10月份就过去了,作为小白是不是还在为拿不到合适的offer烦恼,面试有技巧,知识要过关。操练题目,发挥更稳。一起来学学这些经典面试题和相关知识拓展吧!

javax.servlet.ServletContext.getVirtualServerName()Ljava/lan

javax.servlet.ServletContext.getVirtualServerName()Ljava/lang/String; 我这边因为无法重现错误所以部分异常信息使用的别人的,但是不影响解决问题 The method's class, javax.persistence.Table, is available from the following locations:jar:file:/F:

Java学习——GUI编程(鼠标单击按钮事件)

Java学习——GUI编程(鼠标单击按钮事件) package 狂神说.p3;import java.awt.*;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.WindowAdapter;import java.awt.event.WindowEvent;public class TestAction

Java学习——GUI编程(我的第一个Frame窗口)

Java学习——GUI编程(我的第一个Frame窗口) package 狂神说.p3;import java.awt.*;public abstract class TestFrame { public static void main(String[] args) { Frame frame = new Frame(我的第一个Java图像界面); //设置界面可见; frame.setVisible(true

1024技术干货 ~ Java如何防止接口重复提交

1024技术干货 ~ Java如何防止接口重复提交 正如本文标题所言,今天我们来聊一聊在Java应用系统中如何防止接口重复提交;简单地讲,这其实就是“重复提交”的话题,本文将从以下几个部分展开介绍: 1.“重复提交”简介与造成的后果 2.“防止接口重复提交”的实

死磕数据结构与算法(排序java)--堆排序。才疏学浅,如有错误,

死磕数据结构与算法(排序java)--堆排序。才疏学浅,如有错误,及时指正 死磕数据结构与算法(排序)--堆排序。才疏学浅,如有错误,及时指正 八大排序算法 1. [冒泡排序算法](https://blog.csdn.net/qq_41497756/article/details/108816158) 2. [选择排序算

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值