2015-06-01 24 views
0

假定以下指令:存儲器

stp x29, x30, [sp, -32]! 

假設堆棧指針是在地址0處,然後被存儲什麼地址x29x30

  • 選項1:[sp-16][sp-32]
  • 選項2:[sp-32][sp-40]

我知道堆棧向低地址增長,但是每當存儲我們佔據越來越多的地址,因此我認爲'選項1'是正確的答案。

你覺得呢?無論尋址模式,超過1個字節的內存accessess的

回答

1

總是開始在給定的基地址和提升,讓你的「選項2」與一個部分或者基址的側面顯然是不正確的。另外要注意的是,如果您試圖將存儲在以下,則初始堆棧指針0將無效 - 它是地址計算的結果,其下溢或溢出在架構上是未知的,因此雖然某些硬件可能會產生預期的地址,你絕對不應該依賴它。

在這種情況下,例如,如果初始sp是0x1000的,那麼你就必須存儲到地址0x0fe0..0xfe7(在當前字節順序適當的順序)所述第一寄存器(x29)的字節,第二個字節(x30)存儲到0xFE8..0xfef,最後0xFE0寫回sp