30天自制操作系统 day 1 写一个可以在没有操作系统的计算机上输出字符串的程序,并在计算机上运行

这篇具有很好参考价值的文章主要介绍了30天自制操作系统 day 1 写一个可以在没有操作系统的计算机上输出字符串的程序,并在计算机上运行。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

day 1

工具:qemu 模拟器

今日任务

计算机启动后,在屏幕打印一串字符串。

理论

显示字符的原理

把一些机器指令写在第一扇区。通过int 0x10中断,让显卡在屏幕上显示字符。只需要在0x10之前按照规定准备好寄存器,显卡就能正确显示字符。

显卡显示字符的规定

30天自制操作系统 day 1 写一个可以在没有操作系统的计算机上输出字符串的程序,并在计算机上运行,30天自制操作系统,操作系统

流程

计算机会按照规定的流程自行启动,初始化结束后,执行物理内存0x7c00处的指令。在这一步之前硬件会把磁盘上的第一个扇区(前512字节)装载到0x7c00处。打印字符串的指令和数据,就是写在这里的。

ORG指令

ORG 0x7c00

ORG指令是伪指令,它不会被CPU指令,是知道汇编器把汇编代码编译成机器码的。这条指令告诉汇编器,下面内容的起始地址是0x7c00。这样做的目的是确定标号的具体地址。比如如果有个标号为entry,entry具体是多少地址,会受到ORG的影响。

实现代码

这个代码和书中的不一样,但是能够实现同样的功能。

    ORG 0x7c00 ;伪指令,告诉编译器第一条指令的地址是0x7c00,cpu并不执行
    MOV SI,data
putloop:
    ;为显卡中断做参数准备
    MOV AL,[SI] ;AL 要打印的字符
    CMP AL,0
	JE end
    MOV AH,0x0e ;操作码,0x0e是打印字符
    MOV BL,15   ;颜色码
    MOV BH,0    ;规定填0
    INT 0x10    ;显卡中断,填充好AL,AH,BL,BH,进行显卡中断将显示一个字符
    ADD SI,1
    JMP putloop
end:
    HLT
    JMP end
data:
    DB 0x0a ;换行
    DB "hello_world!"
    DB 0x0a ;换行
    DB 0 ;结束符
fill:
    RESB 0x7dfe-$
    DB 0x55,0xaa

编写代码时的错误

  1. 两个操作数的指令,操作数与操作数间应该用逗号隔开
  2. CMP指令比较时,操作数不能是内存。

编译执行

我已经把tolset里的ztool添加到了环境变量,所以我可以在任何地方通过命令行运行那些工具
30天自制操作系统 day 1 写一个可以在没有操作系统的计算机上输出字符串的程序,并在计算机上运行,30天自制操作系统,操作系统

编译

nask hello_world.asm hello_world.img

把编译结果作为qemu磁盘的第一扇区

copy hello_world.img tolset\z_tools\qemu\fdimage0.bin

运行qemu

make -C tolset\z_tools\qemu

运行结果

30天自制操作系统 day 1 写一个可以在没有操作系统的计算机上输出字符串的程序,并在计算机上运行,30天自制操作系统,操作系统文章来源地址https://www.toymoban.com/news/detail-601648.html

到了这里,关于30天自制操作系统 day 1 写一个可以在没有操作系统的计算机上输出字符串的程序,并在计算机上运行的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Python入门教程30:(Win系统)下PyCharm常用的快捷键操作

    pycharm快捷键及一些常用设置 1、编辑(Editing) Ctrl + Space 基本的代码完成(类、方法、属性) Ctrl + Alt + Space 快速导入任意类 Ctrl + Shift + Enter 语句完成 Ctrl + P 参数信息(在方法中调用参数) Ctrl + Q 快速查看文档 Shift + F1 外部文档 Ctrl + 鼠标 简介 Ctrl + F1 显示错误描述或警告信

    2024年02月10日
    浏览(43)
  • 操作系统 day03(运行机制)

    机器指令 二进制机器指令就是处理器(CPU)能识别、执行的最基本命令 程序运行的过程就是CPU执行一条一条的机器指令的过程 应用程序和内核程序 操作系统的最重要角色是:系统资源的管理者,而操作系统的对系统资源的管理工作就是在内核部分实现的 特权指令和非特权

    2024年02月06日
    浏览(49)
  • 操作系统 day01(概念和功能)

    作为系统资源的管理者 向上层提供方便易用的服务 操作系统给普通用户使用的接口 GUI/图形化界面 联机命令接口/交互式命令接口:用户说一句,系统跟着做一句,如CMD 脱机命令接口/批处理命令接口:用户说一堆,系统跟着做一堆,如 *.bat 操作系统给软件/程序员使用的接口

    2024年02月06日
    浏览(37)
  • 操作系统 day05(体系结构、开机过程、虚拟机)

    内核 内核是操作系统最基本、最核心的部分,实现操作系统内核功能的那些程序就是内核程序 这其中:时钟、中断、原语是与硬件关联最紧密的模块,而进程管理、存储器管理、设备管理更多的是对数据结构的操作,不会直接涉及硬件 两种设计CPU内核的方式 对微内核来说:

    2024年02月06日
    浏览(45)
  • 操作系统备考学习 day1 (1.1.1-1.3.1)

    年初做了一个c++的webserver 的项目,在学习过程中已经解除部分操作系统的知识,在已接触熟识的部分,可能会有所跳过 操作系统的概念、功能和目标 操作系统的定义:操作系统(OS)是指 控制 和管理整个计算机系统的 硬件和软件 资源,并合理地组织调度计算机的工作和资源的

    2024年02月10日
    浏览(28)
  • 【操作系统】半小时写一个微型操作系统-写一个启动扇区并且导入到软盘镜像中

            我们使用软盘来启动操作系统时,系统首先就是从软盘的第一个扇区中开始读取数据,也就是第0面,0磁道的第0个扇区,软盘的每个扇区为512个字节的大小,如果最后两个字节为0xaa55(当BIOS看到这两个字节时,就认为是引导扇区的结束标志),则代表该两个字节

    2023年04月15日
    浏览(67)
  • 操作系统实验-添加一个内核模块

    参考用书: 《操作系统实践:基于Linux的应用与内核编程》 一.添加一个内核模块 1.1需求分析 对于一个应用程序而言,源代码经编译后与标准运行库链接,通过系统调用执行操作系统内核中的特权指令,指令返回的结果通过系统调用返回给用户,完成程序。 由于Linux是单内

    2024年02月05日
    浏览(50)
  • 在vm虚拟机里面创建一个操作系统用户

    以下代码在xshell下面运行,远程创建。 这里我创建的是一个用户名为 dada 的用户 远程登陆普通用户后,需要切换到root用户 [redhat@localhost ~]$ su - root  输入密码后进入root用户,接下来就是创建操作系统用户了 [root@localhost ~]# 进入root用户后输入以下命令: vim /etc/passwd 按 i 键,编

    2024年02月05日
    浏览(77)
  • 从头开发一个RISC-V的操作系统(一)计算机系统漫游

    目标:通过这一个系列课程的学习,开发出一个简易的在RISC-V指令集架构上运行的操作系统。 这个系列的大部分文章和知识来自于:[完结] 循序渐进,学习开发一个RISC-V上的操作系统 - 汪辰 - 2021春,以及相关的github地址。 在这个过程中,这个系列相当于是我的学习笔记,做

    2024年04月09日
    浏览(48)
  • HDU 操作系统实验二 -设计一个系统调用,返回指定进程的相关时间信息

    目录 一、实验思路 二、准备工作——Linux内核编译步骤 1.实验环境配置 2.下载内核源码 3.解压缩内核源码文件 4.清除残留的.config和.o文件 5.配置内核 6.编译内核,生成启动映像文件 7.编译模块 8.安装内核 9.配置grub引导程序 10.重启系统 三、设计系统调用,返回指定进程的相关

    2024年02月03日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包