汇编历史和版本概述

汇编有非常多的格式,包括gas,nasm,masm等。
刚开始学的时候非常的困惑,怎么会有这么多的格式?这篇文章就是试图通过汇编的历史来回答这个问题。
我想从后起之秀nasm开始讲起。
先看一下nasm的自我介绍(自夸):

  • a86不错,但不是免费的,而且你不可能得到32位代码编写的功能——除非你付费。它只使用在DOS上。
  • gas是免费的,而且在DOS下和UNIX下都可以使用,但是它是作为gcc的一个后台而设计的,并不是很好,gcc一直就提供给它绝对正确的代码,所以它的错误检测功能相当弱,还有就是对于任何一个想真正利用它写点东西的人来讲,它的语法简直太可怕了,并且你无法在里面写正确的16位代码。
  • as86是专门为Minix和Linux设计的,但看上去并没有很多文档可以参考。
  • MASM不是很好,并且相当贵,还且只能运行在DOS下。
  • TASM好一些,但却极入与MASM保持兼容,这就意味着无数的伪操作码和繁琐的约定,并且它的语法本质上就是MASM的,伴随着的就是一些自相矛盾和奇怪的东西。它也是相当贵的,并且只能运行在DOS下。

所以,只有NASM才能使您愉悦地编程。
是不是很像现在的商业广告?先把友商先踩一遍。不过,他所说的问题在这些格式上确实是存在的。例如gas的语法确实非常的可怕,在gas中,你必须写movl $1,%eax这样的格式,实际上写成movl 1,eax这种形式在别的格式中都是支持的,gas非要你多打$和%。但是gas却是非常重要的一种语法,因为有些介绍操作系统的书(例如csapp)在用到汇编的时候会使用这种语法,使用你还是要学习他的。

还有不得不提的就是masm。就是微软的专有的格式,也就是说,有些汇编格式是系统专用的。这就非常让人困惑,汇编不是只是跟CPU指令有关的吗?怎么还和操作系统有关了?实际上,gas,nasm,masm本质上就是不同的语言。因为他们的语法都不同,但是他们常常给人一种他们是同一种语言的错觉,产生这种错觉的原因是因为他们都是针对x86CPU来设计的。而寄存器,mov,add这些操作是CPU指令的基本概念,所以所有的汇编语言都会包含这些内容。这就是产生这种错觉的根本原因。

下面来看一下汇编的历史就更明白了。

  • 1946第一台通用计算机。
  • 早期汇编(还没有语言这一说)
  • Fortran语言1954。
  • C语言1972。
  • Intel 8086 1976。
  • masm:最早版本可以追溯到 1981 年。
  • gas:源于gnu计划。第一个版本于 1986-1987 年发布。由 Dean Elsner 编写。
  • a86:由埃里克·艾萨克森 (Eric Isaacson)编写,于 1986 年 6 月首次作为共享软件提供。
  • nasm:第一个版本 0.90 于 1996 年 10 月发布。
    看到时间的时候我都震惊了。这些汇编语言居然比C语言都要晚!实际上这些汇编语言都是现代语言。而且有些编译器是用C写的。这让我有点哭笑不得。难道我一直学的都是假的汇编语言?事实上这些汇编和原始的汇编实际上是两回事。这里特别要注意的一个时间点是Inter8086 1976年。事实上,这些汇编语言都是x86汇编语言。很容易和高级语言之前的汇编语言搞混了。最早期的汇编语言实际上就是写在纸上的标记符号而已。有了这些符号,就可以方便的设计处理打孔纸上的数据了。现在的这些汇编语言某种意义上是一种文艺复兴。或者说是对原始汇编语言的重制版。
    完结。
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值