2012-10-20 114 views
1

我找到了一個編寫bootloader的教程。除了1條線以外,這一切都非常清楚。這是一些代碼。這是爲什麼這個程序集需要

Print: 
    lodsb 
    or al, al ;I don't get this line 
    jz PrintDone 
    mov ah, 0x0e 
    int 0x10 
    jmp Print 

它有一些清除int 0x10使用的寄存器的代碼。我唯一不明白的就是or al,al行。如果你自己或者什麼東西,你會得到你開始的對嗎?

如果有人能回答這個問題,我會永遠愛他們:)

+3

如果al爲零,那麼「or」可能確保設置z標誌。它在不修改al的情況下設置z標誌。 Lodsb爲al加載一個值,但不影響零標誌,因此需要另一條指令。 –

回答

3

的JZ指令,例外的是,當零標誌被設置跳轉只發生在JMP指令的形式。如果al爲零,則「OR AL,AL」設置零標誌。這比使用CMP比較更有效。

CMP AX,0  ;see if the number in ax is zero (zero flag set if so) 
OR AX,AX  ;this does exactly the same but uses 2 bytes instead of 3 
TEST AX,AX  ;again this is the same and uses only 2 bytes 
相關問題