Você está aqui: Página Inicial Disciplinas Organização e Manutenção de Computadores Material Complementar VCML1 - Visible Computer's Machine Language Level 1

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.

LinhaProgramaEfeito 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

  1. 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.
  2. Construa um fluxograma e escreva um programa em VCML1 que recebe dois numeros e imprime a potência do primeiro elevado ao segundo.
  3. Construa um fluxograma e escreva um programa em VCML1 que realiza a divisão inteira entre dois números
  4. 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