问题描述
定义:
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 ++语法规则,delete
和new
也是运算符。但是在asm中,它们被实现为函数调用。