2012-12-22 45 views
5

我正在慢慢嘗試進入osdev只是爲了玩耍。爲什麼「或啊,啊」?

This tutorial有一塊組件的那等待驅動器就緒:

reset_drive: 
    mov ah, 0 
    int 13h 
    or ah, ah 
    jnz reset_drive 

我得到的中斷後,ah將爲零,如果該設備已準備就緒。但or ah,ah做什麼?似乎有點多餘......似乎什麼都不做。 (至少按我的邏輯)它有什麼作用?

+1

這是[低效的替代'測試啊,ah'](https://stackoverflow.com/a/33724806/224132),這對於高8寄存器尤其不利,因爲寫入它們會創建部分寄存器合併英特爾CPU甚至Skylake上的問題。 –

回答

12

它根據ah是否爲零來設置/取消ZERO標誌。

根據標誌的狀態,jnz reset_drive會跳轉:只有當ah爲零。

換句話說,它等待設備準備就緒,因爲它在ah變爲零後停止重複。

+0

哦哇。我不知道'ZF'。感謝您的快速回答! –

+2

@Matt歡迎,基本上所有的算術運算都設置/取消設置'ZF'和其他標誌,這不是'or'所獨有的。 – phant0m

+0

我有使用dcpu-16彙編器的經驗,但在x86上不太熱。 dcpu更容易理解 –

相關問題