You are on page 1of 20

Programao Bsica usando o

Computador Visvel
Jorge Fernandes
Maio de 2004

Organizao Geral de um
Computador de von Neumann
Hardware
Processador
Dispositivo
de Entrada 1
Dispositivo
de Entrada 2

Memria
(RAM)

Dispositivo
de
Sada 1
Dispositivo
de Sada 2

Dispositivo de Entrada e Sada (Hbrido)

Um Computador Visvel para


Entender como o Sofware Funciona
INPUT_DEVICE
Sinais de Controle (rd)

Fluxo de dados
MEM-Memria com Posies Endereaveis

mem[0] mem[1] mem[2] mem[3]


Fluxo de dados
mem[4] mem[5] mem[6] mem[7]
Processador
(CPU)
Sinais de controle
mem[8] mem[9] mem[10] mem[11]
(rd/wr)
mem[12] mem[13] mem[14] mem[15]

Sinais de Controle (wr)

Fluxo de dados
OUTPUT_DEVICE

Organizao interna do
Processador (CPU)
Registradores

CPU
wr
rd

Dados Memria (MDR)

Unidade
de Controle

Endereos Memria (MAR)


Acumulador (ACC)
Ponteiro de Instruo (IP)

add
sub UAL

Registrador Instruo (IR)

Operaes sobre Memria RAM (execute a


animao para ver ciclos de leitura e escritura)

DADO:

934428213
509
500
?
7
ENDEREO:

1002
1000
10
11
5
4
0
rd
rd
rd
wr
wr
rd
wr

mem[0]

500
mem[4]

509
mem[8]

mem[1.000]

7
500

mem[1]

7
mem[5]

934428213
mem[9]

mem[1.001]

mem[2]

mem[3]

-1
mem[6]

0
mem[7]

0
mem[10]

mem[11]

0
7

0
7

mem[1.002]

...

...

O Cenrio de Execuo
Programa
que o usurio
deseja executar

INPUT_DEVICE

Usurio

MEMRIA RAM
mem[0]

mem[1]

mem[2]

mem[3]

mem[4]

mem[5]

mem[6]

mem[7]

CPU

Registradores
Reg.Dados Memria (MDR)

wr
Unidade
de Controle
(UC)

rd

Reg. Endereos Memria (MAR)

Reg. Acumulador (ACC)

INPUT_DEVICE

Fluxo de Controle
Fluxo de Dados

Ponteiro de Instruo (IP)

add/sub
UAL

Registrador Instruo (IR)

Linguagem de Montagem IO LM_IO


Uma Linguagem para Entrada e
Sada de Dados
LM_IO

Conjunto de Instrues de
LM_IO
STOP
Encerra a execuo do programa.

INPUT pos
Le o valor contido no dispositivo de entrada e armazena
este valor na posio de memria pos.
MEM[pos] <= INPUT_DEVICE

OUTPUT pos
Copia o valor contido na posio de memria pos para
o dispositivo de sada de dados.
OUTPUT_DEVICE <= MEM[pos].

Linguagem de Montagem para


Clculos LM_CALC
uma Linguagem para Clculos
Matemticos Bsicos
LM_CALC
LM_IO

LM_CALC : Conjunto de
Instrues

STOP (j definida em LM_IO)


INPUT (j definida em LM_IO)
OUTPUT (j definida em LM_IO)
LOAD pos
Copia para o acumulador o valor contido na posio de memria
pos. ACC <= MEM[pos].

STORE pos
Copia para a posio de memria pos o valor contido no
acumulador. MEM[pos] <= ACC.

ADD pos
Calcula a soma entre o valor contido no acumulador e o valor
contido na posio de memria pos, armazenando o resultado no
Acumulador. ACC <= ACC + MEM[pos].

Um Programa Para Calcular a


Soma entre Dois Nmeros
O Objetivo Obter C = A + B, onde A e B so
informados pelo usurio
-- o texto que se segue aos dois traos (--) apenas comentrio
INPUT 0
-- l armazena A
INPUT 1
-- l e armazena B
LOAD 0
-- armazena A no acumulador
ADD 1
-- soma A com B
STORE 2
-- Armazena o resultado em C
OUTPUT 2
-- escreve C no dispositivo de sada
STOP
-- pra a execuo do programa

Perceba que o programa contm sete instrues

Programa Finalizado, reservando Espao na


Memria para Conter o Programa na Posio
0 e os dados aps o trmino do cdigo
INPUT 7
INPUT 8
LOAD 7
ADD 8
STORE 9
OUTPUT 9
STOP

-- MEM[7] a varivel (var) A


-- MEM[8] a varivel (var) B
-- Carrega var A no ACC
-- Soma a ACC o valor de var B
-- Armazena ACC na varivel C
-- Imprime valor da varivel C
-- pra execuo

O Programa Carregado na
Memria RAM
Instrues
INPUT 7
MEM[0]

INPUT 8
MEM[1]

STORE 9
MEM[4]

MEM[2]

OUTPUT 9
MEM[5]

LOAD 7

ADD 8
MEM[3]

STOP
MEM[6]

A
MEM[7]

MEM[8]

MEM[9]

MEM[10]

MEM[12]

MEM[13]

MEM[14]

MEM[11]

MEM[15]

Dados (Variveis)

Linguagem de Montagem 1 LM_1


Obtendo Capacidade
Computacional Plena
LM_1
LM_CALC
LM_IO

LM_1: Uma linguagem com Poder


Computacional Pleno

STOP (j definida em LM_IO)


INPUT (j definida em LM_IO)
OUTPUT (j definida em LM_IO)
LOAD pos (j definida em LM_CALC)
STORE pos (j definida em LM_CALC)
ADD pos (j definida em LM_CALC)
JMP pos
Desvia a execuo do programa para que a prxima instruo a ser
executada seja a contida na posio pos

JNZ - Desvie se Acumulador no 0


Se o valor contido no acumulador igual a 0 (zero) ento desvia a
execuo do programa a posio pos. Caso contrrio a execuo
continua inalterada

Mais trs Instrues que


Facilitam a Construo de
Programas
SUB pos
Calcula a diferena entre o valor no acumulador e o valor na
posio pos, armazenando o resultado no Acumulador. ACC <=
ACC - MEM[pos].

ACC valor
Armazena no acumulador o valor indicado
Exemplo ACC 500 armazena no acumulador o valor 500

JNEG pos - Desvie se Acumulador negativo


Se o valor contido no acumulador menor que 0 (zero) ento
desvia a execuo do programa a posio pos. Caso contrrio a
execuo continua inalterada

Sumrio do Conjunto de
Instrues LM_1
INPUT x
MEM[x] <- INPUT_DEVICE

OUTPUT x
OUTPUT_DEVICE <- MEM[x]

STOP
Pra execuo do programa

LOAD x
ACC <- MEM[x]

STORE
MEM[x] <- ACC

ADD x
ACC <- ACC + MEM[x]

SUB
ACC <- ACC - MEM[x]

JMP
IP <- x

JNZ x
Se ACC == 0 ento IP <- x

JNEG x
Se ACC < 0 ento IP <- x

ACC x
ACC <- x

Exerccios
Construa, usando a linguagem LM_1, um
programa que Calcula a Multiplicao entre Dois
Nmeros atravs de somas sucessivas
Construa, usando a linguagem LM_1, um
programa que Calcula o Quadrado de um Nmero
Construa, usando a linguagem LM_1, um
programa que Calcula o Resto da Diviso entre
Dois Nmeros atravs do mtodo de subtraes
sucessivas

Multiplica dois Nmeros (primeira tentativa programa com


BUG, porque a leitura destri as quatro primeiras instrues
do programa aps a execuo!)
-- MULTIPLICA DOIS NMEROS
INPUT 0
-- mem[0] <= INPUT_DEVICE
INPUT 1
-- mem[1] <= INPUT_DEVICE
ACC 1
-- ACC <= 1
STORE 2
-- mem[2] <= ACC - UM
ACC 0
-- ACC <= 0
STORE 3
-- mem[3] <= ACC - PRODUTO
LOAD 0
-- ACC <= mem[0]
STORE 4
-- mem[4] <= ACC -- CONTA
LOAD 4
-- ACC <= mem[4]
SUB 2
-- ACC <= ACC - 1
STORE 4
-- mem[4] <= ACC
JNZ 13
-JMP 17
-LOAD 3
ADD 1
STORE 3
JMP 8
OUTPUT 3
STOP

Programa multiplica dois nmeros, agora


reservando Espao para as Variveis!
INPUT 18
INPUT 19
ACC 1
STORE 20
ACC 0
STORE 21
LOAD 19
JNZ 9
JMP 16
LOAD 21
ADD 18
STORE 21
LOAD 19
SUB 20
STORE 19
JMP 6
OUTPUT 21
STOP

You might also like