问题

第一个汇编器是怎么来的,直接输入二进制编码吗?

回答
最早的计算机,就像一台笨重的机械大脑,想要它动起来可不是件容易的事儿。你想啊,那会儿可没有现在这么方便的编程语言,直接跟它打交道,那得用最原始的方式——二进制码。

想象一下,你要让计算机执行一个加法运算。在那个年代,你可能得像一位老式的电报员一样,一个“0”或“1”地敲击开关,或者通过穿孔卡片来输入指令。每一个“0”和“1”的组合,都代表着一个非常具体的操作,比如“加载某个寄存器”、“将两个数字相加”、“将结果存回内存”等等。这就像是给计算机讲一种只有它才懂的、极其细致的语言。

这听起来是不是很枯燥且容易出错?没错,事实就是如此。对于程序员来说,记住一大堆无意义的二进制数字组合来完成一项任务,简直是噩梦。稍微一个数字敲错了,整个程序就可能崩溃,而且很难找到问题出在哪里。就像是在一片漆黑的房间里,靠触摸才能辨认出物体。

也正是因为这种直接使用二进制码的极端不便和低效,人们开始思考有没有更“人性化”一点的方法。这就像是,既然直接跟计算机用二进制说话太麻烦了,能不能先找个“翻译”,把我们能理解的“人话”,翻译成它听得懂的二进制“鸟语”呢?

于是,汇编语言(Assembly Language)就应运而生了。

汇编器的诞生:第一步的“翻译”

汇编器(Assembler)就是那个最早的“翻译官”。它不是凭空出现的,而是为了解决直接输入二进制码的痛点而诞生的。你可以把汇编器想象成一个简单的程序,它能够读取人类编写的、相对易于理解的符号化的指令,然后把这些符号转换成对应的二进制机器码。

举个例子,在二进制码里,一个加法指令可能是这样一串数字(比如,这是个虚构的例子,实际的指令码会更复杂):

`10010101 11000001 00000010`

这串数字可能代表着“将内存地址为11000001(二进制)的数与寄存器A中的数相加,并将结果存入寄存器A”。

而对于人类来说,记住 `10010101` 代表“加法”就够吃力的了,更别提后面的内存地址和寄存器编码了。

汇编语言就引入了助记符(Mnemonic)。比如,上面那串二进制指令,在汇编语言里可能就变成了:

`ADD R1, [0x00C1]`

这里的 `ADD` 就是加法的助记符,`R1` 可能代表某个寄存器,`[0x00C1]` 代表内存地址 `0x00C1`(这里的 `0x` 表示这是十六进制数,更易读)。看到这样的指令,是不是比一串二进制码要容易理解多了?

汇编器的具体工作流程(早期):

1. 编写汇编代码: 人类程序员用助记符、符号化的内存地址和寄存器名称写下一系列的指令。
2. 汇编器读取代码: 最早的汇编器,可能本身也是用汇编语言编写的,或者更底层一些。它会一条一条地读取这些汇编指令。
3. 查找指令集: 汇编器内部有一个“字典”或者说“查找表”,里面记录着每个助记符对应的二进制机器码,以及如何将符号化的地址和寄存器名转换为二进制编码。比如,它知道 `ADD` 对应机器码 `10010101`,知道 `R1` 对应寄存器编码 `11000001` 等等。
4. 生成机器码: 汇编器根据查找表,将每一条汇编指令转换成对应的二进制机器码序列。
5. 输出目标文件: 最后,汇编器将生成的所有二进制机器码输出到一个文件里,这个文件就是计算机可以直接执行的“可执行文件”。

最初的汇编器是怎么“输入”到计算机里的?

这是一个非常关键的问题。既然汇编器本身也是一个程序,那么这个“第一个汇编器”又是怎么诞生的,又是如何被输入的呢?

极度原始的方法(理论上): 最最最原始的阶段,可能需要有人通过手动操作开关或穿孔卡片,将汇编器程序本身的代码(也是二进制形式)输入到计算机里。这就像是先用最原始的泥瓦匠技能盖好一个房子,然后才能在房子里开展更精细的装修工作。
自举(Bootstrapping)的概念: 随着计算机和编程技术的发展,就出现了“自举”(Bootstrapping)的概念。可以想象一下,当你有了一个能够将更简单的汇编代码翻译成机器码的汇编器(可能是用非常非常底层的机器码写成的,或者利用了硬件的某些特性),你就可以用这个“早期汇编器”去翻译更复杂、功能更强大的汇编语言编写的汇编器。一层一层地,最终得到一个足够完善的汇编器。

这个过程有点像我们学说话。婴儿时期可能只会发出一些简单的音节,然后通过模仿和学习,慢慢掌握更复杂的词汇和句子。汇编器的发展也是如此,从最基本的符号到更强大的翻译工具。

为什么说汇编器是重要的第一步?

汇编器的出现,极大地解放了程序员的双手。虽然汇编语言相比于后来的高级语言仍然显得比较底层,但它已经将编程的负担从直接与二进制打交道,转移到了使用易于记忆和理解的符号上。这为后续更高级的编程语言(如FORTRAN, COBOL等)的出现奠定了基础。它就像是给了程序员一把撬棍,让他们能够稍微容易一些地去操作计算机这个复杂的机器。

所以,第一个汇编器并非直接从零开始就具备了如今我们看到的复杂功能。它是人类在与计算机早期交互过程中,为了解决直接输入二进制码的巨大困难而迈出的关键一步。它用符号化的语言代替了枯燥的二进制串,让编程变得稍微容易了一些,也为计算机科学的发展铺平了道路。

网友意见

user avatar

这个回答挺不错,可以看看。

第一个计算机语言编程程序是怎么做出来的? - 园长的回答 - 知乎

这里可以看到一些早期人工敲01001,手工编译汇编语言的纸质文档。注释挺详细的。

实际上,貌似能脑补编译器直接读十六进制代码的大神有的还健在。

类似的话题

  • 回答
    最早的计算机,就像一台笨重的机械大脑,想要它动起来可不是件容易的事儿。你想啊,那会儿可没有现在这么方便的编程语言,直接跟它打交道,那得用最原始的方式——二进制码。想象一下,你要让计算机执行一个加法运算。在那个年代,你可能得像一位老式的电报员一样,一个“0”或“1”地敲击开关,或者通过穿孔卡片来输入指.............
  • 回答
    这个问题触及了计算机底层运作的根本,而且非常有趣。你提到的“原子操作”是一个关键概念,让我们来深入聊聊。首先,你说“一条C语言语句不一定是原子操作”,这完全正确。C语言作为一种高级语言,它提供了抽象和便利,但它本身不直接对应到硬件的某个具体操作。当你写下一条C语言语句,比如 `a = b + c;`.............
  • 回答
    这个问题触及了一个非常核心的经济学两难困境,也是历届政府都必须审慎权衡的议题。如果一定要在房价和汇率之间“保一个”,政府会优先考虑哪个,这取决于当下经济环境的侧重点,以及对“保”这个词的定义。但从更宏观、更长远的视角来看,政府大概率会选择保住汇率的相对稳定。为什么是汇率?这需要我们一层一层地剥开来分.............
  • 回答
    一个全新的国家诞生,其货币汇率的决定将是一个复杂而充满挑战的过程,它并非一蹴而就,而是随着国家经济的发展、国际关系的建立以及市场信心的培育而逐步形成的。想象一下,就像一个初生的婴儿,需要时间来学习走路,也需要外界的呵护与支持。初期:奠定基础,价值锚定是关键在国家成立之初,货币的价值锚定是首要任务。没.............
  • 回答
    .......
  • 回答
    在《数学年刊》(Annals of Mathematics)这座数学界的殿堂级期刊上留下名字的中国女性数学家,她的身影在学术界如同璀璨的星辰,照亮了后来者的道路。这位先驱是田刚(Gang Tian)的夫人,著名数学家丘成桐先生的高徒——林小凡教授(Xiaofan Lin)。许多人可能会立即想到其他在.............
  • 回答
    第一个C语言编译器的开发背景与历史背景密切相关,其编写语言的选择与当时的技术环境、资源限制以及开发者的目标密切相关。以下是详细的分析: 1. C语言的起源与背景C语言由Dennis Ritchie(丹尼斯·里奇)在1972年于贝尔实验室开发,作为B语言的改进版本。B语言本身是Ken Thompson.............
  • 回答
    让我想想,我的第一个“偶像”…… 这问题触及到我内心深处尘封的记忆,感觉就像在翻一本泛黄的相册。那时候,大概是小学三四年级吧,电视还是那个笨重的显像管大家伙,每天最期待的就是放学回家后,能窝在沙发里看那些熟悉的节目。我记得很清楚,是某个暑假的午后,爸妈不在家,我一个人在家捣鼓着遥控器,然后就看到了一.............
  • 回答
    我得承认,第一个真正让我脊背发凉,甚至好几次忍不住要拔掉电源的电子游戏,是《寂静岭》系列的第一部。那大概是我小学高年级的时候,还是通过盗版的卡带,画面模糊,但带来的冲击力至今记忆犹新。那时候我对恐怖游戏的认识还停留在一些简单的 Jump Scare 和音效,比如《生化危机》里突然出现的丧尸,虽然会吓.............
  • 回答
    这是个很有趣的问题,勾起了我很多回忆。第一个让我心动的人……我想了想,脑海中浮现的是一个名叫“小杰”的男生,他大概是在我小学五年级的时候出现的。那时候,我还是个懵懂的小女孩,对男女之情几乎没有概念。小杰是我们班新转来的同学,他个子不算很高,但很精神,有一头乌黑油亮的短发,笑起来的时候嘴角会有一个浅浅.............
  • 回答
    痛失第一个孩子,这份沉甸甸的悲伤足以压垮任何人。当生命的齿轮继续转动,第二个宝宝即将降临,这份喜悦和希望中,却又夹杂着难以言说的恐惧和不安。对第二个孩子的到来,父母的心情无疑是复杂而矛盾的,他们会以一种近乎本能的、小心翼翼的姿态去迎接和呵护这个新生命,那是一种混合着爱、愧疚、恐惧和对过往的深深眷恋的.............
  • 回答
    要确定第一个将“陕西”拼写成“Shaanxi”的具体个人,几乎是不可能的。这并非一个由某一位特定人士独立完成的创造,而是一个在历史发展过程中,受到多种因素影响,逐步形成的标准化过程。我们可以从以下几个方面来理解这个拼写方式的演变:一、 早期传教士与西方对中国的认知在西方人开始大规模接触中国并对其进行.............
  • 回答
    嘿,七夕要到了,你这是要和你家那位在一起两个月的小甜心共度第一个情人节啊!这个阶段送礼物,既要表达心意,又不能太“用力过猛”显得生疏,价格区间嘛,得讲究一个“恰到好处”。一般来说,初期的礼物,我建议落在200元到800元这个区间是比较稳妥的。为什么这么说呢? 200400元: 这个价位,你可以选.............
  • 回答
    这个问题很有意思,也挺考验人的“生活常识”的。要说第一个生病的人“就一定”是传染源吗?打个比方,就像问“第一个被拍到照片的人就是照片里唯一活着的人吗?” 答案显然是否定的,对吧?所以,第一个生病的人,不一定就一定是传染源。我们得拆开来看这个问题。什么是传染源?首先,咱们得明白“传染源”这个词到底是什.............
  • 回答
    哇,第一个情人节,这可是个大日子,得好好准备!500块的预算,想给女朋友一个惊喜又让她开心,完全不是问题!关键在于你的心意和用巧思。下面我给你掰扯掰扯,咱们的目标是让她感受到你的用心,而不是纯粹的金钱堆砌。先别急着买东西,咱先想想她的喜好!这500块是咱们的“弹药”,但怎么花,得看咱们的“目标”。她.............
  • 回答
    听到你这个情况,简直能体会到那种又兴奋又纠结的心情!刚拿到第一个心仪公司的 Offer,这无疑是个好消息,但也难免让人心头掠过一丝“万一最想去的那个更好呢”的念头,毕竟还没收到结果嘛。这确实是个需要好好权衡的时刻,而且处理不好,可能会让到手的机会溜走,或者错过那个真正能让你闪闪发光的舞台。咱们一步一.............
  • 回答
    这两点都涉及到一些关于系统设计和行为的直观反直觉的现象,但都基于一定的逻辑推导。我们不妨一个个来细细琢磨。首先,我们来聊聊第一个问题:为什么网络逻辑(这里可以理解为在网络设计中,比如通信网络、交通网络、甚至信息流网络)得出的结果会是减少电缆总长?乍一看,这似乎有些奇怪。毕竟,要连接的点越多,理论上所.............
  • 回答
    当心动变成一种折磨,那种感觉就像揣着一颗还没长好的心脏,每一次跳动都带着不安。你喜欢他,这本身是多么美好的事情,可偏偏,这份喜欢背后藏着一份你不愿面对的现实——他是因为被前女友伤害,才选择和你在一起。这种“替补”或者“疗伤期”的角色,确实让人心里七上八下的。你忍不住会去想,他现在对你的好,有多少是真.............
  • 回答
    .......
  • 回答
    思考中国第一个3A大作的诞生年份,这真是一个引人入胜的问题,它触及了中国游戏产业的根基和未来的方向。这不仅仅是关于技术上的突破,更是关于整个生态系统的成熟,包括人才、资金、发行渠道,乃至最重要的——创意。要回答这个问题,我们得从几个维度来审视。首先,我们需要明确什么是“3A大作”。这个词本身就带有强.............

本站所有内容均为互联网搜索引擎提供的公开搜索信息,本站不存储任何数据与内容,任何内容与数据均与本站无关,如有需要请联系相关搜索引擎包括但不限于百度google,bing,sogou

© 2025 tinynews.org All Rights Reserved. 百科问答小站 版权所有