交流
商城
MCN
登入
注册
首页
提问
分享
讨论
建议
公告
动态
发表新帖
发表新帖
1 在bios中打印Hello, World!
分享
未结
0
1451
李延
LV6
2022-06-10
悬赏:20积分
# 1 准备环境 我们本章目标为,在一个没有操作系统的虚拟机上输出Hello, World!字符 我们整个环境分为编译环境与 运行环境 ## 1.1 编译环境 编译环境就是将我们写的汇编与c语言编译为可运行的二进制文件。具体环境为: 操作系统: centos7 (64位) 编译器:gnu gcc 4.8.5 ## 1.2 运行环境 运行环境为我们二进制文件具体运行的地方,这里我们使用虚拟机运行我们的系统。需要安装 - windows 系统 - Bochs (虚拟机,运行我们的文件) - WinHex (二进制编辑器,查看我们的二进制文件) [Bochs-win64-2.7](https://www.lioyan.cn/data/Bochs-win64-2.7.exe) [WinHex](https://www.lioyan.cn/data/WinHex_20.4_SR-5_Single.exe) 将上述几个软件安装完成后我们开始 在没有系统的虚拟机上输出一下“Hello, World!” # 2 编译代码 ## 2.1 准备汇编代码 准备如下代码汇编代码,文件名为: bootsect.s ```asm .code16 .global _start .equ BOOTSEG, 0x07c0 # original address of boot-sector _start: mov $BOOTSEG,%ax mov %ax,%es mov $0x03, %ah # read cursor pos xor %bh, %bh int $0x10 mov $13, %cx mov $0x0007, %bx # page 0, attribute 7 (normal) mov $msg1, %bp mov $0x1301, %ax # write string, move cursor int $0x10 msg1: .string "Hello, World!" .org 510 boot_flag: .word 0xAA55 ``` ## 2.2 编译 代码 将我们的汇编代码在编译环境中进行编译 ```shell as --32 -o bootsect.o bootsect.s ld -m elf_i386 -Ttext 0 -o bootsect bootsect.o OBJCOPY -R .pdr -R .comment -R.note -S -O binary bootsect ``` 这样我们就得到一个名为bootsect 的二进制文件 # 3 准备虚拟硬盘 在“我的电脑” 右键选择 “管理”,打开 磁盘管理  创建一个vhd 格式虚拟硬盘  点击确定后,就可以在我们选择的位置看到一个vhd 文件,这个就是我们创建的虚拟硬盘, 点击分离,使windos与我们新创建的虚拟硬盘脱离,因为后面我们要自己编辑它,不分离的化将不能编辑  # 4 将我们的代码写入到虚拟硬盘 使用 WinHex 打开我们创建的虚拟硬盘   这个时候我们看到刚创建的硬盘内容全为00,下一步就需要将我们的代码写入到这里 我们同样用winHe打开 我们的bootsect 文件,入下图  将整个文件内容复制到虚拟硬盘中,并保存  # 5 创建虚拟机 打开Bochs 选择:DIsk&Boot ,点击Edit,编辑配置  切换到如图位置  选择disk,并在下面选项指定刚刚的虚拟磁盘文件   设置磁盘的柱面、磁头、扇区 。这里先按照如图填写,后面我们再详细说明  设置boot为dist方式加载  完成后点击确定,关闭配置页面 之后我们可以通过save保存我们的配置,方便下次打开  # 6 启动虚拟机 点击start 运行虚拟机  之后就可以看到我们打印的字符串了  # 7 fixvhdw 软件介绍 前面我们是通过粘贴复制将我们的代码复制到虚拟硬盘上的,太过于麻烦。我们可以使用fixvhdw,来写入 [fixvhdw](https://www.lioyan.cn/data/FixVhdw.zip) 点击选择,选择我们的vhd文件  这里出现了这个文件的柱面信息,就是我们之前启动虚拟机时,需要的内容 在数据文件1 选择我们编译的文件  之后我们就可以直接将我们的代码写入到硬盘了。  # 8 在VMware中运行 在日常中,我们常用的虚拟机是VMware,所以这里演示一下在VMware运行情况 选择新建虚拟机:  选择 “自定义”  之后选择稍后按照系统  之后一直下一步,到选择虚拟磁盘处,选择 现有虚拟磁盘  选择我们刚刚的文件,之后 不转换格式  完成虚拟机的创建,启动虚拟机  可以看到我们输出的字符
回帖
消灭零回复
提交回复
热议榜
java 相关知识分享
8
好的程序员与不好的程序员
6
写给工程师的十条精进原则
5
spring boot以jar包运行配置的logback日志文件没生成
5
一步一步分析SpringBoot启动源码(一)
5
MockMvc测试
5
【吐槽向】是不是有个吐槽的板块比较好玩
4
logstash jdbc同步mysql多表数据到elasticsearch
3
IntelliJ IDEA 优质License Server
3
.gitignore忽略规则
3
SpringBoot启动源码分析
3
一步一步分析SpringBoot启动源码(三)
3
2
一步一步分析SpringBoot启动源码(二)
2
积分不够将无法发表新帖
2
官方产品
Meta-Boot - 基于MCN
MCN - 快速构建SpringBoot应用
微信扫码关注公众号