0
假定以下指令:存儲器
stp x29, x30, [sp, -32]!
假設堆棧指針是在地址0處,然後被存儲什麼地址x29
和x30
:
- 選項1:
[sp-16]
和[sp-32]
- 選項2:
[sp-32]
和[sp-40]
我知道堆棧向低地址增長,但是每當存儲我們佔據越來越多的地址,因此我認爲'選項1'是正確的答案。
你覺得呢?無論尋址模式,超過1個字節的內存accessess的
假定以下指令:存儲器
stp x29, x30, [sp, -32]!
假設堆棧指針是在地址0處,然後被存儲什麼地址x29
和x30
:
[sp-16]
和[sp-32]
[sp-32]
和[sp-40]
我知道堆棧向低地址增長,但是每當存儲我們佔據越來越多的地址,因此我認爲'選項1'是正確的答案。
你覺得呢?無論尋址模式,超過1個字節的內存accessess的
總是開始在給定的基地址和提升,讓你的「選項2」與一個部分或者基址的側面顯然是不正確的。另外要注意的是,如果您試圖將存儲在以下,則初始堆棧指針0將無效 - 它是地址計算的結果,其下溢或溢出在架構上是未知的,因此雖然某些硬件可能會產生預期的地址,你絕對不應該依賴它。
在這種情況下,例如,如果初始sp
是0x1000的,那麼你就必須存儲到地址0x0fe0..0xfe7(在當前字節順序適當的順序)所述第一寄存器(x29
)的字節,第二個字節(x30
)存儲到0xFE8..0xfef,最後0xFE0寫回sp
。