最近我要学习一些基本的汇编语言,我搜索过wiki,我意识到汇编语言只是机器语言的“文本版本”才能让人类阅读?所以它意味着任何机器语言都可以做汇编语言也可以完成,对吗?或者它在汇编语言中存在一些限制,就像高级编程语言和汇编语言之间的差距(我们不能在高级语言中做得好,所以我们必须使用汇编),所以有些情况我们别无选择,机器语言?
另一个问题是我发现一种低于机器语言的语言是“微码”?有谁知道机器代码和微代码之间的关系?
答案 0 :(得分:3)
这取决于您如何定义装配和机器代码之间的差异:
如果你打电话给任何"来源"由汇编程序翻译的代码"汇编程序代码"明确的答案是99%的所用装配工:" No"
您可以使用.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模拟器将无法读取该文件!