【问题标题】:Are the operands stored in the memory? (C/C++)操作数是否存储在内存中? (C/C++)
【发布时间】:2013-04-03 15:30:51
【问题描述】:

给定以下代码:

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

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

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

CPU得到'4'后,他怎么才能得到'2'呢? CPU命令可以保存数据而不是地址和操作码吗?

【问题讨论】:

  • 再次提醒我 - `\` 在 C 程序中的作用是什么?
  • 很大程度上取决于编译器 - 它们可以直接加载到寄存器中,从堆栈中推送/弹出等 - 最好的办法是查看程序集,正如其他人提到的那样。跨度>
  • @500-InternalServerError C 的第一条规则是你不要谈论那个操作符 *wink*
  • 你到底在问什么? “a cpu”(什么样的?很重要)是否可以在数学运算中保持直接参数?是的,这是一个共同的特征(尽管例如 x86 不能有直接除数)。或者编译器是否真的使用了这种能力?

标签: c++ c assembly operators cpu


【解决方案1】:

您可以通过编写代码并查看反汇编来照亮自己。无论如何 - 2 和 4 都存储在寄存器中。然后执行操作。

【讨论】:

    【解决方案2】:

    许多 CPU 命令都可以嵌入数据。这称为“立即操作数”。但是,很少有超过一个数据。具体细节因 CPU 架构和单个命令而异。

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-28
      • 2013-09-07
      • 2017-11-12
      • 2018-04-20
      • 2015-03-03
      相关资源
      最近更新 更多