2012-10-30 32 views
0

我正在編寫一個程序來打印出一個32位數字,我正在考慮將每個數字存儲在堆棧上,以利用其後進先出功能。這引起了一個問題,我可以在堆棧上存儲32位數字嗎?nasm在堆棧上存儲的程序集限制

我的問題是,我可以在堆棧上存儲多少位數的信息?我可以推入堆棧的東西數量的限制是多少?我可以存儲64位數字嗎? 128?一些任意長度?

由於提前,

Rileyh

+0

digit?位???在組裝中,您不會推動堆疊,而是推動整個數字。並且不能推送1個字節,至少1個字。 – jondinham

回答

1

它實際上並不是nasm指示這一點,更多的是你使用的鏈接器。所有nasm確實是創建可以鏈接在一起的對象文件。

如果您使用的是Linux的ld鏈接器,您很可能會發現您的默認堆棧爲2M。

因此,不,32字節並不會對此產生太大的影響,即使你用完了堆棧,你也可以使用類似ld --stack 4194304的東西來改變它。

+0

很酷。說得通。我使用'ld'作爲鏈接器,所以我會牢記這一點。 – Progrmr

1

取決於操作系統和多一點你所使用的連接器上的一點點,但你應該罰款。默認情況下分配一個或更多兆字節的堆棧是很常見的,所以128個字節是沒有意義的。只要確保在返回之前重置堆棧指針,並且一切都應該沒問題。

如果您發現需要的數量超過默認值,您通常可以告訴鏈接器分配一定大小的堆棧。