2015-12-16 70 views
3

在逆向工程中的IDE控制器選項ROM的過程中,我注意到,每inout指令後跟兩個jmp short指令簡單地跳轉到下一個指令(操作碼EB00),像這樣:目的JMP港後短的I/x86彙編Ø

out dx, al 
    jmp short next1 
next1: 
    jmp short next2 
next2: 
    ; code continues 

到底是什麼這種模式背後的原因?

+6

提供一個小的延遲。它曾經是需要在訪問其端口之間延遲的設備。在8086上,每個跳轉都需要15個週期才能執行。 –

回答

8

爲了讓I/O設備能夠在下一個數據到達之前處理髮送給它的先前數據,當CPU開始以比I/O設備能夠處理的速度更快的速度運行時。它被頻繁地用於PIT定時器(8253),其中需要兩個8位OUT來在芯片的三個定時器之一中寫入一個16位值。

此外,這是必要的,因爲原來的PC架構沒有使用READY信號來停止CPU,直到I/O設備處理完數據,因此必須用軟件來執行等待。 JMP非常適合,因爲它引入了一個隊列刷新,所以CPU浪費了一些執行實際跳轉的週期。