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.
Linha | Programa | Efeito 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 |
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 |
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
- 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.
- 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