AF、PF 在现代 asm 中的使用

Uses of the AF, PF in modern asm

我浏览了一下,好像PFAF很少用到,对于像我这样的初学者来说,基本上可以忽略,因为它们很少用到过来。据我发现,用例似乎是:

除了不明显的情况,这两个标志是不是可以忽略不计?或者有没有什么时候我应该阅读这些标志并利用它们?

示例:

# AF (CF on 4th bit)
mov [=10=]b1000, %eax
add [=10=]b1000, %eax # [ AF ]


# PF (num 1's is a multiple of two)
inc %eax # [ PF ]

Except for obscure cases ...

取决于你所谓的“晦涩难懂”:

AF标志用于早期CPUs支持的BCD计算(在x86的情况下:8088)主要用于计算器:

早期 CPUs 没有 floating-point 支持(在 x86 CPUs 的情况下,您可以添加一个单独的 x87 FPU,它比计算机本身更昂贵),如果输入(从键盘)和输出(到显示器)都以十进制系统给出,则 BCD 算法是执行 floating-point 计算的简单方法。

我记得2000年左右物理计算的一些特殊的PASCAL方言使用BCD算术计算high-precision计算

PF 标志可用于 硬件访问的某些情况:

当通过一些早期的 RS-232 端口发送带有奇偶校验的 7 位数据字时,您实际上必须发送一个 8 位字(没有额外的奇偶校验);第 8 位是必须由 CPU 计算的奇偶校验位。使用 PF 标志计算这个位很容易!

... in modern asm ...

Or is there ever a time when I should be reading these flags and making use of them?

据我所知,即使在 x86 早期,AF 标志也根本不会被读取 CPUs:

该标志仅用作 BCD 运算的输入(就像 CF 标志是 sbbadc 指令的输入一样);然而,与 CF 标志不同的是,它并不打算直接“读取”AF(使用条件跳转操作)。

所以即使是早期的 x86 程序员也不关心 AF 标志,但该标志仅在 BCD 算法完成时由 CPU 在“后台”使用。

使用现代操作系统(例如 Linux 和 Windows)只有设备驱动程序才能访问硬件;大多数现代硬件(例如 RS-232 端口)都能够计算硬件中的奇偶校验。

因此通常也不需要使用 PF 标志。