Escolar Documentos
Profissional Documentos
Cultura Documentos
Ciclo de instruo
1
Executa a instruo
Atividades da UCP
Instruo de mquina
quanto menor e mais simples o conjunto de instrues, menor pode ser o ciclo
do processador
Linguagem de montagem
Programa em C:
a=b+c
Programa em C
A[12]=h+A[8]
palavra de 32 bits
instrues de 32 bits
Instruo em
Linguagem de
Montagem
Ao
lw regA regB
deslocamento
sw regA regB
deslocamento
halt
noop
0=000
1=001
2=010
3=011
4=100
5=101
6=110
7=111
e endereo base de A no
lw 6 5 300
add 5 2 5
sw 6 5 300
lw 6 5 300
31-25 = 0
24-22=cdigo de operao=010
21-19=regA=6=110
18-16=regB=5=101
15-0=0000000100101100
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9
8 7 6 5 4 3 2 1 0
----------------------------------------------------------------------------------------------| 0| 0| 0| 0| 0| 0| 0| 0| 1| 0| 1| 1| 0| 1| 0| 1| 0| 0| 0| 0| 0| 0| 0|
1| 0| 0| 1| 0| 1| 1| 0| 0|
----------------------------------------------------------------------------------------------add 5 2 5
31-25 = 0
24-22=cdigo de operao=000
21-19=regA=5=101
18-16=regB=2=010
15-3=0
2-0=destreg=5=101
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9
8 7 6 5 4 3 2 1 0
----------------------------------------------------------------------------------------------| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 1| 0| 1| 0| 1| 0| 0| 0| 0| 0| 0| 0|
0| 0| 0| 0| 0| 0| 1| 0| 1|
----------------------------------------------------------------------------------------------sw 6 5 300
31-25 = 0
24-22=cdigo de operao=011
21-19=regA=6=110
18-16=regB=5=101
15-0=0000000100101100
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9
8 7 6 5 4 3 2 1 0
----------------------------------------------------------------------------------------------| 0| 0| 0| 0| 0| 0| 0| 0| 1| 1| 1| 1| 0| 1| 0| 1| 0| 0| 0| 0| 0| 0| 0|
1| 0| 0| 1| 0| 1| 1| 0| 0|
-----------------------------------------------------------------------------------------------
Instrues de desvio
Programa em C:
if (x!=y)
f=g+x;
else
f=g+y;
ELSE
EXIT
beq
add
beq
add
1
4
1
4
2 ELSE
1 3
1 EXIT
2 3
0=000
1=001
2=010
3=011
4=100
5=101
6=110
7=111
| | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | |
----------------------------------------------------------------------------------------------31-25 = 0
24-22=cdigo de operao=011
21-19=regA
18-16=regB
15-0=deslocamento expresso em C2 (16 bits: -32768 a +32767)
Programa em C:
while (A[i] != k)
i=i+j;
EXIT
add
lw
beq
add
beq
4
5
5
1
1
1
5
3
2
1
5
0
EXIT
1
Loop
Outras operaes:
addi regA regB imediato
regB=regA+imediato
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9
8 7 6 5 4 3 2 1 0
----------------------------------------------------------------------------------------------| | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | |
----------------------------------------------------------------------------------------------31-25 = 0
24-22=cdigo de operao=001
21-19=regA
18-16=regB
15-0=valor imediato expresso em C2 (16 bits: -32768 a +32767)
addi 5 6 5
31-25 = 0
24-22=cdigo de operao=001
21-19=5=101
18-16=6=110
15-0=5=00000000000000101
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9
8 7 6 5 4 3 2 1 0
----------------------------------------------------------------------------------------------| 0| 0| 0| 0| 0| 0| 0| 0| 0| 1| 1| 1| 0| 1| 0| 1| 0| 0| 0| 0| 0| 0| 0|
0| 0| 0| 0| 0| 0| 1| 0| 1|
----------------------------------------------------------------------------------------------halt
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9
8 7 6 5 4 3 2 1 0
----------------------------------------------------------------------------------------------| | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | |
----------------------------------------------------------------------------------------------31-25 = 0
24-22=cdigo de operao=110
21-0=0
noop
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9
8 7 6 5 4 3 2 1 0
----------------------------------------------------------------------------------------------| | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | |
----------------------------------------------------------------------------------------------31-25 = 0
24-22=cdigo de operao=111
21-0=0
Exemplo:
Programa em C:
for (i=0; i< 9; i++)
A[i]=A[i+1];
A[9]=0;
lw 5 5 0
sw 4 5 0
addi 1 1 1
beq 0 0 FOR
sw 2 0 9
SAI
Modos de endereamento
Os operandos das instrues da linguagem de montagem utilizada podem ser acessados
atravs dos seguintes modos:
1
palavra de 32 bits
instrues de 32 bits
Instruo em
Linguagem de
Montagem
Ao
lw regA regB
deslocamento
sw regA regB
deslocamento
halt
noop
instruo add
instruo halt,noop:
o
Cdigo de operao
000
001
010
011
100
halt
110
noop
111
Simulador
O programa SimulaPC traduz um programa escrito na linguagem de
montagem especificada acima e simula sua execuo na mquina
hipottica. Para utilizar esta ferramenta, um programa deve ser escrito na
linguagem de montagem, carregado e traduzido pela ferramenta. Aps esta
traduo o programa poder ser executado diretamente ou no modo passo
a passo. O simulador sempre carrega o programa a partir do endereo 0.
O campo mais esquerda deve ser o campo label que deve conter no mximo 6
caracteres e pode conter letras ou nmeros e sempre comear por letra.O campo label
opcional, mas o espao aps este campo necessrio.
Para cada tipo de instruo os campos 0, 1 e 2 so utilizados de forma diversa:
que indica ao montador que um valor numrico deve ser colocado no lugar
onde seria colocada uma instruo. Esta diretiva utiliza um nico campo que
pode ser um valor numrico ou um label.
Como utilizar o simulador
Para utilizar o simulador voc deve salvar em um diretrio o arquivo
SimulaPC.exe que contm o cdigo executvel do simulador.
val
addi 0 1 5
lw
0 2 val
add 1 2 3
halt
.fill 10
Caso o programa tenha sido traduzido com sucesso, verifique o cdigo gerado pelo
montador mostrado na janela Display e confirme se o cdigo gerado est correto.
Agora, voc ir executar o programa passo a passo. Escolha a opo CPU, Executar
Passo-a-Passo. O simulador mostra o contedo dos 8 registradores e de dois outros
registradores: Contador de Instrues que indica o endereo da instruo a ser executada
e Registrador de Instrues que contm a instruo.
Execute uma instruo de cada vez, clicando o boto Executar ao lado da janela
Display e verifique como o contedo dos registradores modificado.
Questo 1:
Mostre como o programa deve ser modificado de modo que ele some 15
com 20. Utilize o simulador para verificar se seu programa est
funcionando.
Questo 2:
Mostre como o programa deve ser modificado de modo que o resultado da
soma seja armazenado em uma posio de memria depois da posio da
linha "val". Utilize o simulador para verificar se seu programa est
funcionando.
Implementao de laos
O comando em C
(for i=4;i>0;i--);
ini
fim
addi 0 1 4
beq 0 1 fim
addi 1 1 -1
beq 0 0 ini
halt