关于汇编器的问题,想了很久都不明白

来源:百度知道 编辑:UC知道 时间:2024/06/09 03:37:07
第一个汇编器是如何编写的,一定是用机器码吧?
那么怎么样才能编写出汇编器这样的程序呢?
随便写几条可以把汇编语言翻译成机器码的指令,好让我知道个大概。
请高人指点!
没有说明白啊,我的意思是说为什么遇到mov时,就会把在相应的地方写上0101 1100,计算机只认机器码,当输入了汇编指令,他们是怎么被转换成机器码的?
帮帮忙,谢谢!!

机器语言和硬件是紧密相连的,指令是根据硬件设计的,这些指令实际上就是一定长度的而进制代码,同时,每个汇编助记符都有相应的代码对应,如mov 对应某个二进制代码,比如说可能是0101 1100(假设指令是八位,其实具体为几位是硬件设计者根据硬件而设技的),这样,在汇编翻译成机器指令时,遇到mov时,就会把在相应的地方写上0101 1100。这其实是组成原理的东西,不知道说明白了没有,如果没有说清楚,你接着问

这个问题比较复杂

首先,真正的机器码是01的组合。我们平时看到的16进制代码其实是为了减少阅读的难度,由机器做的自动转换。而mov之类的,称为指令助记符,是给人看的。

汇编器有一个指令助记符和机器码的对照表。程序通过对汇编源代码的语法分析后查表,得到相应的机器码

所以,“可以把汇编语言翻译成机器码的指令”是没有的。翻译工作都是程序来做,而且不可能只有几条指令。

如何写出汇编器,现在用一般的程序语言就可以,比如c

第一个汇编器,估计是用机器码直接写的。但是也可能是用所谓的“编译程序的自展技术”

其实你问的问题很简单,因为汇编每个指令对应机器码中的指令的。只是汇编更高一层,将0,1二进制数字转换成可记忆的符号。比如Mov他就指的是机器机指令某一个代码 也就是所谓的二制码
也可以这么讲你听吧,比如01是机器指令,那么转换成16进制位的也就是0001了,然后再转换成ASCII码时就是1了,那么这个1也就是汇编中的指令,我只是打个比方,实际中,01不一定转换成汇编指令就是1了。这样讲你明白吗?