有什么是汇编语言做不到的,只有机器语言可以做到的吗?



最近我要学习一些基本的汇编语言,我搜索了wiki,我意识到汇编语言只是机器语言的"文本版本",以便让人类阅读?所以这意味着任何机器语言都可以做汇编语言也可以完成,对吧?或者它在汇编语言中存在一些限制,就像高级编程语言和汇编语言之间的差距一样(有些事情我们在高级语言中做不好,所以我们必须使用汇编),那么是否存在除了机器语言之外别无选择的情况?

另一个问题是,我发现一种低于机器语言的语言是"微码"?有人知道机器代码和微码之间的关系吗?

这取决于如何定义汇编代码和机器代码之间的区别:

如果你把任何由汇编程序翻译的"源"代码称为"汇编程序代码",那么99%的汇编程序都会得到明确的答案:"否">

您可以使用.bytedb等指令将任何您喜欢的机器代码指令添加到汇编程序源代码中,或者您的汇编程序将该指令命名为:

move X,Y
.byte 1
.byte 2
.byte 3
add Y,X

如果你说:任何以数字形式输入的指令(使用.byte指令)都不是汇编程序,答案是:"通常是":

例如,在8088上,有一些指令可以用多种方式表示:例如jmpmov ax, value。(对于许多像MIPS这样的RISC CPU来说,这甚至更糟…)

如果在汇编程序中键入这样的指令,汇编程序可以自由决定如何翻译该指令。CPU将以相同的方式执行两种变体,那么为什么汇编程序要让您在两种变体之间进行选择呢?

然而,其他要求可能会强制您明确使用两种变体之一:似乎有DOS模拟器要求某个文件格式的第一条指令是jmp指令的3字节变体。

如果您只需编写以下汇编代码:

jmp _start
_start:
...

汇编程序使用指令jmp _start的3字节变体还是2字节变体,您无法控制。我想大多数汇编程序都会使用2字节的变体。

如果它使用2字节的变体,这样的DOS模拟器将无法读取该文件!

最新更新