quinta-feira, 29 de outubro de 2009

[OC] G2 - Aula 2 (apenas um filtro)

Registradores de Controle

Neste grupo temos dois registradores:

IP - ponteiro de instruções, contém o deslocamento (em
relação ao segmento de codigo apontado por CS) da
próxima instrução a executar. Este registrador
não é acessivel diretamente, sendo manipulado
pelas instruções de desvio.

"F" - este registrador ("flags") contém vários bits que
são utilizados pelo 8088 para indicar resultados
ou controlar operações:

indicadores de resultado

AF - "vai um" auxiliar, utilizado em opera-
ções sobre números no formato "BCD
compactado".

CF - "vai um" ("carry"), indica que o resul-
tado de uma operação não coube na área
destinada. Usado tambem nas instruções
de deslocamento e rotação.

OF - "overflow", indica que o resultado de
uma operação aritmética com sinal não
coube na área destinada.

PF - paridade, contém "1" quando o resultado
da última operação continha um número
par de "1"s.

SF - sinal, corresponde ao bit mais signifi-
cativo do resultado da última operação.

ZF - zero, indica se o resultado da última
operação foi zero.

flags de controle

DF - controla as operações de manipulação de
cadeias, selecionando autoincremento
("0") ou autodecremento ("1").

IF - habilita ("1") ou desabilita ("0")
interrupções externas

TF - quando em "1" coloca o processador no
modo "passo a passo", usado para
depuração.


==================
CMP - Comparação
==================

Codificação:

CMP reg,reg
CMP mem,reg
CMP reg,mem
CMP reg,imed
CMP mem,imed

Operação:

A instrução CMP posiciona os flags de forma equivalente
a uma subtração sem alterar os operandos.

Flags Afetados

AF, OF, PF, SF e ZF

Exemplos:

CMP CX,DX
CMP MATRIZ[BX],BP
CMP SP,VARIAVEL
CMP SI,50
CMP VARIAVEL,3

========================
JE/JZ - Desvia se Zero
========================

Codificação:

JE rótulo
JZ rótulo

Operação:

Se ZF = 1, soma a IP a distância (-128 a +127, contida
na instrução) entre o operando e a instrução seguinte.

Flags Afetados

nenhum

Comentários

O mnemônico JE corresponde a "desvio se igual" e é
normalmente utilizado após uma instrução CMP; JZ signi-
fica "desvio se zero" e é normalmente utilizado após
uma instrução aritmética ou lógica. Os dois mnemônicos
correspondem à mesma instrução.



==============================
JNE/JNZ - Desvia se não Zero
==============================

Codificação:

JNE rótulo
JNZ rótulo

Operação:

Se ZF = 0, soma a IP a distância (-128 a +127, contida
na instrução) entre o operando e a instrução seguinte.

Flags Afetados

nenhum

Comentários

O mnemônico JNE corresponde a "desvio se diferente" e é
normalmente utilizado após uma instrução CMP; JNZ
significa "desvio se não zero" e é normalmente utili-
zado após uma instrução aritmética ou lógica. Os dois
mnemônicos correspondem à mesma instrução.

============================
JB/JNAE - Desvia se Abaixo
============================

Codificação:

JB rótulo
JNAE rótulo

Operação:

Se CF = 1, soma a IP a distância (-128 a +127, contida
na instrução) entre o operando e a instrução seguinte.

Flags Afetados

nenhum

Comentários

Os mnemônicos JB ("desvio se abaixo") e JNAE ("desvio
se não acima ou igual") correspondem à mesma instru ção,
sendo normalmente utilizados após uma comparação entre
números SEM sinal.



================================
JNB/JAE - Desvia se não Abaixo
================================

Codificação:

JNB rótulo
JAE rótulo

Operação:

Se CF = 0, soma a IP a distância (-128 a +127, contida
na instrução) entre o operando e a instrução seguinte.

Flags Afetados

nenhum

Comentários

Os mnemônicos JNB ("desvio se não abaixo") e JAE
("desvio se acima ou igual") correspondem à mesma
instrução, sendo normalmente utilizados após uma compa-
ração entre números SEM sinal.

===========================
JA/JNBE - Desvia se Acima
===========================

Codificação:

JA rótulo
JNBE rótulo

Operação:

Se ZF=0 e CF=0, soma a IP a distância (-128 a +127,
contida na instrução) entre o operando e a instrução
seguinte.

Flags Afetados

nenhum

Comentários

Os mnemônicos JA ("desvio se acima") e JNBE ("desvio se
não abaixo ou igual") correspondem à mesma instrução,
sendo normalmente utilizados após uma comparação entre
números SEM sinal.



===============================
JNA/JBE - Desvia se não Acima
===============================

Codificação:

JNA rótulo
JBE rótulo

Operação:

Se ZF=1 ou CF=1, soma a IP a distância (-128 a +127,
contida na instrução) entre o operando e a instrução
seguinte.

Flags Afetados

nenhum

Comentários

Os mnemônicos JNA ("desvio se não acima") e JBE
("desvio se abaixo ou igual") correspondem à mesma
instrução, sendo normalmente utilizados após uma compa-
ração entre números SEM sinal.

===========================
JL/JNGE - Desvia se Menor
===========================

Codificação:

JL rótulo
JNGE rótulo

Operação:

Se SF<>OF, soma a IP a distância (-128 a +127, contida
na instrução) entre o operando e a instrução seguinte.

Flags Afetados

nenhum

Comentários

Os mnemônicos JL ("desvio se menor") e JNGE ("desvio se
não maior ou igual") correspondem à mesma instrução,
sendo normalmente utilizados após uma comparação entre
números COM sinal.



===============================
JNL/JGE - Desvia se não Menor
===============================

Codificação:

JNL rótulo
JGE rótulo

Operação:

Se SF=OF, soma a IP a distância (-128 a +127, contida
na instrução) entre o operando e a instrução seguinte.

Flags Afetados

nenhum

Comentários

Os mnemônicos JNL ("desvio se não menor") e JGE
("desvio se maior ou igual") correspondem à mesma
instrução, sendo normalmente utilizados após uma compa-
ração entre números COM sinal.

===========================
JG/JNLE - Desvia se Maior
===========================

Codificação:

JG rótulo
JNLE rótulo

Operação:

Se ZF=0 e SF=OF, soma a IP a distância (-128 a +127,
contida na instrução) entre o operando e a instrução
seguinte.

Flags Afetados

nenhum

Comentários

Os mnemônicos JG ("desvio se maior") e JNLE ("desvio se
não menor ou igual") correspondem à mesma instrução,
sendo normalmente utilizados após uma comparação entre
números COM sinal.



===============================
JNG/JLE - Desvia se não Maior
===============================

Codificação:

JNG rótulo
JLE rótulo

Operação:

Se ZF=1 ou SF<>OF, soma a IP a distância (-128 a +127,
contida na instrução) entre o operando e a instrução
seguinte.

Flags Afetados

nenhum

Comentários

Os mnemônicos JNG ("desvio se não maior") e JLE
("desvio se menor ou igual") correspondem à mesma
instrução, sendo normalmente utilizados após uma compa-
ração entre números COM sinal.



Exemplo

mov ax, 5
mov bx, 1
L1: cmp ax, 0 //compara 0 com o valor em ax
je L2 //pula p/ L2 se 0==ax (je – pula se igual)
mul bx, ax // bx = bx*ax
dec ax //decrementa eax
jmp L1 // pulo incondicional para L1
L2: ret

Nenhum comentário:

Postar um comentário