對(duì)ARM堆棧的理解
向上生長(zhǎng):堆棧指針向高地址方向生長(zhǎng),稱(chēng)為遞增堆棧。
向下生長(zhǎng):堆棧指針向低地址方向生長(zhǎng),稱(chēng)為遞減堆棧。
對(duì)于堆棧來(lái)說(shuō),可以進(jìn)行插入或者刪除操作的一端稱(chēng)為棧頂,相應(yīng)的,另一端稱(chēng)為棧底,由于堆棧只允許在一端進(jìn)行操作,因而按照后進(jìn)先出的原理進(jìn)行運(yùn)作。堆棧指針指向最后一個(gè)壓入堆棧的有效數(shù)據(jù)項(xiàng)。
為什么說(shuō)“向上生長(zhǎng)或向下生長(zhǎng)”呢,這是一個(gè)習(xí)慣的問(wèn)題,一般畫(huà)堆棧示意圖,習(xí)慣上把低地址畫(huà)在下面,高地址畫(huà)在上面,如下圖所示:
ARM中,雖然對(duì)兩種方式的堆棧均支持,但是一般程序編譯器僅支持一種方式,即從上往下生長(zhǎng),滿足滿遞減的方式(堆棧通過(guò)減小存儲(chǔ)器的地址向下增長(zhǎng),堆棧指針指向含有有效數(shù)據(jù)項(xiàng)的最低地址),所以一般會(huì)使用LDMFD,STMFD等指令。
評(píng)論