2015-01-05 32 views
1

我想創造在裝配一個4個元素的數組:數組是否以相反的順序存儲在C/C++中?

; Create an array of 4 elements 
push BYTE 'a' 
push BYTE 'b' 
push BYTE 'c' 
push BYTE 'd' 

和它來腦海裏數組存儲在C/C++以相反的順序(第一元件具有最低存儲器地址和最後一個元素具有最高的內存地址),所以要確保我的假設是正確的,我做了如下試驗:

#include <stdio.h> 

int main() 
{ 
    char arr[4] = {'a', 'b', 'c', 'd'}; 

    printf("Address: %d Value: %c\n", arr + 0, *(arr + 0)); 
    printf("Address: %d Value: %c\n", arr + 1, *(arr + 1)); 
    printf("Address: %d Value: %c\n", arr + 2, *(arr + 2)); 
    printf("Address: %d Value: %c\n", arr + 3, *(arr + 3)); 

    return 0; 
} 

和預期的輸出是:

Address: 3603656 Value: a 
Address: 3603657 Value: b 
Address: 3603658 Value: c 
Address: 3603659 Value: d 

那麼,這是否意味着我要創建這樣的大會數組:

; Create an array of 4 elements 
push BYTE 'd' 
push BYTE 'c' 
push BYTE 'b' 
push BYTE 'a' 

,並假定它的第一個元素是「A」的地址。或者像以前那樣做沒有問題,而不是像以前那樣增加1來獲得下一個元素,我只是減少1?


編輯: 我的意思相反的順序爲相對於堆(其向下增長)。

+0

爲什麼你更改順序C被轉化成總成,使插入到數組中?如果你在第一個數組中添加第一個數組,你應該保持相同的順序 –

+0

數組存儲順序是一個不同的問題,然後堆棧增長的方向。通過以彙編語言將字節推入堆棧不會創建數組。 你能改說你的問題嗎? – Jakub

+2

我看不到最低地址的第一個元素如何被視爲「反轉」。你似乎正在將數組的概念與堆棧混淆起來。 – Michael

回答

0

您不在這裏創建數組。 PUSH和POP是針對堆棧執行的,堆棧的通用規則是:後進先出

如果你想創建數組,那麼你可以簡單地使用一系列mov命令:

mov <mem>,<const> // x86 instruction 

或使用數據定義指令

Array DW 'a', 'b', 'c', 'd' 
+0

嗯,實際上我正在同時創建和初始化數組。我的意思是我應該如何在Assembly中創建一個數組:sub esp,4? – John

+0

@John是的。然後你可以使用MOV指令來初始化它。 – kraskevich

+0

@ILoveCoding謝謝。我想(根據前一個問題的答案,PUSH用於初始化它)。 – John