Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly 汇编程序是如何工作的/它是如何编写的?_Assembly_Theory - Fatal编程技术网

Assembly 汇编程序是如何工作的/它是如何编写的?

Assembly 汇编程序是如何工作的/它是如何编写的?,assembly,theory,Assembly,Theory,在我的一节课上,我们从头开始学习计算机体系结构和编程。这意味着我们从pMOS/nMOS电路开始,接着是逻辑门,然后使用逻辑门制作寄存器和组合逻辑单元,然后分析一个小型微处理器体系结构(在我的类中是LC-3) 接下来我们做的是用汇编语言编写程序,这让我有点困惑 例如: 添加R0、R1、R2,这将添加寄存器1和2的内容,并将其存储在寄存器0中。作为一个机器字(在我们在课堂上学习的体系结构中),这条指令将是0001 000 001 000 010,在某种程度上,我理解如何将二进制字转换为电压信号,从而

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

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

例如:
添加R0、R1、R2
,这将添加寄存器1和2的内容,并将其存储在寄存器0中。作为一个机器字(在我们在课堂上学习的体系结构中),这条指令将是
0001 000 001 000 010
,在某种程度上,我理解如何将二进制字转换为电压信号,从而在处理器中的各种多路复用器和控制单元中设置适当的值

我的问题是,汇编程序如何将
addr0,R1,R2
转换为
00010000001000010
?对我这样理解水平的人来说,这个过程似乎类似于编译更高级的语言。然而,这里不可能有编译器,因为没有比汇编语言更基本的语言来编写编译器


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

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

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


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

我实际上在做这个精确的问题:在没有汇编程序的情况下组装汇编程序。我的做法是使用Excel电子表格。电子表格中有查找运算码等并计算二进制输出的公式。在过去,他们做同样的事情,只是使用纸质电子表格而不是基于计算机的电子表格。这是我的手动汇编程序的屏幕截图,突出显示的区域是机器代码:

右边的区域是装配代码。左边的区域是中间计算。这里是特写:

因此,这个问题的简短答案是:在过去,他们使用纸质电子表格进行手动组装。现在,要进行手动装配,我们使用计算机电子表格(我使用Excel)。


在我的电子表格中,标有“Encode”的列是实际的二进制代码(机器代码)。右边是装配说明以及它们所做工作的说明。

也就是说,很酷,我还在
Excel
中编写汇编程序!或者,更确切地说,我在
excelvba
中组装了一个小的
Forth
,我用它来组装其余的部分。我正在寻找关于如何创建一个汇编器的设计建议/标准/约定/模式。我想在这些假期里对它进行更多的研究,因为我以前从未使用过lexer或parser。我目前正在阅读编译器-原理、技术和工具,但您的Excel工作簿看起来很吸引人,而且它似乎只是公式,不需要VBA。有可能分享吗?提前感谢,并保持下去!