最近我要学习一些基本的汇编语言,我搜索了wiki,我意识到汇编语言只是机器语言的“文本版本”,以便让人类阅读?所以这意味着任何机器语言可以做的事情汇编语言也可以完成,对吧?或者汇编语言存在一些局限性,就像高级编程语言和汇编语言之间的鸿沟(高级语言做不好的事情,所以我们必须使用汇编语言),那么在某种情况下,我们除了机器语言之外别无选择?
另一个问题是,我发现一种比机器语言更低的语言是“微码”?有人知道机器代码和微码之间的关系吗?
发布于 2017-10-16 00:48:51
这取决于您如何定义汇编代码和机器码之间的区别:
如果你把任何由汇编程序翻译的“源代码”称为“汇编程序代码”,那么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仿真器要求某种文件格式的第一条指令是jmp
指令的3字节变体。
如果您只需编写以下汇编代码:
jmp _start
_start:
...
如果汇编程序使用指令jmp _start
的3字节或2字节变体,则无法控制。我猜大多数汇编器都会使用2字节的变体。
如果它使用2字节的变体,这样的DOS仿真器将无法读取该文件!
https://stackoverflow.com/questions/46755351
复制相似问题