【问题标题】:What is the difference between "instruction" and "operation" terms?“指令”和“操作”术语有什么区别?
【发布时间】: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


【解决方案1】:

这是我的理解: 指令是低级术语,用于告诉您在每个步骤中要做什么,涉及寄存器、内存地址等。因此,我们用该语言编写的操作可以采用低级语言的多条指令。

一个函数可以有多个运算符。
一个操作可以执行多个指令。
(或者有时,单个 asm 指令可以实现多个操作,例如 x86 lea eax, [ecx + edx*4 + 123] 实现 x + (y<<2) + 123)

大于号也是一个运算符:它比较 LHS 值和 RHS 值。还有一元运算符:(++) (!) 等。

具有像1+2+3 这样的编译时常量操作数的运算符可以在编译时计算为单个常量,无需使用 asm 指令。 (或者 1 mov,如果您以后不能立即使用该常量)

并且运算符不必是数学运算:在 C++ 中,delete 和 new 在 C++ 语法规则方面也是运算符。但在 asm 中,它们被实现为函数调用。

【讨论】:

    猜你喜欢
    • 2020-01-29
    • 2010-11-19
    • 2020-03-17
    • 1970-01-01
    • 2021-06-22
    • 1970-01-01
    • 1970-01-01
    • 2016-04-09
    相关资源
    最近更新 更多