操作数是否存储在内存中? (C / C ++)

时间:2013-04-03 15:30:51

标签: c++ c assembly operators cpu

给出以下代码:

int x=4;
int g=2;
int z=x/g;

据我所知,值'4'存储在内存中属于x的位置,'2'存储在内存中g的位置。 现在,当CPU获得z=x/g命令时,首先他从内存中获取xg的值,然后计算结果,并将其存储在{{1 }}。 但是当下面的代码运行时会发生什么:

z

CPU获得'4'后,如何获得'2'? CPU命令可以保存数据而不是地址和操作码吗?

2 个答案:

答案 0 :(得分:2)

你可以通过对此进行编码并查看反汇编来照亮自己。无论如何 - 2存储在寄存器中,以及4中。然后执行操作。

答案 1 :(得分:0)

许多CPU命令都可以嵌入数据。这被称为“立即操作数”。但是,很少有一个以上的数据。 CPU架构和个人命令的细节差异很大。

由于命令本身驻留在内存中,从技术上讲,在CPU命令中嵌入数据项仍然算作“内存中的数据”。对于记录,地址也是一种直接操作数。对于CPU,它只是另一个数字。

具体除以2通常通过右移1次操作(按位或算术,取决于)来实现。在我知道的所有CPU上,shift命令可以将shift-by操作数存储为立即数。