【发布时间】:2020-12-08 13:36:58
【问题描述】:
定义:
Instruction 只是汇编语言的原子部分,例如
MOV EAX, EBX
现在假设我们有以下用 C++ 语言编写的代码:
int a = 1;
int b = a + 3;
这里= 和+ 是operators。
在数学中,operation 是一个函数,它将零个或多个输入值(称为操作数)转换为明确定义的输出值。
据我了解,我们不能在没有赋值的情况下执行operator(基本上我们可以写b > c;,但它没有意义),甚至在内部像x = x + 1一样递增和递减工作。
所以在我看来,在计算机科学中operation 始终是一些单个 运算符执行的结果。例如:
c = 1 + 2; // this is operation since we have single + operator
c = 1 + 2 + 3; // here we have two operations 1 + 2, and result of it + 3
现在。并不是每一行代码都可以翻译成一条指令,例如:
int a = 1; // MOV EAX, 1
int b = a + 3; // ADD EAX, 3
// ADD EBX, EAX
所以给operation下面的定义是正确的(对于x86):
operation 是算子执行的结果。它会转化为 1 个或多个指令。
【问题讨论】:
-
operation 是一个取决于上下文的模糊词。一个
operator可以单独调用,赋值是另一个operator。 -
高级语言的规范将定义每个涉及的术语。 “操作”只是一个词,没有任何意义。即使在数学中,“运算”也没有任何意义。在数学上将语言形式化很困难,这就是发明不同模型的原因(PRF、TM、lambda 演算)。形式化语义要容易一些,但它与程序集无关。 “指令”既是汇编指令又是 HL 语句,具体取决于上下文。您正在寻找一个不存在的连接 :) 只需阅读 C 标准,您就会明白。
-
您在谈论三种不同的语言,不同的上下文,您可以根据上下文选择如何使用类似的词,它们之间没有联系。您不必对个别术语如此着迷,一般的语言不是这样具体的,试图这样做会导致混乱和失败。
-
就术语和定义而言,请保持在您和您正在交谈的个人的范围内,双方在对话中进行调整。其他一些人可以/将有一组完全不同的术语或相同术语的定义,您只需适应该对话,重复。您可以查看任何字典,尤其是 OED,以了解术语具有不同的含义以及随着时间的推移而变化,有时意味着完全不同的东西。
-
处理器内部的指令如文档中所定义。 add、mov 等是指令。该术语在 C 中没有意义,并且汇编语言指令并不总是与机器代码指令一对一,因此您必须再次依赖上下文而不是假设一些全局定义。
标签: assembly terminology instructions