next up previous contents
Next: Expressões Condicionais Up: Linguagem Assembly do 8086 Previous: Introdução e Objectivos

Saltos, Flags e Saltos Condicionais

Como já foi dito numa sessão anterior, o registo CS (Code Segment Register) contém os 16 bits mais significativos do endereço físico onde começa o segmento de código. Esse segmento contém os códigos binários das instruções que constituem o programa que está a ser executado. O registo IP (Instruction Pointer Register) referencia dentro do segmento de código qual é a próxima instrução a ser executada, ou seja, o seu valor representa o deslocamento em relação ao CS que tem a próxima instrução.

Se o programa em causa for uma simples sequência de instruções o endereço da próxima instrução a executar é sempre o imediatamente a seguir à instrução anterior. Isto já não é assim se o programa contiver saltos (jumps).

As instruções JMP são usadas para indicar ao processador que a próxima instrução a executar não é a que está imediatamente a seguir mas sim outra. Existem jumps condicionais que ocorrem se uma determinada condição se verificar e jumps incondicionais que ocorrem sempre, sem estarem sujeitos a qualquer condição.

O 8086 calcula o endereço físico da próxima instrução a executar adicionando o deslocamento contido no registo IP ao endereço de base representado pelo número contido no registo CS. Quando o 8086 executa a instrução JMP, carrrega um novo número (deslocamento) no registo IP e por vezes também um novo número no registo CS.

O 8086 tem seis flags condicionais: a carry flag (CF), a parity flag (PF), a auxiliary parity flag (AF), a zero flag (ZF), a sign flag (SF) e a overflow flag (OF).

As várias instruções do Assembly 8086 alteram os valores das várias flags, por exemplo, quando se somam dois números de 16 bits e o resultado não cabe em 16 bits a CF fica com o valor 1.

Como já foi referido um jump condicional está sujeito a uma determinada condição. A instruções que especificam jumps condicionais analisam o conteúdo de determinadas flags para decidir se o jump se faz ou não,

Todos os jumps condicionais são do tipo short, isto significa que o destino tem de especificar um endereço dentro do mesmo segmento da instrução JMP e além disso o deslocamento em relação à localização actual varia apenas de 127 a -128.

Estas instruções aparecem normalmente depois de instruções de operações aritméticas e lógicas (que alteram os valores das flags), e quase sempre depois da instrução CMP.

Esta instrução é muitas vezes usada com as seguintes instruções que implementam jumps condicionais:

Os termos above e below utilizam-se quando queremos comparar números sem sinal. Os termos greater e less utilizam-se quando queremos comparar números com sinal.

Além destas instruções, existem outras que fazem depender os jumps directamente dos valores das flags. São elas:


next up previous contents
Next: Expressões Condicionais Up: Linguagem Assembly do 8086 Previous: Introdução e Objectivos
Maria Joao Nicolau
1/28/1999