从零开始创造自己的操作系统(2):汇编入门

32位汇编:MASM32环境搭建与汇编窗口程序 从零开始:32位汇编开发环境搭建与第一个窗口程序实战 阅读详情

书接上回

继续开发:

上次,那个引导扇区代码看的大家一头雾水,今天咱们就一步步开发

(上一次是作者偷懒了,直接复制的)

    org 0x7c00
    jmp entry
    db 0x90
    db "HELLOIPL"
    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 "HELLO-OS"
    db "FAT12"
    resb 18
entry:
    mov ax,0
    mov ss,ax
    mov sp,0x7c00
    mov ds,ax
    mov es,ax
    
    mov si,msg
print:
    mov al,[si]
    add si
    cmp al,0
    
    je fin
    mov ah,0x0e
    mov bx,15
    int 0x10
    jmp print
fin:
    hlt
    jmp fin
msg:
    db 0x0a,0x0A
    db "hello,world!"
    db 0x0a
    db 0
times 510-($-$$) db 0
db 0xaa55

(作者又偷懒了,一个注释没写)

汇编入门:

咱们先看第一行,有个org指令,是指把程序放在指定的内存地址。《30天自制操作系统》这本书上说没有org不能正确的执行,其实是错误的。关于这个,我们以后再讲。看看org后面是0x7c00,这个地址有什么特别的?改成1234不行吗?还真不行。

在电脑启动的时候,BIOS负责加载启动失败的第一个扇区进内存,这个内存地址就是0x7c00。也就是说,我们的操作系统是在0x7c00开始运行的。

然后是jmp指令,它是跳转到特定内存地址的,但是entry是什么?显然不是一个内存地址。entry这样的,在汇编语言中叫做标号。它就是一个内存地址,意思是从程序开始到entry代码的内存地址+程序的装载地址。我们的汇编器会自动计算出来。这就要用到org指令了。

在下面是dd,db,dw和resb,与org一样,叫伪指令。伪指令不会编译出任何东西,只是协助汇编器编译。这些指令的作用是填充数据。dd是define double word,dw是define word,db是define byte,只是填充的位数不一样而已。resb是填充0

接下来是mov指令,mov是给寄存器赋值的意思。在这里说一下什么是寄存器:

寄存器

ax:累加寄存器

cx:计数寄存器

dx:数据寄存器

bx:基址寄存器

sp:栈指针寄存器 

bp:基址指针寄存器

si:源变址寄存器

di:目的变址寄存器

寄存器是CPU中的存储电路,相当于变量。这几个是常用的

其他的不一一列举了,遇到的时候再讲

突然发现已经1024个字了,咱们下期再见┏(^0^)┛

简要介绍 | 两阶段点云目标检测:理论与实践 目标检测是计算机视觉中的一个重要任务,其目的是识别和定位图像中的物体。对于二维图像,这已经有许多有效的方法。然而,对于三维数据(如由LiDAR生成的点云数据),目标检测则更为复杂。 阅读详情

相关推荐

dell r630 配置raid_DELL服务器RAID配置图文教程

名称解释:Disk Group:磁盘组,这里相当于是阵列,例如配置了一个RAID5,就是一个磁盘组VD(Virtual Disk): 虚拟磁盘,虚拟磁盘可以不使用阵列的全部容量,也就是说一个磁盘组可以分为多个VDPD(Physical Disk): 物理磁盘HS:Hot Spare 热备Mgmt:管理【一】创建逻辑磁盘1、按照屏幕下方的虚拟磁盘管理器提示,在VD Mgmt菜单(可以通过CTRL+P...

weixin_33253741的博客 3510

【操作系统学习实践】从零开始制作,开发操作系统(一)—— 汇编语言的编写以及映像文件的制作

从零开始制作开发操作系统(一),主要进行汇编语言代码的编写,完成一个简易的可以显示hello,world的操作系统,并通过汇编程序生成映像文件,通过QEMU虚拟器完成装载与启动运行

bay_Tong桐小白的博客 4595

FID指标实战:如何用Python快速计算生成图像的质量分数(附完整代码)

本文详细介绍了如何使用Python计算Fréchet Inception Distance(FID)指标,以评估生成图像的质量。通过完整的代码示例和优化技巧,帮助开发者快速实现FID计算,并解读分数背后的实际意义,适用于GAN和扩散模型的性能评估。

weixin_28718487的博客 376

探秘操作系统核心:《从零开始的OS自作入门》及MikanOS项目推荐

探秘操作系统核心:《从零开始的OS自作入门》及MikanOS项目推荐 去发现同类优质开源项目:https://gitcode.com/ 在探索计算机科学的最深处,自造操作系统一直是一段既神秘又激动人心的旅程。今天,我们有幸介绍一个特别的开源项目——MikanOS,它源自于书籍《从零开始的OS自作入门》,由作者内田公太(uchan)精心打造,旨在引导广大技术爱好者走进操作系统的奇妙世界。 项目介绍 ...

gitblog_00003的博客 664

408——计算机组成原理(持续更新)

小数点前的0代表正数,1代表负数。

qq_55202378的博客 1722

Xilinx DMA IP核心配置与实战解析

本文介绍了Xilinx DMA IP核在直接寄存器模式下的配置与工作流程。DMA通过AXI4-Lite接口接收指令,实现内存与数据流之间的高速传输,无需CPU介入。文章详细说明了开发环境配置、IP参数设置(包括地址位宽、数据宽度等关键参数)以及寄存器操作流程。通过仿真分析,展示了读操作中AXI4接口的突发传输机制,包括地址、长度和突发大小的配置。文中还提供了寄存器地址映射表、信号定义等关键信息,为DMA IP核的应用开发提供了实用参考。

weixin_37688766的博客 884

从零开始构建操作系统:RISC-V汇编基础指南

在操作系统开发领域,理解底层硬件架构是至关重要的。本文将深入探讨RISC-V架构的基础知识,这是构建轻量级操作系统的关键第一步。我们将从CPU的基本工作原理开始,逐步深入到汇编语言编程,为后续操作系统开发奠定坚实基础。 ## RISC-V架构概述 RISC-V是一种精简指令集(RISC)架构,近年来已成为x86和ARM之外的重要选择。它之所以适合操作系统开发,主要因为: 1. **设计简洁*...

gitblog_00129的博客 645

MCP详解:手把手教你理解和如何使用各种开源MCP服务

MCP 作为一种开放协议,为 AI 模型与外部世界的连接提供了标准化的解决方案。它不仅降低了开发门槛,还极大地扩展了 AI 应用的边界。无论是开发者还是普通用户,都可以通过 MCP 更高效地利用 AI 技术,实现更多智能化的功能。

王哥儿聊AI的博客 6056

从零开始入门pwn(一):pwn的介绍以及部分前置知识

目录 一.前言 二.pwn的介绍 pwn的定义 pwn的题目模式 前置知识 一.Linux 二.C语言 三.汇编语言 四.计算机组成原理 三.总结 一.前言 本人凭着一腔热血想要入门pwn,但却被pwn的高入门门槛泼了一次又一次冷水,趁着自己还记得,写一点心得为后来想入门的跟我一样的零基础新手提供一些帮助。 二.pwn的介绍 pwn的定义 想必很多想要入门的新手都已经通过各种各样的入门文章或视频了解了pwn的定义以及方向,但出于礼貌,我在这里还是再重复一下下。...

m0_51466347的博客 4万+

C# 与欧姆龙 PLC 实战:通过 Ethernet/IP 协议进行设备控制与监控

本文介绍了如何通过C#和Ethernet/IP协议实现与欧姆龙PLC的通信。Ethernet/IP是基于以太网的工业协议,适用于工业设备间的实时数据交换。文章详细讲解了使用EthernetIPSharp库建立连接、读写数据的步骤,并提供了示例代码。此外,还探讨了实时监控、报警系统等高级功能,为工业自动化控制系统开发提供了实用指导。该方法简化了PLC通信开发,提高了系统可靠性和智能化程度。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 813

使用PostgreSQL构建高可用数据库集群

在现代企业级应用中,数据库的高可用性已成为业务连续性的核心要求。PostgreSQL作为一款功能强大的开源关系型数据库,其高可用架构的设计直接影响着系统的稳定性和可靠性。

九天的专栏 1259

千行操作系统项目:RISC-V汇编语言入门指南

在操作系统开发领域,汇编语言是不可或缺的基础技能。RISC-V(Reduced Instruction Set Computer - Five)作为一种新兴的开源指令集架构,正以其简洁、模块化和开放的特性吸引着越来越多的开发者。 > ???? **痛点场景**:你是否曾因x86汇编的复杂性而望而却步?是否在为嵌入式系统开发而苦恼于专有架构的限制?RISC-V汇编以其优雅的设计和开放的生态,为你提供了...

gitblog_00018的博客 535

在 SAP S/4HANA Public Cloud 中,用 RAP 一键生成 PDF 并在 Fiori 前端触发下载的完整方案

create;update;delete;// 生成并返回当前文档上下文。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 413

如何用 audit_webhook 和 auditlog-echo 在控制台实时查看 MinIO 审计日志?

想要实时查看打到 MinIO 服务器上的每一次 API 请求——操作的桶和对象、返回状态、发起请求的 accessKey、耗时等——MinIO 官方仓库提供了可直接组合的两份材料:MinIO 侧的 `audit_webhook` 审计目标(把审计日志以 JSON 推送到任意 HTTP 端点),以及仓库自带的 [auditlog-echo.go](https://link.gitcode.com/i

gitblog_01016的博客 1077

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

操作系统攻略:自己动手从零开始写操作系统——2.编写MBR主引导记录

计算机启动与内存管理摘要 计算机启动时通过BIOS在实模式下完成硬件检测和初始化,其核心特性包括16位地址总线(1MB寻址空间)、分段寻址机制和单一特权级。现代操作系统启动后切换至保护模式,该模式支持更大的内存空间(32位/64位)、4级特权级(Ring 0-3)、内存保护和多任务机制。两种模式的主要区别在于:实模式仅有1MB寻址能力且无安全保护,而保护模式通过分段和分页机制实现内存管理,支持虚拟内存和任务隔离。系统启动必须经过实模式阶段,随后进入保护模式以支持现代操作系统的安全性和功能需求。

梅见十柒的博客 2482

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

30天自制操作系统:第一天 从计算机结构到汇编程序入门

序 终于开启了学习自制操作系统的道路,虽然对于笔者来说是一个无比巨大的挑战,但是为了能够打开操作系统这个黑盒子,做一个操作系统应该是最好的方式,讲道理做一个OS应该是很多程序员、工程师的梦想吧,毕竟OS是我们天天都在用的东西,自己能够完全从0开始做一个应该会有不一般地体验。 本系列文章用于记录笔者在阅读书籍并着手开发过程中遇到的各种问题。 1. 先动手操作 刚开始就面临了不小地挑战,虽然是简简单单地按照书本上的图片输入相应的内容,不过还真是 Easier said than done,说起来简单做起来难,

nepu_bin的博客 919

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

嵌入式汇编语言从小白到入门:从零开始的底层编程之旅

汇编语言是一种低级的、面向特定处理器架构的编程语言,它与机器指令一一对应,通过助记符(如MOV、ADD等)来表示二进制机器指令。直接硬件操作:可以直接访问和操作寄存器、内存等硬件资源高效性:编译后代码精简,执行效率高特定性:不同处理器架构有不同的汇编语言底层控制:能够精确控制每一个硬件操作系统启动代码(Bootloader)对性能要求极高的关键代码段直接硬件操作(如寄存器配置)中断服务程序需要精确时序控制的操作嵌入式汇编语言学习是一条充满挑战但也极具回报的道路。

niuTyler的博客 1746

《操作系统真象还原》从零开始自制操作系统 全流程记录

文章目录博客链接 博客链接 《操作系统真象还原》第一章 ---- 安装Vmware Station 安装Ubuntu 装载配置Bochs 安装Vmware tools 开始乘帆历险! 《操作系统真象还原》第二章 ---- 编写MBR主引导记录 初尝编写的快乐 雏形已显! 《操作系统真象还原》第三章 ---- 完善MBR 尝汇编先苦涩后甘甜而再战MBR! 《操作系统真象还原》第四章 ---- 剑指Loader 刃刺GDT 开启新纪元保护模式 解放32位 《操作系统真象还原》第五章 ---- 轻取物理内存容

Love 6's Private Blog 2万+

bootOS入门指南:从零开始体验微型操作系统

bootOS是一个仅需512字节x86机器码的微型操作系统,它以惊人的精简设计实现了完整的操作系统功能,非常适合对计算机底层原理感兴趣的初学者探索。本文将带你一步步了解这个神奇的微型操作系统,从安装到运行,轻松开启你的操作系统探索之旅。 ## 📋 什么是bootOS? bootOS是一个单片式操作系统,仅占用一个引导扇区(512字节)的空间。它能够加载、执行和保存程序,还拥有自己的文件系统,

gitblog_00270的博客 972

从零开始学习嵌入式开发:入门指南

本文介绍了从零开始学习嵌入式开发的入门指南。首先解释了嵌入式系统的概念和应用领域,接着详细介绍了嵌入式开发所需的基础知识,包括C语言、汇编语言、硬件原理等。然后,作者提供了一系列学习资源和工具,包括开发板、仿真器、调试工具等,以帮助读者进行实践操作和调试。接下来,文章探讨了嵌入式系统设计和开发的流程,包括需求分析、系统设计、硬件选型、软件开发等。最后,作者鼓励读者通过实践项目来巩固所学知识,并给出了学习嵌入式开发的结语。本文提供了一条明确的学习路径,对于想要快速入门嵌入式开发的读者来说是一份很好的指南。

weixin_44378594的博客 1514

【RISC-V操作系统】从零开始写一个操作系统(五)RISCV汇编语言编程

​ 不同的汇编器可能规则不同。我们使用GNU工具链。 一个汇编程序(.s/.S)由多条语句组成(statement)。 一条语句由三部分组成: [label:] [operation] [comment] 4.指令类型 用于寄存器-寄存器操作的 R 类型指令, 用于短立即数和访存 load 操作的 I 型指令, 用于访存 store 操作的 S 型指令, 用于条件跳转操作的 B 类型指令, 用于长立即数的 U 型指令, 用于无条件跳转的 J 型指令 标签,操作,注释。 ​

wuyi的个人博客 2863

Re: 从零开始开发64位操作系统内核 - 第〇章

本教程将使用C++和Rust语言完成一个基本的操作系统内核

指向BIOS的野指针 1544

30天自制操作系统 01-03 从汇编到C语言

01-03-Day-Note 第一天到第三天的笔记 1. 运行环境准备 可以直接在作者提供的开发包中执行作者提供的文件,执行过程如下: 将对应project中包含源代码的目录复制到tolset中 执行对应的Makefile指令 需要在Windows的Shell环境下执行,在Git Bash执行会存在命令的不一致问题 作者在nasm的基础上开发了名为nask的汇编编译器,然后通过imgtol...

隔壁家的二大爷 1690

手写一个X86操作系统实战:从零开始构建一个U盘启动的自制操作系统(一)

这个标题可能有点大了:-) 一个操作系统至少应该有自己的文件系统和进程机制,不过我们的最终目标应该是这个~ 无论如何,看完本文,你应该可以手写一段通过U盘启动的在PC上运行的不需要其他软件来协助的自启动的代码,这无疑是一个完整的操作系统的基础。 这篇文章本来是基于《[操作系统]从零开始的OS》这里的资料: http://www.cnblogs.com/hu...

aixing5855的博客 828

汇编入门学习

汇编入门

Lightllll的博客 1052

2020元旦献礼——从零开始开发一个操作系统

序言 在2019年的最后一天终于完成了整个系统的开发,并给它起名曰——Inios 。就如同文章名字一样,完全是从内核编写,非二次开发,从最初的“hello os”到初次有了系统的样子。主要用C语言编写,部分汇编语言。。整个操作系统完成后的大小为39.6 KB之所以这么小其实主要是语言的原因,另一个重要原因是在开发中对部分系统代码和字体库以及媒体的压缩。中间进行多次迭代,最终完成整个操作系统的开发...

songfei_dream的专栏 5076
上一篇: 从零开始创造自己的操作系统(1):引导扇区
下一篇: 从零开始创造自己的操作系统(3)广阔天地
PythonKingdomcit
博客等级 码龄2年 21粉丝 11原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值