assembly - 汇编器是如何工作的/它是如何编写的?

标签 assembly theory

很难说出这里问的是什么。这个问题是模棱两可的、模糊的、不完整的、过于宽泛的或修辞的,无法以目前的形式得到合理的回答。如需帮助澄清这个问题以便重新打开它,visit the help center .




9年前关闭。




在我的一门课上,我们从头开始学习计算机体系结构和编程。这意味着我们从 pMOS/nMOS 电路开始,然后转到逻辑门,然后使用逻辑门制作寄存器和组合逻辑单元,然后分析了一个小型微处理器架构(LC-3,在我的类(class)中)。

我们接下来要做的是用汇编编写程序,这让我有点困惑。

举个例子:ADD R0, R1, R2它应该添加寄存器 1 和 2 的内容并将其存储在寄存器 0 中。作为机器字(在我们在类里面学习的体系结构中),该指令将是 0001 000 001 000 010在某种程度上,我了解二进制字如何转换为电压信号,该信号在处理器中的各种多路复用器和控制单元中设置正确的值。

我的问题是,ADD R0, R1, R2 怎么样?转换为 0001 000 001 000 010由汇编程序?对于以我的理解水平的人来说,这个过程似乎类似于编译更高级别的语言。然而,这里不可能没有编译器,因为没有比汇编更基本的语言来编写编译器了!

换句话说,如果程序本身不能用汇编语言编写,如何编写程序来汇编汇编代码。它是由某个天才直接用二进制编写的,然后硬编码到处理器的程序内存中吗?我很难想象一种实用的方法来编写汇编程序,而不是由微处理器直接执行。

最佳答案

很久以前,在遥远的星系中,最早的汇编程序是直接用机器代码编写的。但是,一旦有了汇编器,就可以用它来汇编新的汇编器,也可以用它来汇编编译器。

一旦有了编译器,就可以用它来编译新的汇编器。

所以在实践中,汇编程序现在是用更高级的语言编写的。通常是 C 或 C++。至于它们是如何工作的,一个非常非常简单的汇编器本质上只是一个大的 switch 语句;识别操作码,将其转换为相应的机器编码。

关于assembly - 汇编器是如何工作的/它是如何编写的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13163081/

相关文章:

assembly - 最快的轮询循环 - 如何修剪 1 个 CPU 周期?

linux - Linux 上 printf 上的段错误 ASM

assembly - LC3 汇编 - 如何切换二进制数中的最低位?

C++动态声明的数组无法工作

algorithm - 仅使用霍夫曼编码的算法示例是什么?

assembly - assembly 中的"global main"

c++ - 如何使用 eax 和 esi 中的参数调用函数。海湾合作委员会

Javascript:从已经实例化的对象与原型(prototype)创建对象

theory - lambda 演算的图灵完备性?

javascript - 什么是直接引用?