Usos do AF, PF em asm modernas

Sep 27 2020

Eu fiz alguma navegação e parece que o PFe AFsão muito raramente usados, e para um iniciante como eu, basicamente pode ser ignorada como eles raramente ou nunca virá à tona. Pelo que descobri, parece que os casos de uso são:

  • Decimal codificado em binário para AF:https://stackoverflow.com/a/19301682/12283181.
  • PF quase nunca usado, um caso de uso de troca de bits: https://stackoverflow.com/a/25707223/12283181. Fora isso, parece que quase nunca:https://stackoverflow.com/a/43433515/12283181.

Exceto em casos obscuros, essas duas bandeiras podem ser ignoradas? Ou haverá um momento em que devo ler essas sinalizações e usá-las?

Exemplos:

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


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

Respostas

2 MartinRosenau Sep 27 2020 at 14:49

Exceto para casos obscuros ...

Depende do que você chama de "obscuro":

A AFbandeira é usada para cálculos BCD que eram suportados pelas primeiras CPUs (no caso do x86: o 8088) principalmente para ser usado em calculadoras :

As primeiras CPUs não tinham suporte de ponto flutuante (no caso de CPUs x86 você poderia adicionar um FPU x87 separado, que era mais caro do que o próprio computador), e a aritmética BCD era um método simples para realizar cálculos de ponto flutuante se ambas as entradas (do teclado) e a saída (para o display) foi dada no sistema decimal.

Lembro-me de alguns dialetos PASCAL especiais para cálculos de física por volta do ano 2000 usando cálculos aritméticos BCD para cálculos de alta precisão.

O PFsinalizador pode ser usado para alguns casos de acesso ao hardware :

Ao enviar uma palavra de dados de 7 bits com paridade por algumas portas RS-232 anteriores, você realmente tinha que enviar uma palavra de 8 bits (sem paridade adicional); o 8º bit era a paridade que precisava ser calculada pela CPU. Usar a PFbandeira para calcular este bit é fácil!

... na asm moderna ...

Ou haverá um momento em que devo ler essas sinalizações e usá-las?

Pelo que eu sei, a AFsinalização não foi feita para ser lida, mesmo nas primeiras CPUs x86:

O sinalizador foi usado apenas como entrada para operações BCD (assim como o CFsinalizador é uma entrada para as instruções sbbe adc); no entanto, ao contrário do CFsinalizador, não se destinava a "ler" AFdiretamente (usando uma operação de salto condicional).

Portanto, mesmo os primeiros programadores de x86 não se importavam com a AFsinalização, mas ela só era usada pela CPU no "fundo" quando a aritmética BCD era feita.

Usando sistemas operacionais modernos (como Linux e Windows), apenas drivers de dispositivo acessam o hardware; e a maioria dos hardwares modernos (por exemplo, portas RS-232) são capazes de calcular a paridade no hardware.

Portanto, usar o PFsinalizador normalmente também não é necessário.