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

VCML0 - Visible Computer's Machine Language Level 0

VCML0 - Visible Computer's Machine Language Level 0

VCML0 é a linguagem mais simples suportada pelo Computador Visível.

Conjunto de Instruções da linguagem VCML0

A linguagem é composta por 7 instruções (STOP, LOAD, STORE, ADD, ACC, READ, WRITE). À exceção da instrução STOP, todas as outras instruções são formadas por duas partes, chamadas operador e operando. O operador é o nome da instrução ("STOP", "LOAD", "STORE", etc.), enquanto que o operando é um numeral natural (0, 1, 2, 3, etc.). Dependendo do tipo da instrução, o operando pode ser visto como um endereço de memória ou um valor numérico. O significado (semântica) de cada instrução é informalmente definido abaixo:

STOP
Encerra a execução do programa
LOAD endereco
Carrega no registrador acumulador o conteúdo da posição de memória indicada pelo operando endereco.
Por exemplo "LOAD 30" carrega no acumulador o conteúdo que está na posição de memória 30.
Formalmente poderiamos definir uma interpretação LOAD endereco como:
LOAD endereco == ACCUMULATOR := RAM[endereco]
STORE endereco
Armazena na posição de memória indicada pelo operando endereco o conteúdo que está no registrador acumulador
Por exemplo "STORE 31" armazena na posição de memória 31 o valor contido no acumulador.
Formalmente poderiamos definir uma interpretação STORE endereco como:
STORE endereco == RAM[endereco] := ACCUMULATOR
ADD endereco
Adiciona ao acumulador o conteúdo que está armazenado na posição de memória indicada pelo operando endereco. Por exemplo "ADD 32" adiciona ao acumulador o dado armazenado na posição de memória 32.
Formalmente poderiamos definir uma interpretação ADD endereco como:
ADD endereco == ACCUMULATOR := ACCUMULATOR + RAM[endereco]
ACC valor
Carrega no acumulador o valor do operando valor. Por exemplo "ACC 12" carrega no acumulador o valor 12.
Formalmente poderiamos definir uma interpretação ACC valor como:
ACC valor == ACC := valor
WRITE endereco
Copia para o dispositivo de saída de dados o conteúdo armazenado na posição de memória indicada pelo operando endereco.
Por exemplo "WRITE 30" imprime (no dispositivo de saída) o conteúdo que está na posição de memória 30.
Formalmente poderiamos definir uma interpretação WRITE endereco como:
WRITE endereco == OUTPUT := RAM[endereco]
READ endereco
Lê o próximo dado disponível no dispositivo de entrada de dados (teclado, por exemplo) e o armazena na posição de memória indicada pelo operando endereco. Por exemplo "READ 31" lê um dado digitado no teclado e o armazena na posição de memória 31.
Formalmente poderiamos definir uma interpretação READ endereco como:
READ endereco == RAM[endereco] := INPUT

Construção de Programas na Linguagem VCML0

Um programa em VCML0 é composto por uma seqüência de instruções separadas por ";". Um programa é armazenado em um arquivo texto. Adicionalmente é possível escrever comentários entre as instruções, que não são interpretados pelo computador, servido apenas para auxiliar à compreensão do programa por parte do programador. Comantários são definidos através da colocação do símbolo "//" em uma linha do texto do programa. Isto indica que todo o restante do conteúdo da linha não tem significado computacional. A tabela abaixo mostra alguns programas escritos em VCML0. Indicamos na coluna da esquerda o número da instrução, o que indica sua localização na memória.

LinhaProgramaEfeito do programa
1
2
3
4
ACC 123;    // carrega no acumulador o valor 123
STORE 10;    // armazena na posição de memória 10 o valor 123
WRITE 10;    // envia para o dispositivo de saída o valor 123
STOP;    // encerra a execução do programa
Imprimir o valor 123

 

1
2
3
4
5
6

ACC 123;    //carrega no acumulador o valor 123
STORE 10;    // armazena 123 na posicao 10
ADD 10;    // adiciona ao acumulador (que contém 123) o valor 123 (na RAM)
STORE 11;    // armazena em RAM[11] o valor do acumulador (256)
WRITE 11;    // escreve o valor de RAM[11] no dispositivo de saída
STOP;    // pára a execução do programa
Imprime o dobro de 123

 

1
2
3
4
5
6
7

READ 20;    // lê primeiro valor (V1) e armazena em 20
READ 21;    // lê segundo valor (V2) e armazena em 21
LOAD 20;    // carrega o primeiro valor (V1) no acumulador
ADD 21;    // adiciona ao acumulador o segundo valor (V1)
STORE 22;    // armazena em RAM[22] o valor do acumulador (V1+V2)
WRITE 22;    // escreve (V1+V2) no dispositivo de saída
STOP;    // pára a execução do programa
Imprime a soma de dois números quaisquer

Exercícios

  1. Escreva um programa que recebe tres números N1, N2 e N3, e imprime a soma da multiplicação do primeiro por 4, do segundo por 5 e do terceiro por 6. Isto é, imprime N1*4 + N2*5 + N3*6. Use adições repetidas para realizar uma multiplicação.
  2. Tente escrever o um programa que recebe dois números e calcula a multiplicação entre eles. Perceba que com o conjunto de instruções de VCML0 não é possível construir um programa que realiza uma multiplicação com valores arbitrários.

Jonathan Paulo Pinheiro Pereira, MSc
Professor - Informática - UFRN
Fonte:
Jorge Henrique Cabral Fernandes, DSc
Professor - DIMAp - UFRN