2012-10-20 38 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 
相关问题