首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >有没有汇编语言不能做而只有机器语言能做的事情?

有没有汇编语言不能做而只有机器语言能做的事情?
EN

Stack Overflow用户
提问于 2017-10-15 21:06:05
回答 1查看 511关注 0票数 1

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

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

EN

回答 1

Stack Overflow用户

发布于 2017-10-16 00:48:51

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

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

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

代码语言:javascript
运行
复制
move X,Y
.byte 1
.byte 2
.byte 3
add Y,X

如果你说:任何作为数字输入的指令(使用.byte指令)都不是汇编的,答案是:“通常是的”:

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

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

然而,其他需求可能会迫使您显式地使用这两种变体中的一种:似乎有一些DOS仿真器要求某种文件格式的第一条指令是jmp指令的3字节变体。

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

代码语言:javascript
运行
复制
    jmp _start
_start:
    ...

如果汇编程序使用指令jmp _start的3字节或2字节变体,则无法控制。我猜大多数汇编器都会使用2字节的变体。

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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46755351

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档