微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

AF,PF在现代asm中的用途

如何解决AF,PF在现代asm中的用途

我已经进行了一些浏览,似乎PFAF很少使用,对于像我这样的初学者,基本上可以忽略不计,因为他们很少会出现。从我发现的用例来看:

除了晦涩难懂的情况外,这两个标志能否被全部忽略?还是曾经有一段时间我应该阅读这些标志并加以利用?

示例:

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


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

解决方法

除了晦涩的情况...

取决于您所说的“晦涩”:

AF标志用于BCD计算,早期的CPU(对于x86:8088)支持BCD计算,主要用于计算器

早期的CPU不支持浮点(对于x86 CPU,您可以添加单独的x87 FPU,这比计算机本身更昂贵),并且BCD算术是执行浮点计算的简单方法,如果输入(来自键盘)和输出(至显示器)均以十进制表示。

我记得在2000年左右,一些特殊的PASCAL方言用于物理计算,使用BCD算术计算进行高精度计算。

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

在一些早期的RS-232端口上以奇偶校验发送7位数据字时,实际上您必须发送8位字(无其他奇偶校验)。第8位是必须由CPU计算的奇偶校验。使用PF标志来计算此位很容易!

...在现代汇编中...

或者曾经有一段时间我应该阅读这些标志并加以利用?

据我所知,AF标志根本不打算在早期的x86 CPU中读取:

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

因此,即使早期的x86程序员也不关心AF标志,但是只有在完成BCD算术后,该标志才由CPU在“后台”使用。

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。