“指令”和“操作”术语有什么区别?

问题描述

定义:

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条或更多条指令。

解决方法

这是我的理解: 指令是低级术语,用于告诉您在每个步骤中要执行的操作,与寄存器,内存地址等有关。因此,我们用该语言编写的操作可以采用低级语言的多个指令。

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

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

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

并且运算符不必是数学的:在C ++中,根据C ++语法规则,deletenew也是运算符。但是在asm中,它们被实现为函数调用。