【问题标题】:What does ".UNTIL !ZERO?" mean in x86 asm?“.UNTIL !ZERO”是什么意思?在 x86 asm 中是什么意思?
【发布时间】:2017-06-04 21:56:05
【问题描述】:
SENDS PROC NEAR
MOV CX,16
.REPEAT
   .REPEAT
      IN AL,CSTAT
      TEST AL,20H
   .UNTIL !ZERO?
   LODSB
   OUT DATA,AL
.UNTILCXZ

RET

这是一个 x86 asm 程序,用于 PC16550D 读取 16 个字节。外循环重复 16 次。检查 CSTAT 以查看是否接收到数据。 在“.UNTIL !ZERO?”中,ZERO 是指零标志吗? “?”是什么意思?和 ”!”什么意思?

【问题讨论】:

  • 那些不是 x86 指令。这看起来像是某种宏汇编器。
  • 看起来特别像 MASM。
  • 点指令被添加到 MASM 6.11(实际上是 ML.EXE,6.00 之后的任何版本)早在 MSDOS 6.22 时代(可能之前)。序列 | .重复 | ... | .直到!零?|在 .REPEAT 之后生成一个 jz 以循环回代码。当 TEST AL,20H 导致零标志被清除(当 AL 位 5 设置时)时,循环退出。点指令的目的之一是减少源代码中局部标签的数量。
  • @rcgldr 在您的指导下,我找到了this。非常感谢。

标签: assembly x86 masm


【解决方案1】:

这是一个在未设置零标志时匹配的后测试循环条件。

.UNTIL directive.REPEAT block 结尾,语法为:.UNTIL condition

在有问题的情况下!ZERO? 是条件。这是一个有 2 个运算符的表达式。 ! operator 是逻辑否定。 ZERO? operator 检查零标志的状态。结合他们检查未设置的零标志。

【讨论】:

    猜你喜欢
    • 2011-01-03
    • 2021-09-13
    • 2011-08-12
    • 2017-06-11
    • 2018-03-05
    • 2023-03-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多