1.22汇编语言编译器新贵,NASM

"新"是相对于旧来说的,老的汇编器MASM和TASM已经过时了,从名称上可以看出字母n是在m之后,其功能必然有所超越才会被大家接受。

请用一句话概括NASM优势在哪里?免费+语法简洁使人舒适+支持linux平台。这里所说的任何一个理由都是其它同类产品不具备的,敏锐的同学是不是察觉到了什么。。。哈哈,怎么给人的感觉是:其它编译器不是花钱就是语法怪异让人不爽,要么就不支持linux,看上去选择nasm是没得可选了?我就不自问自答了,反正NASM语法很接近咱们当初学的intel语法,我是用得很爽呢。这里就不再比较其优越性了,大家若感兴趣还是自行查阅吧。

同样是为了抒发一下对这位新贵的爱慕之情,简要的介绍还是要的:

NASM是一个为可移植性与模块化而设计的一个80x86的汇编器。它支持相当多的目标文件格式,包括Linux和'NetBSD/FreeBSD','a.out','ELF','COFF',微软16位的'OBJ'和'Win32'。它还可以输出纯二进制文件。它的语法设计得相当的简洁易懂,和Intel语法相似但更简单。它支持'Pentium','P6','MMX','3DNow!','SSE' and 'SSE2'指令集,

介绍完了之后,咱们讨论下为什么要用汇编语言开发系统呢?就目前来看,无论再怎么要求开发过程简单,也避免不了用汇编语言,尤其是开发操作系统这类底层软件。越底层的软件就越要与硬件直接打交道,这就要求在语言层面上给开发人员提供访问端口寄存器的方法。显然,目前的高级语言都做不到这一点,像C语言这类偏底层的语言都不支持修改寄存器,用汇编语言则是不可避免的事了。

包括我在内的很多同学一听要用汇编了,都有一种小小的恐惧感,认为这是一种不好掌握的东西(我没有称之为语言而是称之为东西,是因为曾经有个女同学都不知道汇编是什么),而且程序编写起来特别麻烦,要考虑的东西太多了,代码逻辑写起来不够直接,似乎总是在迂回…以至于我们经常被汇编语言“搞定”。我个人的感觉是,当我熟悉了汇编语言后,甚至觉得有一点亲切呢,当然了,任何陌生的事物经过熟悉的过程后都会变得有亲切感,关键是咱们得扛到对它熟悉为止,不能让心里的畏惧战胜自己。用汇编语言和cpu直接对话,想想就有点小兴奋呢。

不过好在我们需要用汇编的地方只是一些硬件访问、中断调用、端口读写、线程切换之类(怎么看上去好多…),我们可以写出一些通用的代码来减少汇编的枯燥。总之,只有不得不用时我们才会向汇编语言屈服(其实也没那么悲壮啦^_^)。

1.3操作系统的宿主环境。

操作系统虽然是软件,但其可不是一般的软件。我们平时写出来的程序都是基于操作系统之上,程序本身是由操作支持的,开发人员只要专注于自己这块业务逻辑就好了,很多复杂的问题是不需要开发人员考虑的。而操作系统这个软件靠谁来支持呢?是靠你自己…这是用一身老骨头扛出来的,现在明白为什么linux之父linus那么强壮了吧,不是谁都能随随便便成功的,所以,写操作系统那可是要有个好身板,要多锻炼身体才能熬得住,看完这章赶紧出去跑步吧^_^,玩笑玩笑。如果一般应用软件能称得上鱼香肉丝的话,那操作系统得相当于龙虾鲍鱼,这可是硬菜,不出去跑个几公里都啃不下来呢。哈哈,其实也没那么夸张,现在有很多计算机大牛写了好多开源软件帮助我们调试操作系统。话说,自从有了虚拟机,我再也用不着锻炼身体了,每次出现bug时不需要重启真机了,只需要重启虚拟机就好。

1.31什么是虚拟机

虚拟机在当今已经不是陌生的概念了,要是在几年前,我还得搬出个概念放在这给大家看看。个人觉得,要解释一个东西是什么,不如直接解释这个东西解决了哪些问题,这样大家自然就从本质上真正理解了它是什么。

没有虚拟机的时候,一台机器只有交给一个用户使用,而且一个人根本无法将这台机器的性能完全发挥出来,造成了极大的浪费不算,还有很多人正等着用呢。于是出现了虚拟机的需求:将一台物理机通过软件逻辑分割成几个虚拟的计算机,每个计算机之间互不干涉,即使一台虚拟计算机崩溃了也只是影响了它自身,不会让整个物理机瘫痪,安全可靠,可以自由测试而不必担心损伤物理机。这不仅在硬件投入上节省了大笔开销,还让更多的人同时使用了计算机资源。

现在很多厂商都在搞虚拟化,如域名的虚拟空间,还有如火如荼的阿里云、这是虚拟机的应用。虚拟机就是用软件来模拟硬件。虚拟机只是一个普通的进程,该进程模拟了硬件资源,在虚拟机中运行的程序其所做出的任何行为都先被虚拟机检查,由虚拟机分析后,代为向操作系统申请。

上面对虚拟机的解释是主观上的理解,我可不愿意说概念了,因为概念是对事物的抽象。抽象就意味着不易理解,容易把简单的事复杂化。我举个简单的例子来说明什么是虚拟机。

假设V是虚拟机进程,U是普通的用户程序。程序运行起来才叫进程,进程是要有pcb的,程序老实的放在磁盘上不动,那可不叫进程。虚拟机跑起来后,就形成了进程V,在它被调度期间,cpu执行的是此进程中的指令。让虚拟机执行U程序,有如解释器进程在解析脚本文件一样,此时的U程序是被当作参数传给了V程序,U程序就像文章一样由V进程阅读。还是拿解释型语言举例子,比如python语言,其脚本从来就没有直接作用于cpu上,而是其字节码交给了python解释器,这个解释器将通过python虚拟机来代为完成python脚本中的代码行为。

让我们说得再具体一点,比如在linux平台上,写了一个python脚本文件file.py,其中有这样一句代码:fh=open(“hello.txt”,'w'),这是在用可写的方式打开hello.txt文件,将其句柄返回给fh。自此操作文件句柄fh,便是操作了文件hello.txt。python虚拟机是一个进程,它是直接作用在硬件之上的。当它分析python脚本file.py中上面的那句代码时,发现有关键字open(当然关键字得是python解释器支持的,此解释器为它们而生才行),于是执行了open(“hello.txt”,'w')函数,其内部是封装的系统调用(系统调用这方面内容以后咱们在自己的系统中细说。),通过系统调用,python虚拟机替python脚本完成了打开hello.txt的工作。

选择虚拟机的一个原因;

  1. 1.运行方便。

它在宿主系统上只是一个进程,在宿主系统如linux眼里,它与一般的用户进程是没任何区别的。进程咱们都可以随意启动,虚拟机也是一样的,在这一点保证了使用上的方便性。

  1. 2.保护计算机

如果您有一般的软件开发经验,就会了解,很少有程序能一下就编译通过。当然,如果您的编程经验无比丰富,代码无比规范,无比了解编译器,确实不需要虚拟机来调试了,编写完成后直接就能运行。以上我用了三个“无比”,打造了似乎没有人能达到这种水平的假象,其实是有的。不知道大家听说过Jon Skeet大神没有,他是谷歌软件工程师,《c# In Depth》就是他的神来之笔。看看别人对他是怎样评价的,看完之后您就知道我说的并不夸张了:

“他并不需要调试器,只要他盯着代码看几眼,bug自己就跑出来了”。

“他根本不需要什么编程规范,他的代码就是规范”

还有还有,这个最威武霸气…

“如果他的代码没有通过编译,编译器厂商就会道歉”

为了表示对大神的崇拜,我刻意把上面空出一行。每次看到第三个评论,我的血液中就会流淌一些让我振奋的东西,我深知自己还差得很远,以至于每次贪睡的时候,心灵深处总会传来一句充满爱的关怀:还特么不起来看书。

如果咱们都不能保证写出这样质量出色的代码,咱们还是老老实实的装虚拟机吧(土豪随意)。因为如果要把操作系统装在真机器上,每次调试的时候,无论代码是否崩溃,都是要重启计算机的。为了保护咱们的爱机,虚拟机必装不可。不知道你们心疼电脑吗,反正我要是一天开电脑三次以上,我就会很自责,不知道这种性格和水瓶座有没有关系。

说了虚拟机的好处,那咱们有哪些虚拟机可用呢。一般的有qemu、bochs、virtualBox、xen和vmware等。

我们要用的就是bochs.选择bochs的理由如下:

  1. 开源,有感于作者的奉献精神,我们要支持作者(当然qemu也是)。
  2. 支持调试,不仅原生支持调试,还支持gdb远程调试(当然qemu也是)。
  3. 我只会这个。

对于虚拟机的选择,能工作能调试够用就行了,遇到问题时再寻求新方案也不迟,毕竟咱们的重点是后面的写操作系统,学太多的虚拟机也没啥用。

介绍一下bochs吧,怎么也得让大家有个初步的印象。下面的内容是我从维基百科翻译过来的,其实就是从繁体中文翻译成了简体中文^_^,而且只有几个繁体字,哈哈。

Bochs(发音:box)是一个以LGPL许可证发放的开放源代码的x86、x86-64IBM PC兼容机模拟器和调试工具。它支持处理器(包括保护模式),内存,硬盘,显示器,以太网,BIOS,IBM PC兼容机的常见硬件外设的仿真。

许多客户操作系统能通过该仿真器运行,包括DOS,Microsoft Windows的一些版本,AmigaOS 4,BSD,Linux,MorphOS,Xenix和Rhapsody (Mac OS X的前身)。Bochs能在许多主机操作系统运行,例如Windows、Windows Mobile、 Linux、Mac OS X、iOS和PlayStation 2。

Bochs主要用于操作系统开发(当一个模拟操作系统崩溃,它不崩溃主机操作系统,所以可以调试仿真操作系统)和在主机操作系统运行其他来宾操作系统。它也可以用来运行不兼容的旧的软件(如电脑游戏)。

它的优点在于能够模拟跟主机不同的机种,例如在Sparc系统里模拟x86,但缺点是它的速度却慢得多。

介绍完了,不知道您看了吗,不看也行,反正以后咱们实际应用时还会细说的。

一步步编写操作系统 2 部署工作环境 2相关推荐

  1. 一步步编写操作系统3 部署工作环境 3

    盗梦空间般的开发环境,虚拟机中再装个虚拟机. 很多同学电脑的系统都是windows,个别的是mac os,还有的同学用的是linux.做为一名Linux粉丝,我的开发环境必然建立在Linux平台下.那 ...

  2. 一步步编写操作系统 1 部署工作环境 1

    1.1工欲善其事,必先利其器. 如果您觉得操作系统已属于很底层的东西,我双手赞成.但是如果您像我之前一样,觉得底层的东西无法用上层高级的东西来构建,现在可以睁大眼睛好好看看下面要介绍的东西了. 首先, ...

  3. 一步步编写操作系统 71 直接操作显卡,编写自己的打印函数71-74

    一直以来,我们在往屏幕上输出文本时,要么利用bios中断,要么利用系统调用,这些都是依赖别人的方法.咱们还用过一个稍微有点独立的方法,就是直接写显存,但这貌似又没什么含量.如今我们要写一个打印函数了, ...

  4. 一步步编写操作系统 69 汇编语言和c语言共同协作 70

    由于有了上一节的铺垫,本节的内容相对较少,这里给大家准备了两个小文件来实例演示汇编语言和c语言相互调用. 会两种不同语言的人,只是掌握了同一件事物的两种表达方式.人在学习一种新语言时,潜意识里是建立了 ...

  5. 一步步编写操作系统 62 函数调用约定

    由于我们要将c语言和汇编语言结合编程啦,所以一定会存在汇编代码和c代码相互调用的问题,有些事情还是要提前交待给大家的,本节就是要给大家说下函数调用规约中的那些事儿. 函数调用约定是什么? 调用约定,c ...

  6. 一步步编写操作系统 10 cpu的实模式

    cpu的实模式 由于mbr在实模式下工作--什么?什么是实模式?这时候有同学打断了我.我心想,这下好办了--哈哈,没有啦,开个玩笑而已.我们这里所说的实模式其实就是8086 cpu的工作环境.工作方式 ...

  7. 操作系统真象还原第1章:部署工作环境

    前言 关于自制操作系统,一开始本来是想利用极客时间的操作系统实战45讲来的(为了能够更快完成),然而当自己真正去学的时候才发现这些视频还是比较坑的,最起码对于我来说,首先是代码注释很少,函数,变量命名 ...

  8. 一步步编写操作系统 58 门、调用门与RPL序 3

    接前文: 并不是任何当前特权级都可以使用门结构, 在使用门结构之前,处理器要例行公事做特权级检查,参与检查的不只是CPL和DPL,还有RPL,为了说清楚这个检查过程,咱们得先介绍下RPL. RPL,即 ...

  9. 一步步编写操作系统 53 任务状态段TSS介绍

    操作系统是利用PCB来维护所有任务的,包括进程和线程,但cpu提供的是TSS,linux系统可没用它,因为效率太低.但是还是要了解下TSS才清楚操作系统中某些操作的原因. 本节中所讲的特权级与它有着密 ...

最新文章

  1. ptrace原理与性能对比
  2. 用于分子生成的数据高效性图语法学习
  3. VIT自适应语音转文本可预测长度和内容(ocr也可)
  4. N101BCG-L21-10.1-LVDS
  5. sass、gulp应用
  6. python捕获所有异常状态_如何在scrapy中捕获并处理各种异常
  7. [OS] 死锁相关知识点以及银行家算法详解
  8. 机械结构设计经验之谈
  9. 斯托克斯定理,de Rham上同调习题
  10. 科技论文写作课程笔记
  11. 九章算术 五:《商功》
  12. 九步确定你的人生目标和制定达到目标的计划
  13. 深圳市专精特新中小企业认定补贴政策及申报条件重点,补贴20-100万
  14. Linux中xxd的简单应用
  15. 计算机考研真题解析---计算机网络
  16. python计算器gui设计_Python 计算器界面设计
  17. 1.uap项目迁移到idea开发的详细教程(第壹篇)
  18. 4.1 用格雷戈里公式求π的近似值
  19. 手机桌面左右滑屏不成功问题log分析
  20. 口袋linux设备,口袋中的Linux

热门文章

  1. Ubuntu 16.04 设置MySQL远程访问权限
  2. 使用git了解代码编写过程
  3. [转]如何在.NET MVC中使用jQuery并返回JSON数据
  4. [Leedcode][JAVA][第892题][图形题]
  5. win10计算机启动一分钟重启,Win10开机提示电脑将在一分钟后自动重启怎么办?...
  6. linux日志服务器配置在哪个文件,Linux中日志的基本配置(syslog)
  7. python绘制不带颜色曲线图_Python画曲线图
  8. docker 镜像修改的配置文件自动还原_PVE部署LXC运行docker
  9. Vim功能键整理(图片来自mooc)
  10. mysql 角色管理_MySQL 8 用户和角色管理入门