VCML1 - Visible Computer's Machine Language Level 1
VCML1 - Visible Computer's Machine Languagem Level 1
VCML1 é um superconjunto (extensão) de VCML0 ao qual são adicionadas duas instruçõesde desvio: JUMP (desvio incondicional) e JNZ - Jump If Not Zero (desvio condicional), além de uma instrução de subtração. Sendo assim, todo programa em VCML0 é um programa em VCML1, mas a recíproca não é verdadeira. VCML1 é suportada pelo Computador Visível.
Conjunto de Instruções da linguagem VCML1
Além das 7 instruções de VCML0 (STOP, LOAD, STORE, ADD, ACC, READ, WRITE), as instruções de desvio condicional e subtração são descritas abaixo:
- JUMP endereco
- Desvia a execução do programa para o endereço de memória definido pelo operando.
- JNZ
- Caso o valor presente no acumulador seja diferente de zero, desvia a execução do programa para PC+1. Caso contrário segue para executar a próxima instrução.
- SUB endereco
- Subtrai do acumulador o conteúdo que está armazenado na posição de memória indicada pelo operando endereco. Por exemplo "SUB 32" subtrai do acumulador o dado armazenado na posição de memória 32.
Formalmente poderiamos definir uma interpretação SUB endereco como:
SUB endereco == ACCUMULATOR := ACCUMULATOR - RAM[endereco]
Construção de Programas na Linguagem VCML1
Do mesmo modo que em VCML0, um programa em VCML1 é composto por uma seqüência de instruções separadas por ";", contendo possívels comentários.
A tabela abaixo mostra alguns programas escritos em VCML1.
Linha | Programa | Efeito do programa |
---|---|---|
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
READ 101; // lê um valor (V1) e armazena em 101 READ 102; // lê segundo valor (V2) e armazena em 102 ACC 1; // carrega no acumulador o valor 1 STORE 103; // armazena o valor 1 na posição 103 ACC 0; // zera o acumulador STORE 104; // armazena 0 na memória (será o contador) LOAD 101; // carrega V1 no acumulador JNZ 14; // desvia para o endereço fim, se o acumulador for zero SUB 103; // subtrai 1 de V1 STORE 101; // armazena o valor de V1 decrementado de 1 LOAD 104; // carrega RAM[104] no acumulador ADD 102; // adiciona ao contador o valor contido em V2 STORE 104; // armazena o resultado da soma em 104 JUMP 7; // continua subtraindo de V1 e acumulado em V2 WRITE 104; // escreve o valor da multiplicação STOP; // pára a execução do programa |
Imprimir a multiplicação entre os dois numeros recebidos |
Complexidade e Fluxogramas
No momento em que instruções de desvio são utilizadas o programa adquirir maior grau de complexidade, e muitas vezes é necessário empregar outras técnicas para visualizar o fluxo de execução de um programa, além da simples leitura do código.
Fluxogramas são um instrumento muito conhecido facilitar esta visualização. Veja na figura abaixo o fluxograma do programa de multiplização entre dois numeros.
Exercícios
- Construa um fluxograma e escreva um programa em VCML1 e que recebe tres números N1, N2 e N3, e imprime a multiplicação entre os três.
- Construa um fluxograma e escreva um programa em VCML1 que recebe dois numeros e imprime a potência do primeiro elevado ao segundo.
- Construa um fluxograma e escreva um programa em VCML1 que realiza a divisão inteira entre dois números
- Construa um fluxograma e escreva um programa em VCML1 que recebe dois numeros e imprime 0 se eles são diferentes e 1 se eles são iguais
Jonathan Paulo Pinheiro Pereira, MSc
Professor - Informática - UFRN
Fonte:
Jorge Henrique Cabral Fernandes, DSc
Professor - DIMAp - UFRN