Aula 3 – MSC - Instrução Condicional
MAC 110/115 – Python - Marcilio
Aula 3 – MSC - Instrução Condicional
Considere o MSC:
Modelo Simplificado de Computador:
Vimos até agora os 3 tipos de instruções básicas:
a) Entrada (leia) b) Saída (imprima)
c) Atribuição (com ou sem expressões aritméticas)
Vimos também que o Processador Central possui internamente a unidade aritmética e lógica.
A instrução condicional
Além das operações aritméticas já vistas, é possível também realizar operações lógicas, ou seja, comparar valores de expressões aritméticas.
Vamos então ao quarto tipo de instrução do MSC, a instrução condicional. Essa instrução permite que após a comparação entre 2 valores o MSC, decida se executa ou não um determinado conjunto de instruções.
Indicaremos isso da seguinte forma:
Aula 3 – MSC - Instrução Condicional
MAC 110/115 – Python - Marcilio
Dispositivo de Saida
Dispositivo de Entrada
Processador Central
Memória
Processador Central Indicador de Instrução
Unidade Lógica e Aritmética
Aula 3 – MSC - Instrução Condicional
MAC 110/115 – Python - Marcilio
se comparação
então comandos-1 senão comandos-2
Estamos dizendo que se a comparação for verdadeira o MSC deve executar os comandos-1. Caso seja falsa, o MSC deve executar os comandos-2.
Uma comparação é feita entre 2 expressões aritméticas, com os comparadores maior >, menor <, igual =, diferente ‡, maior ou igual ≥ e menor ou igual ≤.
x > y x > 0 a + b ≥ z a – 1 = x * y
Vamos resolver alguns problemas usando a instrução condicional do MSC.
P3.1) Dados 2 números (supor distintos) calcular o maior.
leia a, b se a > b
então imprima a senão imprima b Outra forma:
leia a, b se a > b
então maior ← a senão maior ← b imprima maior
P3.2) Idem, supondo que podem ser iguais. Neste caso imprimir “iguais”
leia a, b se a > b
então imprima a senão se b > a
então imprima b
senão imprima “iguais”
Outra forma:
leia a, b se a = b
então imprima “iguais”
senão se a > b
então imprima a senão imprima b
P3.3) Dados 2 números imprimi-los em ordem crescente (quando o primeiro é menor ou igual ao segundo).
leia a, b se a ≤ b
Aula 3 – MSC - Instrução Condicional
MAC 110/115 – Python - Marcilio
Aula 3 – MSC - Instrução Condicional
MAC 110/115 – Python - Marcilio
então imprima a, b senão imprima b, a
P3.4) Idem, verificando se são iguais e imprimindo “iguais” neste caso.
leia a, b se a < b
então imprima a, b senão se b < a
então imprima b, a senão imprima “iguais”
A linguagem de máquina para as instruções condicionais
Quando fazemos uma comparação (usando a instrução se), basta comparar o resultado da subtração dos mesmos com zero. Por exemplo, x > y é o mesmo que x – y > 0.
O tratamento de uma instrução condicional pelo MSC consiste em executar um trecho de programa em vez de outro, caso a comparação seja verdadeira ou falsa. Ou seja, executar um trecho e pular o outro. Precisamos então de instruções de desvio para um determinado ponto do programa.
Como as operações aritméticas são feitas usando o Acumulador, vamos definir as instruções de desvio baseadas no valor do Acumulador: São as seguintes:
Desvia se o valor do Acumulador for maior que zero – código 52 Desvia se o valor do Acumulador for maior ou igual a zero – código 53 Desvia se o valor do Acumulador for diferente de zero – código 54 Desvia se o valor do Acumulador for igual a zero – código 55 Desvia se o valor do Acumulador for menor que zero – código 56 Desvia se o valor do Acumulador for menor ou igual a zero – código 57 Precisamos também de uma instrução de desvio incondicional – código 51 Considere agora o problema P3.1 novamente:
P3.1) Dados 2 números (supor distintos) calcular o maior.
leia a, b se a > b
então imprima a senão imprima b
Vamos traduzi-lo para linguagem de máquina, supondo que a e b ocupam respectivamente os endereços 500 e 501 e que o programa comece na posição 100:
Instrução em Linguagem Simbólica
Posição de Memória
Instrução em Linguagem de Máquina
Descrição
leia a, b 100 31500 leia e armazene na posição 500 101 31501 leia e armazene na posição 501 se a > b 102 11500 carregue o conteúdo da posição 500
103 22501 subtraia o conteúdo da posição 501 104 57107 desvie para 107 se Acumulador ≤ 0 então imprima a 105 41500 imprima o conteúdo da posição 500 Aula 3 – MSC - Instrução Condicional
MAC 110/115 – Python - Marcilio
Aula 3 – MSC - Instrução Condicional
MAC 110/115 – Python - Marcilio
106 51108 desvie incondicionalmente para 108
senão imprima b 107 41501 imprima o conteúdo da posição 501 108
109 110 111
Conclusão
Para codificar as instruções condicionais em linguagem de máquina, precisamos apenas das instruções de desvio definidas acima. Toda comparação pode ser reduzida a uma comparação com zero e, portanto além do desvio incondicional bastam desvios condicionais baseados na comparação com o valor zero.
Aula 3 – MSC - Instrução Condicional
MAC 110/115 – Python - Marcilio