最近我要学习一些基本的汇编语言,我搜索了wiki,我意识到汇编语言只是机器语言的“文本版本”,以便让人类阅读?所以这意味着机器语言能做的任何事情,汇编语言也能完成,对吧?或者汇编语言存在一些限制,就像高级编程语言和汇编语言之间的鸿沟一样(我们在高级语言中做不好,所以我们必须使用汇编),所以是否有一些情况我们别无选择机器语言?
另一个问题是我发现一种低于机器语言的语言是“微码”?有人知道机器码和微码之间的关系吗?
最近我要学习一些基本的汇编语言,我搜索了wiki,我意识到汇编语言只是机器语言的“文本版本”,以便让人类阅读?所以这意味着机器语言能做的任何事情,汇编语言也能完成,对吧?或者汇编语言存在一些限制,就像高级编程语言和汇编语言之间的鸿沟一样(我们在高级语言中做不好,所以我们必须使用汇编),所以是否有一些情况我们别无选择机器语言?
另一个问题是我发现一种低于机器语言的语言是“微码”?有人知道机器码和微码之间的关系吗?
这取决于您如何定义汇编代码和机器代码之间的区别:
如果您将任何由汇编程序翻译的“源”代码称为“汇编程序代码”,那么明确的答案是 99% 使用的所有汇编程序:“否”
您可以使用如下指令将您喜欢的任何机器代码指令添加到汇编程序源代码中.byte
,或者db
您的汇编程序将指令命名为:
move X,Y
.byte 1
.byte 2
.byte 3
add Y,X
如果您说:任何以数字形式输入的指令(使用.byte
指令)都不是汇编程序,那么答案是:“通常是”:
例如,在 8088 上,有一些指令可以用多种方式表示:jmp
或者mov ax, value
例如。(对于许多像 MIPS 这样的 RISC CPU 来说,情况更糟……)
如果您在汇编程序中键入这样的指令,汇编程序可以自由决定如何翻译该指令。CPU 将以相同的方式执行这两个变体,那么为什么汇编器应该让您可以在两个变体之间进行选择呢?
然而,其他要求可能会强制您明确地使用这两种变体之一: 似乎有 DOS 仿真器要求某种文件格式的第一条指令是指令的 3 字节变体jmp
。
如果你简单地编写以下汇编代码:
jmp _start
_start:
...
如果汇编器使用指令的 3 字节或 2 字节变体,您将无法控制jmp _start
。我猜大多数汇编程序将使用 2 字节变体。
如果它使用 2 字节变体,这样的 DOS 仿真器将无法读取该文件!