【发布时间】: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。非常感谢。