2012-01-06 21 views
3

嗯,我和一個朋友正在研究一個項目,我們碰到了一個跳躍,接着是一個nop ....是否有理由在打電話之後休息一下?由NoOperation指令進行跳轉的原因是什麼?

該nop是在代碼的末尾,它會準備處理器閒置?

+2

什麼架構?沒有這個事實,我們都在猜測。 – bmargulies 2012-01-06 00:52:25

+1

澄清 - 這是一個跳躍還是一個呼叫,並且是之前還是之後的nop? – 2012-01-06 01:13:45

回答

2

根據彙編器的體系結構,它可以在那裏對齊下面的函數的地址,或者它可以防止正在運行的下一條指令(我相信MIPS會這樣做)。在用於本地內存池(ARM)的函數之後,您有時還會看到一個nop和一堆隨機數據。

+0

SPARC有*分支延遲指令*。 – 2012-01-06 00:52:43

+0

intel X86,實際上是286,使用MASM語法。 – iDomo 2012-01-06 00:55:38

+0

然後它可以是功能指令對齊,也可以是@Mitch的短跳轉或近跳轉解釋(我向他的卓越心理能力鞠躬) – 2012-01-06 00:58:44

3

它實際上是一個短跳轉,編碼爲近跳嗎?

如果是,則短跳轉(3個字節)將填充到第三個字節中。如果在編碼時,彙編程序知道短跳轉的跳轉位置實際上是一個近跳,它會將其編碼爲近跳。但是已經爲短跳轉保留了3個字節,它將需要填充NOP。

相關問題