自制操作系统-使用16进制文件显示 hello world
1.下载qemu:
https://www.cnblogs.com/sea-stream/p/10849382.html
2.制作软盘镜像
使用010editor,新建文件
图2
另保存为cherryOS.img.
原理
我们现在在使用16进制手动编写一个软盘格式的文件。一个软盘的大小就是1474560字节,这也是为什么我们操作系统的大小要是1474560字节。BIOS读软盘第一个扇区时,磁盘内不同地方的内容有不同的含义,这里不仔细说明每一位的含义了。其大概意思为,软盘的格式为FAT12,软盘的名称为HELLOOS(这里并没有改成CherryOS,因为这不是最终的系统,这只是一次实验)
如果将计算机的开机设置为从软盘启动,计算机开机会驱动软盘的磁头0读其0柱面1扇区的内容到内存0x7c00~ 0x7dff处,并检查扇区最后两2字节内容,如果为55AAH,则从0x7c00开始执行这段程序。
如果将一个好的软盘的磁头0对应的0柱面1扇区内含有一段(让显存)显示“Hello world”的机器指令,且将扇区最后2个字节的内容为55AAH。设置计算机开机时从软盘启动后就能够显示“Hello World”。
这就是这一段代码的基本原理.
可以直接下载:
https://blog-1253353217.cos.ap-chengdu.myqcloud.com/blog10%20chrryosday1/cherryOS.img
使用010editor,可以打开这个文件。
3.打开命令行,进入到img路径,运行命令
qemu-system-i386 -hdd cherryOS.img
可以看到如下显示
参考:
https://www.jianshu.com/p/ba6a32d68ed5
自制操作系统-使用16进制文件显示 hello world的更多相关文章
- C/C++ 读取16进制文件
1.为什么有这种需求 因为有些情况需要避免出现乱码.不管什么编码都是二进制的,这样表示为16进制就可以啦. 2.如何读取16进制文件 最近编程用这一问题,网上查了一下,感觉还是自己写吧. 16进制数据 ...
- 使用vim修改和查看16进制文件
使用前的准备工作,如果没有安装,使用命令安装: pacman -S vim 使用vim的十六进制功能查看和编辑文本文件,创建测试文件,使用命令如下: vim test.txt 进入“插入”模式,使用命 ...
- c# 关于10进制和16进制转换以及显示
直接举例说明: int i = 15;//一个10进制数 string txt = Convert.ToString(i,16);//将上面10进制以16进制形式显示为f string s = &qu ...
- 怎么用Python Flask模板jinja2在网页上打印显示16进制数?
问题:Python列表(或者字典等)数据本身是10进制,现在需要以16进制输出显示在网页上 解决: Python Flask框架中 模板jinja2的If 表达式和过滤器 假设我有一个字典index, ...
- vim编辑16进制
你可以在vim中可以把文件转换为16进制来显示: :%!xxd 解释:把所有的行(%)用本地(!)的xxd程序打开. xxd本是linux下一个显示.编辑.转换二进制的命令. 返回正常显示: :%!x ...
- [原创]K8飞刀20160613 Plesk密码 & 注册表16进制转换 & Html实体解密
K8飞刀 by K8拉登哥哥@[K8搞基大队]博客: http://qqhack8.blog.163.com 简介: K8飞刀是一款多功能的安全测试工具. Hacker Swiss Army Kni ...
- linux以16进制查看文件
vim 先用vim -b data 以2进制打开文件,然后用xxd工具转化,在vim的命令行模式下: :%!xxd --将当前文本转化为16进制格式 :%!xxd -r --将16 ...
- JS实现——Base64编码解码,带16进制显示
在网上找了个JS实现的Base64编码转换,所以就想自己研究下,界面如下: 将代码以BASE64方式加密.解密 请输入要进行编码或解码的字符: 编码结果以ASCII码16进制显示 解码结果以ASCII ...
- pyserial 16进制显示与发送
pyserial 16进制显示与发送 http://www.centoscn.com/python/2013/0817/1320.html 十六进制显示的实质是把接收到的字符诸葛转换成其对应的ASCI ...
随机推荐
- 轻松搭建CAS 5.x系列(5)-增加密码找回和密码修改功能
概述说明 CAS内置了密码找回和密码修改的功能: 密码找回功能是,系统会吧密码重置的连接通过邮件或短信方式发送给用户,用户点击链接后就可以重置密码,cas还支持预留密码重置的问题,只有回答对了,才可以 ...
- (八)CXF之用spring添加拦截器
一.案例 本章案例是基于CXF之自定义拦截器基础之上改造的,目的是在服务端中用spring添加拦截器 配置web.xml <?xml version="1.0" encodi ...
- Autofac三种生命周期
InstancePerLifetimeScope:同一个Lifetime生成的对象是同一个实例 SingleInstance:单例模式,每次调用,都会使用同一个实例化的对象:每次都用同一个对象: In ...
- Post请求数据传到后台+号变成了空格
问题: 今天遇到一个问题:页面带有"+"号的数据,传到服务端接口,结果+号变成了空格.例如:传“1+1”变成了"1 1". 解决办法: 方案一: 将“+”号替换 ...
- 表空间 oracle
--create table create table table_name ( column1 varchar2(20) not null, column2 number(8) not null, ...
- VBA运算符(九)
运算符可以用一个简单的表达式定义,例如:4 + 5等于9.这里,4和5称为操作数,+被称为运算符.VBA支持以下类型的运算符 - 算术运算符 比较运算符 逻辑(或关系)运算符 连接运算符 算术操作符 ...
- 案例:selenium实现登录百度(如有验证码,需要手动输入)
func.py https://www.cnblogs.com/andy9468/p/10899508.html baidu_login.py中(如有验证码,需要手动输入) # 导入webdriver ...
- 自定义flask转换器
自定义flask转换器 以匹配手机号为例: # 1. 定义自己的转换器 class MobileConverter(BaseConverter): def __init__(self, url_map ...
- 线程池中 submit()和 execute()方法有什么区别?(未完成)
线程池中 submit()和 execute()方法有什么区别?(未完成)
- NLP传统基础(1)---BM25算法---计算文档和query相关性
一.简介:TF-IDF 的改进算法 https://blog.csdn.net/weixin_41090915/article/details/79053584 bm25 是一种用来评价搜索词和文档之 ...