为什么"或啊,啊"?

Mat*_*ury 5 x86 assembly

我正慢慢地试图进入osdev只是为了玩.

本教程有一个程序集等待驱动器准备就绪:

reset_drive:
   mov ah, 0
   int 13h
   or ah, ah
   jnz reset_drive
Run Code Online (Sandbox Code Playgroud)

我知道在中断之后,ah如果设备准备好,它将为零.但是做了or ah,ah什么?似乎有点多余......似乎什么都不做.(至少按照我的逻辑)它做了什么?

pha*_*t0m 12

它根据是否ah为零来设置/取消设置ZERO标志.

根据标志的状态,jnz reset_drive会跳转:只有当ah为零.

换句话说,它等待设备准备就绪,因为它在ah变为零后停止重复.

  • @Matt欢迎,基本上所有算术运算都设置/取消设置`ZF`和其他标志,这不是`或`的独占. (2认同)