Why "or ah,ah"?

5
我正在尝试逐渐进入操作系统开发以便进行实验。 这篇教程有一段汇编代码可以等待驱动器准备好:
reset_drive:
   mov ah, 0
   int 13h
   or ah, ah
   jnz reset_drive

在中断后,如果设备准备就绪,ah 将为零。但 or ah,ah 这段代码是什么意思?看起来有点多余...它似乎什么也没做(至少根据我的逻辑)。它是用来做什么的?


1
这是一个效率低下的替代方案,与test ah,ah相比非常糟糕,特别是对于高8位寄存器来说更是如此,因为在Intel CPU上写入它们会导致部分寄存器合并问题,即使是Skylake也是如此。 - Peter Cordes
1个回答

12

根据ah是否为零,它将设置/取消设置零标志。

根据标志的状态,jnz reset_drive会跳转:仅当ah不为零时才会跳转。

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


哦,哇。我不知道ZF。谢谢你的快速回答! - Matthew Sainsbury
2
@Matt 欢迎,基本上所有的算术操作都会设置/取消 ZF 和其他标志位,这不仅限于 or - phant0m
我有使用dcpu-16汇编器的经验,但对x86不太熟悉。dcpu要容易理解得多。 - Matthew Sainsbury

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接