我正在慢慢嘗試進入osdev只是爲了玩耍。爲什麼「或啊,啊」?
This tutorial有一塊組件的那等待驅動器就緒:
reset_drive:
mov ah, 0
int 13h
or ah, ah
jnz reset_drive
我得到的中斷後,ah
將爲零,如果該設備已準備就緒。但or ah,ah
做什麼?似乎有點多餘......似乎什麼都不做。 (至少按我的邏輯)它有什麼作用?
我正在慢慢嘗試進入osdev只是爲了玩耍。爲什麼「或啊,啊」?
This tutorial有一塊組件的那等待驅動器就緒:
reset_drive:
mov ah, 0
int 13h
or ah, ah
jnz reset_drive
我得到的中斷後,ah
將爲零,如果該設備已準備就緒。但or ah,ah
做什麼?似乎有點多餘......似乎什麼都不做。 (至少按我的邏輯)它有什麼作用?
它根據ah
是否爲零來設置/取消ZERO標誌。
根據標誌的狀態,jnz reset_drive
會跳轉:只有當ah
是不爲零。
換句話說,它等待設備準備就緒,因爲它在ah
變爲零後停止重複。
哦哇。我不知道'ZF'。感謝您的快速回答! –
@Matt歡迎,基本上所有的算術運算都設置/取消設置'ZF'和其他標誌,這不是'or'所獨有的。 – phant0m
我有使用dcpu-16彙編器的經驗,但在x86上不太熱。 dcpu更容易理解 –
這是[低效的替代'測試啊,ah'](https://stackoverflow.com/a/33724806/224132),這對於高8寄存器尤其不利,因爲寫入它們會創建部分寄存器合併英特爾CPU甚至Skylake上的問題。 –