Você está na página 1de 7

Cap4.

4. O registrador de sinalizadores (FLAGS)

4.1 Flags de Status e Flags de Controle


indica o estado do microprocessador aps a execuo de cada instruo; conjunto de bits individuais, cada qual indicando alguma propriedade; subdividem-se em: Flags de Estado (status) e Flags de Controle. organizao: 1 registrador de 16 bits 6 FLAGS de estado 3 FLAGS de controle 7 bits no utilizados (sem funo)

15 14 13 12

11 10 9 OF DF IF

8 7 TF SF

6 ZF

4 AF

2 PF

0 CF

Nome Carry Flag Parity Flag Auxiliary Carry Zero Flag Sign Flag Overflow Flag

Flags de estado Smbolo Funo/caracterstica CF Indicador de "vai-um" PF Indicador de nmero PAR de 1's no byte inferior AF Indicador de "vai-um" para operaes em BCD ZF Indicador de "zero" na ltima operao SF Indicador de resultado negativo OF Indicador de erro de transbordamento

Obs: o emprego dos Flags de Controle ser discutido juntamente com operaes com arrays e interrupes.

Cap4.2

4.2 Overflow (erro de transbordamento)

Overflow ->

ocorre porque a representao dos nmeros est limitada a uma certa faixa

Tipos No-sinalizado Sinalizado (C2)

8 bits 0 a 255 -128 a +127

16 bits 0 a 65.535 - 32.768 a + 32.767

Qualquer operao aritmtica que tenha como resultado um nmero fora da faixa de representao, estar produzindo Overflow. O resultado armazenado no registrador destino estar truncado e ter, portanto, um valor incorreto.

Tem-se dois Flags que podem indicar overflow: CF e OF CF -> indica se h um vai-um para fora do Bit Mais Significativo do nmero MSB (most significant bit) OF -> testa o vem-um que chega e o vai-um gerado no MSB: se iguais (0 e 0 ou 1 e 1) -> OF = 0 se diferentes, OF = 1

Cap4.3

Exemplos de operaes com 8 bits:

ADD AL,BL

;AL contem FFh e BL contem 01h

FFh 01h

1111 1111b + 0000 0001b 1 0000 0000b

->

repres. no-sinalizada repres. sinalizada 255 -1 + 1 +1 256 (fora da faixa) 0 (OK)

Logo aps a execuo da instruo: CF = 1 , indicado em negrito; OF = 0 , pois no MSB o "vem-um" igual ao "vai-um" (ambos 1).

ADD AL,BL

;ambos AL e BL contm 7Fh

7Fh 7Fh

0111 1111b + 0111 1111b 0 1111 1110b

->

repres. no-sinalizada 127 + 127 254 (OK)

repres. sinalizada + 127 + 127 254 (fora)

Logo aps a execuo da instruo: CF = 0 , indicado em negrito; OF = 1 , pois no MSB o "vem-um" diferente do "vai-um".

Portanto: representao no-sinalizada representao sinalizada

-> ->

Flag CF indica overflow; Flag OF indica overflow.

Cap4.4

4.3 Como as instrues afetam os Flags Algumas instrues, imediatamente aps a sua execuo: afetam todos os Flags; afetam apenas alguns; no afetam nenhum. Instruo MOV XCHG LEA ADD/SUB INC/DEC NEG Exemplos: ADD AX,BX FFFFh FFFFh FFFEh ;onde ambos AX e BX valem FFFFh 1111 1111 1111 1111 b 1111 1111 1111 1111 b 1 1111 1111 1111 1110 b CF = 1 PF = 0 AF = 1 SF = 1 ZF = 0 OF = 0 Flags afetados nenhum nenhum nenhum todos todos, exceto CF que no afetado todos, CF=1 se o resultado no for zero

Como resultado:

INC AL FFh 01h 100h

;onde AL contem FFh 1111 1111 b 1b 1 0000 0000 b CF = no afetado PF = 1 AF = 1 SF = 0 ZF = 1 OF = 0

Como resultado:

Cap4.5

O programa DEBUG O programa DEBUG do DOS prov um meio de depurao de programas em Linguagem Montadora e permite acompanhar a modificao do contedo de registradores (inclusive o de Flags). Escrevendo um programa de teste e verificao dos Flags:

TITLE PROGRAMA PARA VERIFICACAO DOS FLAGS ; ;usado no DEBUG para verificar o registradores de Flags ; .MODEL SMALL .STACK 100H .CODE MOV AX,4000H ;AX = 4000h - valor inicial de AX ADD AX,AX ;AX = 8000h (4000h + 4000h = 8000h) SUB AX,0FFFFH ;AX = 8001h (8000h - FFFFh = 8001h) NEG AX ;AX = 7FFFh (C2 de 8001h) INC AX ;AX = 8000h (7FFFh + 0001h = 8000h) MOV AH,4CH INT 21H ;saida para o DOS END

Acesso ao DEBUG: C:\ DEBUG <nome_do_programa>.EXE alguns comandos de linha do DEBUG -r -> "registers", para exibir o contedo dos registradores -t -> "trace", para executar linha por linha -g -> "go", para ir at o fim -q -> "quit", para sair do DEBUG

Cap4.6

Tela do DOS rodando o DEBUG:

(aqui falta pgina colada com o programa extrado da tela do DOS: consulte a apostila do curso, disponvel no Xerox)

Cap4.7

Simbologia usada para os Flags no Programa Debug

Smbolo quando 1 Flag de Estado CF PF AF ZF SF OF Flag de Controle DF IF CY (carry) PE (parity even - PAR) AC (auxiliary carry) ZR (zero) NG (negativo) OV (overflow) DN (down - para baixo) EI (permite interrupo)

Smbolo quando 0 NC (no carry) PO (parity odd - IMPAR) NA (no aux. carry) NZ (no zero) PL (plus - positivo) NV (no overflow) UP (up - para cima) DI (desabilita interup.)

Você também pode gostar