0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

计算机启动的细节与汇编Demo的拆解1

jf_78858299 来源:硬件底裤酸奶盖子 作者:酸奶盖子 2023-02-01 15:53 次阅读

本文汇编程序是X86环境下的,移植其他平台可能产生错误。

一、汇编Demo解析

在前面的文章中建立了一个简单的汇编Demo,令虚拟机输出一个“Helloworld!”字符串。

org 0x7c00     ;程序起始位07c00h

此处的org是Origin的缩写,意为起源位置、起始位置。

在此前不管是桌面还是移动端,甚至是嵌入式系统的开发,工程师都是使用如C,C++Java等类似的高级语言;而撰写好程序源文件后剩下的事情便交由编译器去做。

类似于程序运行需要多少内存空间,分配多少时钟周期,程序加载位置与栈内存等琐碎的问题,我们却不太关心。这些操作都由编译器根据工程要求进行分配。

如果使用Windows环境,我们通过属性可以获取我们电脑简单参数。如:处理器,系统版本之类的。

在其中我们必然会看到这样一行:机带RAM。其实这就是通常所说的运行内存,简称:内存。(我的机器内存8G)

我们的程序编译好后是存放在硬盘中的。如果没有启用,它与其他千千万万个文件表现形式一样,也没办法区分。

如果我们唤起该程序便会产生差异。

首先CPU向硬盘发送查询命令,在硬盘中找寻该程序机器码,在获知该文件存在后硬盘向CPU报告找寻文件就绪;其次CPU向硬盘发送将该程序机器码拷贝到运行内存(硬盘太慢);内存就绪后CPU使用IP寄存器指向该地址并步进执行。

Org作用出现在第二步,硬盘将程序复制到内存哪个位置呢?org如是说:到0x7c00处!于是便复制到此。

简单来说org命令就是标志程序加载位置的,此前我们进行的程序设计没有做过这类工作完全归功于编译器的功劳。

为什么是0x7c00处呢?深究起来也并无其他高深道理,不过是为保持兼容性,硬件厂商共同约定的事情而已。但是如系统开发不遵循这样的约定却又无法正常启动。毕竟如果所有厂商都遵循的约定就会成为行业规范。

(我下一步计划设计一个RISV指令集的CPU,到时我将不遵循这个约定。那真是海阔凭鱼跃,天高任鸟飞)

在我们学习汇编写操作系统的过程中还会有其他耐人寻味的约定,当有所涉及再进行介绍。

mov ax,cs
mov ds,ax
mov es,ax

从前面的介绍可知:

AX是通用寄存器,在此例中用来做数据拷贝。

CS是代码段寄存器,用来存储该段代码的入口地址。

ES的附加段寄存器,存放当前执行程序中一个辅助数据段的段地址。

DS是数据段寄存器,在此用于标示数据段其实地址。

X86架构计算机在实模式下寻址方式是:段+偏移。而这涉及到绝对地址和逻辑地址概念,这是以后的内容,再此我们先简单记住这三行是确保三个寄存器指向同一地址,以便后续进行数据操作能定位到正确位置。

这种操作可以总结为“寄存器对齐”。

call DispStr

Call是汇编语言中进行函数调用的助记符,该行意义是跳转到名为DispStr的位置并继续执行。

call DispStr
mov ax,BootMessage
mov  bp,ax                ;串地址
mov  cx,11                ;串长度
mov  ax,01301h        ;AH = 13,AL = 01h
mov  bx,000ah         ;黑底绿字
mov dl,0
int  10h                ;10h号中断
ret

上述便是DispStr主体,在程序末位我们使用BootMessage替代"Helloworld!"字符串,此时BootMessage为存储Helloworld!内存的首地址。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 计算机
    +关注

    关注

    19

    文章

    7428

    浏览量

    87727
  • 汇编
    +关注

    关注

    2

    文章

    214

    浏览量

    25904
  • 虚拟机
    +关注

    关注

    1

    文章

    908

    浏览量

    28107
收藏 人收藏

    评论

    相关推荐

    计算机安全使用常识

    计算机安全使用常识 (1)使用符合额定电压的电源。电压高于额定电压会烧毁硬件,低于额定电压计算机不能正常启动或系统运行不正常,甚至也会烧毁硬件。(2)正确开关
    发表于 03-10 12:10

    欧盟为计算机计算机服务器出台新生态设计要求

    、2014年7月1日和 2016年7月1日。涉及的产品包括可以直接从交流电网取电(包括外部或内部电源供应): ?● 台式计算机● 一体式计算机 ● 笔记本
    发表于 03-31 18:14

    什么是微型计算机?微型计算机有什么用处?

    汇编语言是什么?什么是微型计算机?微型计算机有什么用处?
    发表于 07-16 09:59

    什么是计算机系统、计算机硬件和计算机软件?

    第一章 计算机系统概论1. 什么是计算机系统、计算机硬件和计算机软件?硬件和软件哪个更重要?解:P3计算
    发表于 07-22 09:06

    计算机开机启动过程详解 精选资料分享

    计算机的开机启动过程(1) 启动过程总揽(二)详细说明1、CPU 供电按下主机的电源键后,计算机
    发表于 07-23 09:18

    计算机组成期末复习 精选资料分享

    计算机组成原理期末考试复习题,很给力的!!!一、选择题(c)1、在下列四句话中,最能准确反映计算机主要功能的是下面哪项。A.计算机可以存储大量信息B.
    发表于 07-26 07:14

    微型计算机原理及应用

    前言微机原理主要内容包括微型计算机体系结构、8088微处理器和指令系统、汇编语言设计以及微型计算机各个组成部分介绍等内容。微机原理接口技术是一门实践性强的学科,不但要求较高的理论水平,而且还要求有实际的动手能力。这次项目设计的主
    发表于 09-10 07:38

    计算机应用

    1、第一台计算机:1946年2月14日,在美国宾西尼亚大学的莫尔电机学院,世界第一台现代电子计算机“埃尼阿克”ENIAC诞生,重达30t,在1s内能进行5000次加法运算和500次乘法
    发表于 09-10 08:17

    计算机组成原理与汇编语言程序设计

    计算机组成原理与汇编语言程序设计是为中央电大计算机组成原理与汇编语言程序设计课程编写的教材。在开始学习本书之前,请大家务必先认真阅读这篇前言,它将告诉你本课
    发表于 10-21 17:56 0次下载
    <b class='flag-5'>计算机</b>组成原理与<b class='flag-5'>汇编</b>语言程序设计

    计算机组成原理与汇编语言习题一

    计算机组成原理与汇编语言习题一   硬盘低格格式化是对硬盘最彻底的初始化方式,经过低格后的硬盘,原来保护的数据将全部丢失
    发表于 04-15 16:16 532次阅读

    计算机学习教程之指令系统与汇编语言程序设计课件免费下载

    本文档的主要内容详细介绍的是计算机学习教程之指令系统与汇编语言程序设计课件免费下载包括了:1.汇编语言程序设计,2.程序设计举例,
    发表于 01-03 08:00 0次下载

    构建 4 位计算机汇编语言和汇编器(第 2 部分)

    一旦我们构建了一台计算机,下一步就是开发一种汇编语言,然后是一个可以汇编我们程序的汇编器。   在我 之前的专栏 中,我们介绍了在计算机内存
    发表于 08-01 17:52 844次阅读
    构建 4 位<b class='flag-5'>计算机</b>:<b class='flag-5'>汇编</b>语言和<b class='flag-5'>汇编</b>器(第 2 部分)

    构建 4 位计算机汇编语言和汇编器(第 1 部分)

    我们已经到了需要为 4 位 HRRG 计算机定义汇编语言的地步,但首先我们需要考虑某些概念。 如今,我们习惯于使用 C/C++、Java、Python 等高级语言对我们的计算机和微控制器进行编程,但
    发表于 08-01 17:39 922次阅读
    构建 4 位<b class='flag-5'>计算机</b>:<b class='flag-5'>汇编</b>语言和<b class='flag-5'>汇编</b>器(第 <b class='flag-5'>1</b> 部分)

    计算机启动细节汇编Demo拆解2

    本文汇编程序是X86环境下的,移植其他平台可能产生错误。 一、汇编Demo解析 在前面的文章中建立了一个简单的汇编Demo,令虚拟机
    的头像 发表于 02-01 15:53 576次阅读
    <b class='flag-5'>计算机</b><b class='flag-5'>启动</b>的<b class='flag-5'>细节</b>与<b class='flag-5'>汇编</b><b class='flag-5'>Demo</b>的<b class='flag-5'>拆解</b>2

    计算机启动细节汇编Demo拆解3

    本文汇编程序是X86环境下的,移植其他平台可能产生错误。 一、汇编Demo解析 在前面的文章中建立了一个简单的汇编Demo,令虚拟机
    的头像 发表于 02-01 15:53 668次阅读