2013-04-03 39 views
0

鑑於以下代碼:操作數是否存儲在內存中? (C/C++)

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命令可以保存數據而不是地址和操作碼?

+1

您可以嘗試[查看生成的程序集](http://stackoverflow.com/questions/137038/how-do-you-get-assembler-output-from-c-c-source-in-gcc)。 –

+3

再次提醒我 - 在C程序中做什麼'\\'? –

+0

取決於編譯器 - 它們可以直接加載到寄存器,從堆棧中彈出/彈出,等等。 - 最好的辦法就是看看程序集,就像其他人提到的一樣。 – JerKimball

回答

0

許多CPU命令都可以嵌入數據。這被稱爲「直接操作數」。然而,很少有多於一個數據。細節因CPU體系結構和個人命令而異。

由於命令本身駐留在內存中,從技術上講,將數據項嵌入到CPU命令中仍然算作「內存中的數據」。爲了記錄,地址也是一種立即操作數。對於CPU來說,它只是另一個數字。

具體除以2通常通過右移1操作(按位或算術,依賴)來實現。在所有我知道shift命令的CPU上,都可以將shift-by操作數存儲爲immediate。

2

您可以通過編碼並查看反彙編來闡明自己。無論如何 - 2存儲在一個寄存器,以及4。然後執行操作。