如何解决AF,PF在现代asm中的用途
我已经进行了一些浏览,似乎PF
和AF
很少使用,对于像我这样的初学者,基本上可以忽略不计,因为他们很少会出现。从我发现的用例来看:
-
AF
:https://stackoverflow.com/a/19301682/12283181的二进制编码的十进制。 -
PF
几乎从未使用过,一种交换位的使用案例:https://stackoverflow.com/a/25707223/12283181。除此之外,似乎几乎永远不会:https://stackoverflow.com/a/43433515/12283181。
除了晦涩难懂的情况外,这两个标志能否被全部忽略?还是曾经有一段时间我应该阅读这些标志并加以利用?
示例:
# 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
标志是sbb
和adc
指令的输入一样);但是,与CF
标志不同的是,它并非旨在直接(使用条件跳转操作)“读取” AF
。
因此,即使早期的x86程序员也不关心AF
标志,但是只有在完成BCD算术后,该标志才由CPU在“后台”使用。
使用现代操作系统(例如Linux和Windows)时,只有设备驱动程序才能访问硬件。并且大多数现代硬件(例如RS-232端口)都能够计算硬件中的奇偶校验。
因此通常也不需要使用PF
标志。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。