Sie sind auf Seite 1von 24

Arquitetura de Computadores I

Professor: Felipe Maia Galvo Frana



Alunos:
Daniel Mendes
Fabrcio Jorge Lopes Ribeiro







Trabalho de Microprogramao
Utilizando Simulador Escape DLX

Trabalho de Microprogramao Utilizando Escape DLX
PESC - Arquitetura de Computadores I

Prof.: Felipe Frana Alunos: Daniel Mendes e Fabrcio Jorge Lopes Ribeiro

2

1. Introduo 3
2. Conceitos de Microprogramao 3
3. Simulador ESCAPE DLX 4
3.1. Caractersticas 4
3.1.1. Janela de Visualizao da Arquitetura 5
3.1.2. Janela de Visualizao do Microcdigo 6
3.1.3. Janela de Visualizao das Instrues na Memria 7
3.1.4. Janela de Visualizao da Memria 8
4. Apresentao do algoritmo 9
4.1. Descrio da Implementao 14
5. Desempenho 15
6. Concluso 16
7. Anexo 1 Fonte do programa original em assembly x86 17
8. Anexo 2 Fonte do programa para escapeDLX sem instrues de uso especfico 19
9. Anexo 3 Fonte do programa para escapeDLX com instruo FILT 21
10. Anexo 4 Tabela de Microcdigo com instruo FILT 23
11. Anexo 5 Jump Table com instruo FILT 24


Trabalho de Microprogramao Utilizando Escape DLX
PESC - Arquitetura de Computadores I

Prof.: Felipe Frana Alunos: Daniel Mendes e Fabrcio Jorge Lopes Ribeiro

3
1. Introduo

O objetivo deste trabalho comparar o desempenho de um programa quando
implementado em um processador atravs do uso de instrues tpicas versus com o uso de uma
instruo especial criada a partir da alterao do microcdigo que realize uma parcela
considervel do programa. Para isto escolhemos um algoritmo de processamento de imagens com
grande localidade de execuo, isto , na maior parte do tempo apenas um pequeno conjunto de
instrues do algoritmo est sendo executado. Aps medir o nmero de ciclos de mquina
necessrios para executar o algoritmo com um certo conjunto de dados de entrada, criamos uma
instruo (atravs da insero de um opcode novo na jumptable e da escrita do seu
correspondente microcdigo) capaz de realizar a tarefa previamente desempenhada pelas
instrues de uso repetitivo. Realizamos novamente a medida do nmero de ciclos necessrios
para a execuo do programa e apresentamos nossas concluses.

2. Conceitos de Microprogramao

Em todo processador existe um conjunto primitivo de operaes que pode ser executado
diretamente por circuitos lgicos. Tais operaes incluem a leitura e a gravao de registradores,
operaes aritmticas e lgicas da ALU, etc. Para selecionar quais destas operaes sero
executadas em um ciclo existem sinais de controle, cujos nveis lgicos podem ser definidos
atravs de lgica digital direta a partir das palavras de instrues (lgica hard wired) ou atravs
de palavras oriundas de uma memria interna ao processador, onde um programa nela
armazenado configura tais sinais de controle em funo das palavras de instruo apresentadas ao
processador. A este programa convencionou-se chamar microcdigo.
As microinstrues possuem formatos ligados diretamente disposio dos sinais de
controle do processador, logo costumam possuir grande largura de bits com vrios campos.
Habitualmente as microinstrues ficam armazenadas em uma ROM cujos endereos so
seguidos em seqncia, a no ser que o microprograma execute uma operao de desvio. Neste
caso, tabelas com endereos de saltos (jump tables) so utilizadas para determinar a prxima
instruo.







Trabalho de Microprogramao Utilizando Escape DLX
PESC - Arquitetura de Computadores I

Prof.: Felipe Frana Alunos: Daniel Mendes e Fabrcio Jorge Lopes Ribeiro

4

3. Simulador ESCAPE DLX

O Escape um ambiente de simulao de arquitetura de computadores com propsito
educacional, que permite a utilizao de um processador microprogramado (arquitetura von
Neumann) e um processador pipeline (arquitetura Harvard). Estas duas arquiteturas foram
implementadas em 32 bits baseadas no DLX de Hennessy e Patterson.

3.1. Caractersticas

As arquiteturas de microprogramao e pipeline so parcialmente configurveis,
permitindo que o usurio tenha acesso a algumas configuraes bsicas, como o nmero de
registradores, opcodes e tamanho do campo imediato.
Nesta arquitetura o tamanho dos campos de bits so variveis, dependendo do nmero de
instrues e registradores, tendo todas as instrues 32 bits. Dependendo do tipo de simulao
podemos utilizar 4 a 256 registradores, alm de ter a possibilidade de configurar o nmero de
ciclos para acesso memria (wait states), e at 4 jump tables.
Como a arquitetura foi baseadas no DLX de Hennessy e Patterson, foram definidos trs tipos de
intrues, a tipo I, R e J.


Figura 1 - Campos das Instrues

Trabalho de Microprogramao Utilizando Escape DLX
PESC - Arquitetura de Computadores I

Prof.: Felipe Frana Alunos: Daniel Mendes e Fabrcio Jorge Lopes Ribeiro

5
O caminho de dados composto por dois registradores de leitura (A e B), um de escrita
(C), uma interface de memria com endereo (MAR), dados (MDR), registradores de instrues
(IR), contador de programa (PC), registradores extras e uma unidade aritmtica ALU. As
diferentes partes so conectadas por dois barramentos de entrada (S1 e S2) e um barramento de
resultado. A ALU pode realizar vrias operaes bsicas em um nico ciclo.
A unidade de controle microprogramada, sendo o endereo do microcdigo guardado
em um registrador especial (uAR). Durante cada ciclo este registrador incrementado com um
novo valor.


Tabela 1 Instrues do Escape

Existem vrias janelas que permitem que o usurio tenha acesso as informaes da
arquitetura, instrues, memria e microcdigo.

3.1.1. Janela de Visualizao da Arquitetura

A simulao pode ser executada ciclo a ciclo ou por vrios ciclos definidos de acordo com
o usurio. Durante a execuo do programa os ciclos podem ser revertidos para retornar a
execuo do programa em uma determinada instruo, sendo que este recurso tem o limite de
1024 ciclos.
Trabalho de Microprogramao Utilizando Escape DLX
PESC - Arquitetura de Computadores I

Prof.: Felipe Frana Alunos: Daniel Mendes e Fabrcio Jorge Lopes Ribeiro

6
A arquitetura composta de uma unidade de controle e um caminho de dados de acordo
com a figura 2.


Figura 2 - da Arquitetura Escape

3.1.2. Janela de Visualizao do Microcdigo

Nesta janela podemos definir o trecho de microcdigo correspondente a cada instruo do
programa. Nesta janela podemos definir todos os parmetros das instrues. A figura 3 mostra a
janela de visualizao de microcdigo.
Trabalho de Microprogramao Utilizando Escape DLX
PESC - Arquitetura de Computadores I

Prof.: Felipe Frana Alunos: Daniel Mendes e Fabrcio Jorge Lopes Ribeiro

7

Figura 3 Janela de visualizao das Instrues

3.1.3. Janela de Visualizao das Instrues na Memria
Nesta janela podemos ver o contedo da memria sob a forma de instrues. Vale lembrar
que a mesma memria serva para armazenar cdigo e dados, logo qualquer modificao nesta
janela criar uma modificao na janela de visualizao de memria e vice-versa (arquitetura
Von Neumann). A janela de visualizao das instrues na memria pode ser vista na figura 4.

Trabalho de Microprogramao Utilizando Escape DLX
PESC - Arquitetura de Computadores I

Prof.: Felipe Frana Alunos: Daniel Mendes e Fabrcio Jorge Lopes Ribeiro

8

Figura 4 Seqncia das Instrues na Memria

3.1.4. Janela de Visualizao da Memria
A memria pode ser editada atravs de uma janela de visualizao especfica, permitindo
a alterao do tamanho da memria e o tempo de acesso, que pode ser configurado de 1 a 9
ciclos.
Os dados da memria podem ser acessados ou gravados em words de 32 bits, meias-
palavras de 16 bits ou em bytes de 8 bits.
Na figura 5 vemos a janela de visualizao de memria.


Trabalho de Microprogramao Utilizando Escape DLX
PESC - Arquitetura de Computadores I

Prof.: Felipe Frana Alunos: Daniel Mendes e Fabrcio Jorge Lopes Ribeiro

9

Figura 5 Dados da Memria

4. Apresentao do algoritmo

O algoritmo escolhido foi a aplicao de um kernel sobre uma imagem. Trata-se de uma
operao comum para processamento de imagens, usualmente objetivando algum tipo de
filtragem espacial do sinal. Nesta operao, temos uma matriz de coeficientes (habitualmente
quadrada) de dimenses mpares (chamada kernel). O elemento central sobreposto a um
elemento da imagem a ser filtrada. Em seguida, calcula-se o produto entre os elementos do
kernel e os elementos da matriz origem, somam-se os resultados e substitui-se o pixel
equivalente ao elemento central por este resultado. A operao deve ser repetida para todos os
pixels da imagem a ser filtrada. A figura 6 mostra esta operao.

Trabalho de Microprogramao Utilizando Escape DLX
PESC - Arquitetura de Computadores I

Prof.: Felipe Frana Alunos: Daniel Mendes e Fabrcio Jorge Lopes Ribeiro

10

Figura 6 Aplicao de um kernel sobre uma imagem

Habitualmente os coeficientes de um kernel somam 1, de forma a preservar a quantidade
de energia presente na imagem. Os kernels simtricos no favorecem o deslocamento da
energia na imagem. J os assimtricos podem criar efeitos do tipo motion blur.

Especificamente no nosso trabalho escolhemos um kernel que cria um efeito de chamas
(associado uma pallete de cores apropriada). Tal tipo de kernel foi desenvolvido para a
criao de efeitos grficos em programas intitulados demos onde preza-se a qualidade
grfica obtida com programas compactos. A figura 7 mostra o screenshot de um programa
deste tipo escrito por um dos autores executando este efeito:

Trabalho de Microprogramao Utilizando Escape DLX
PESC - Arquitetura de Computadores I

Prof.: Felipe Frana Alunos: Daniel Mendes e Fabrcio Jorge Lopes Ribeiro

11

Figura 7 Exemplo do kernel do fogo sendo usado por uma demo

Para gerar tal efeito escolhemos uma matriz de valores compreendidos entre 0 e 255, onde
0 representa a parte mais fria (em preto, neste exemplo) e 255 a mais quente (em amarelo
claro). As outras tonalidades seguem um degrad entre estes extremos.
Inicialmente, escolhemos aleatoriamente valores iniciais para a linha inferior da matriz,
sendo estes valores 0 ou 255. Esta linha no mostrada na tela pois no tem uma aparncia
muito boa (fica com pixels amarelos e pretos alternados). O kernel aplicado o seguinte:


Figura 8 Kernel de gerao do efeito do fogo

Como o kernel no simtrico, ele favorece que a energia suba, pois cada linha torna-se
uma mdia ponderada da linha inferior e do pixel central. Na verdade, para que a chama
Trabalho de Microprogramao Utilizando Escape DLX
PESC - Arquitetura de Computadores I

Prof.: Felipe Frana Alunos: Daniel Mendes e Fabrcio Jorge Lopes Ribeiro

12
venha a se extinguir antes de atingir o topo da matriz o kernel deveria ter uma mdia menor
do que 1, mas isso implicaria no uso de aritmtica de ponto flutuante. A soluo encontrada
foi subtrair 1 do resultado do kernel caso este fosse maior do que 0, ou deixar 0 caso
contrrio. Esta modificao introduz uma pequena no-linearidade no clculo mas diminui
enormemente a complexidade computacional, j que podemos somar o valor dos 4 pixels com
peso e deslocar o resultado 2 casas binrias para a direita, efetuando assim a diviso por 4
com uma operao barata em termos de tempo computacional (o programa original foi
otimizado para execuo em um PC386).
O algoritmo final fica ento assim (em C):

S=(Matrix[K] + Matrix[K+L-1] + Matrix[K+L] + Matrix[K+L+1])>>4;
IF (S > 0) S--;
Matrix[K] = S;

Onde K o ndice do vetor e L a largura da matriz Matrix.

Neste ponto cabe ressaltar outras trs otimizaes usadas tanto na implementao original
quanto na implementao no simulador EscapeDLX:

1) Em vez de considerar uma matriz, ou seja, um plano bi-dimensional, consideramos o
campo de aplicao do kernel como um array. Esta simplificao permite manter
apenas um ndice para index-lo, a troco de gerar problemas na primeira e na ltima
coluna (pois as mesmas no possuem vizinhos, e com esta otimizao os vizinhos se
tornaro a coluna oposta). Visualmente, esta simplificao causaria a impresso de que o
fogo estava sendo gerado em um cilindro que foi aberto e esticado na tela. Para contornar
este efeito obrigamos os pixels da ltima linha prximos tanto da primeira quanto da
ltima coluna a serem negros, de forma que no sejam geradas chamas nos cantos da tela.


Figura 9 Tratando a matriz como um buffer unidimensional introduzimos uma dependncia
entre a coluna esquerda e a direita

2) Normalmente seriam necessrios 2 buffers para a aplicao de um kernel: um para
guardar o estado anterior, e outro para guardar o novo estado aps o clculo de todos os
pixels. Uma observao cuidadosa do nosso kernel mostra que, para valores positivos de
L, este causal, ou seja, ele s depende de valores futuros (se interpretarmos o ndice K
como tempo). Desta maneira, possvel aplic-lo diretamente sobre o buffer origem,
Trabalho de Microprogramao Utilizando Escape DLX
PESC - Arquitetura de Computadores I

Prof.: Felipe Frana Alunos: Daniel Mendes e Fabrcio Jorge Lopes Ribeiro

13
sobre-escrevendo os valores sem causar erros de clculo, desde que comecemos a
aplicao pela posio zero e sigamos em direo ao maior valor de K.


Figura 10 Ao calcular o valor de K, podemos substitu-lo diretamente no vetor pois K+1
(nem outra posio posterior a K) no depende de K.

3) O clculo de K compartilha dois valores em comum com K+1, logo so necessrios
apenas 2 acessos de leitura memria para o clculo de uma posio da matriz (j que
podemos reaproveitar 2 leituras).

Figura 11 O clculo de K+1 compartilha 2 elementos com o clculo de K

No anexo 1 podemos ver o cdigo original escrito em assembly x86. Ele pode ser dividido
em 3 partes:

a) A parte inicial que gera aleatoriamente valores 0 ou 255 na base do fogo (na verdade 0 ou
o valor passado pela pilha em [bp+4], mas que habitualmente 255).
b) A parte que efetivamente calcula o kernel (que est duplicada pois o loop foi desenrolado)
c) A parte que copia os dados para a memria de vdeo

No nosso trabalho implementamos a parte 1 e a 2 (sem desenrolar o loop). No foi
necessrio implementar a parte 3 pois visualizamos o resultado do programa diretamente na
memria do processador. O anexo 2 contm o cdigo fonte do programa implementado no
escapeDLX sem o uso de instrues especficas. O anexo 3 contm o cdigo fonte do programa
com uma instruo de uso especfica que faz o clculo da aplicao do kernel.



Trabalho de Microprogramao Utilizando Escape DLX
PESC - Arquitetura de Computadores I

Prof.: Felipe Frana Alunos: Daniel Mendes e Fabrcio Jorge Lopes Ribeiro

14
4.1. Descrio da Implementao

O escapeDLX implementa uma arquitetura Von Neumann, logo o programa e os dados
ficam no mesmo espao de memria. Na figura 12 podemos ver este espao de memria.
Efetuamos a seguinte diviso: do endereo 0x400 at o endereo 0x7ff foi organizada uma matriz
de words (32 bits cada) de 16x16 elementos. Estes foram os pixels da nossa implementao. A
linha de 0x7c0 at 0x7ff a geradora, ou seja, onde os valores aleatrios (0 ou 32) so
introduzidos. Foi necessrio diminuir o valor aleatrio de 255 para 26, pois a matriz pequena na
dimenso vertical, logo os dados no chegavam a zero antes de atingir o topo. O programa em si
comea na posio zero e termina por volta do endereo 0x0C0. A Word que comea em 0x3fc
guarda o seed do gerador de nmeros aleatrios. A Word que comea em 0x3f8 inicializada
em 0 e incrementada cada vez que o programa retorna ao seu incio, logo pode ser usada para
determinar o nmero de ciclos necessrios para gerar um frame.



Figura 12 Memria do processador

A instruo que foi criada para acelerar o programa chama-se FILT e possui 2
argumentos: um registrador, que contm um ponteiro para a posio do buffer a ser calculada
(equivalente a K nos exemplos anteriores) e uma constante que representa o valor de L+1 (na
verdade 4L+4 j que os ponteiros do EscapeDLX so para bytes e ns escolhemos pixels da
largura de words de 32 bits). Esta instruo espera que os valores dos pixels j lidos na interao
anterior (K+L-1 e K+L) estejam em R2 e R3 respectivamente, enquanto o valor do pixel K
carregado para R1 e o do pixel K+L+1 carregado em R4. O valor final da computao
entregue em R1.
Trabalho de Microprogramao Utilizando Escape DLX
PESC - Arquitetura de Computadores I

Prof.: Felipe Frana Alunos: Daniel Mendes e Fabrcio Jorge Lopes Ribeiro

15

5. Desempenho

O desempenho do programa foi medido em suas duas verses (com e sem a instruo
FILT) com diferentes penalidades de acesso a memria: 1 a 9 ciclos. Os resultados podem ser
vistos nas figuras 13 e 14.



Figura 13 Comparao entre o nmero de ciclos dos 2 programas

Trabalho de Microprogramao Utilizando Escape DLX
PESC - Arquitetura de Computadores I

Prof.: Felipe Frana Alunos: Daniel Mendes e Fabrcio Jorge Lopes Ribeiro

16

Figura 14 Percentual de acelerao entre os 2 programas

Podemos perceber que quanto mais lento o acesso memria, maior o ganho em
transportar a execuo do algoritmo da memria principal para a memria de microprograma.
Todavia, os ganhos so cada vez menores.

6. Concluso

Conclumos que a criao de instrues para a substituio de trechos de programas por
microcdigo pode acelerar enormemente uma aplicao, sobretudo quando a diferena de
performance entre a memria de programa e a memria de microprograma grande. Neste
trabalho tambm foi possvel aumentar nosso grau de familiarizao com o conceito de
microprogramao atravs do estudo do simulador escapeDLX.
Trabalho de Microprogramao Utilizando Escape DLX
PESC - Arquitetura de Computadores I

Prof.: Felipe Frana Alunos: Daniel Mendes e Fabrcio Jorge Lopes Ribeiro

17

7. Anexo 1 Fonte do programa original em assembly x86

_FIRE PROC NEAR
push bp
mov bp,sp
mov bx,300
chuta:
mov ax,[randseed]
mov dx,8405h
mul dx
inc ax
and dl,4
mov [randseed],ax
jz zero
mov cl,[bp+4]
mov matrix[bx+25285],cl ;0ffh
jmp cont
zero:
mov matrix[bx+25285],0
cont:
dec bx
cmp bx,0
jnz chuta

xor ax,ax
xor bx,bx
xor cx,cx
xor dx,dx
mov cl,matrix[319]
mov dl,matrix[320]
loop1:
mov al,matrix[bx]
add ax,cx
mov cl,matrix[bx+321]
add ax,dx
add ax,cx
shr ax,2
jz vazio
dec ax
vazio:
mov matrix[bx],al
inc bx
Trabalho de Microprogramao Utilizando Escape DLX
PESC - Arquitetura de Computadores I

Prof.: Felipe Frana Alunos: Daniel Mendes e Fabrcio Jorge Lopes Ribeiro

18
mov al,matrix[bx]
add ax,dx
mov dl,matrix[bx+321]
add ax,cx
add ax,dx
shr ax,2
jz vazio2
dec ax
vazio2:
mov matrix[bx],al
inc bx
cmp bx,25282
jne loop1

mov ax,0a000h
mov es,ax
mov si, offset matrix
mov di,39040
mov cx,12800
rep movsw
pop bp
ret
_FIRE ENDP
Trabalho de Microprogramao Utilizando Escape DLX
PESC - Arquitetura de Computadores I

Prof.: Felipe Frana Alunos: Daniel Mendes e Fabrcio Jorge Lopes Ribeiro

19

8. Anexo 2 Fonte do programa para escapeDLX sem instrues
de uso especfico

0000: 180003F8 | | STW R0, 0x03F8(R0)
0004: 6C2003FC | inicio | LIH R1, 0x03FC
0008: 64210010 | | SRLI R1, 0x0010, R1
000C: 6C408405 | | LIH R2, 0x8405
0010: 64420010 | | SRLI R2, 0x0010, R2
0014: 6C60FFFF | | LIH R3, 0xFFFF
0018: 64630010 | | SRLI R3, 0x0010, R3
001C: 6CC007FC | | LIH R6, 0x07FC
0020: 64C60010 | | SRLI R6, 0x0010, R6
0024: 6CE0001A | | LIH R7, 0x001A
0028: 64E70010 | | SRLI R7, 0x0010, R7
002C: 6D0007C4 | | LIH R8, 0x07C4
0030: 65080010 | | SRLI R8, 0x0010, R8
0034: 0C240000 | chuta | LDW R4, 0x0000(R1)
0038: 24442000 | | MUL R2, R4, R4
003C: 44840001 | | ADDI R4, 0x0001, R4
0040: 64850010 | | SRLI R4, 0x0010, R5
0044: 2C832000 | | AND R4, R3, R4
0048: 180403FC | | STW R4, 0x03FC(R0)
004C: 54A50004 | | ANDI R5, 0x0004, R5
0050: 70050008 | | BRZ R5, zero
0054: 19070000 | | STW R7, 0x0000(R8)
0058: 70000004 | | BRZ R0, nzero
005C: 19000000 | zero | STW R0, 0x0000(R8)
0060: 45080004 | nzero | ADDI R8, 0x0004, R8
0064: 20C82800 | | SUB R6, R8, R5
0068: 7405FFC8 | | BRNZ R5, chuta
006C: 00000000 | | NOP
0070: 00000000 | | NOP
0074: 00000000 | | NOP
0078: 6CA00001 | | LIH R5, 0x0001
007C: 64A50010 | | SRLI R5, 0x0010, R5
0080: 6D000400 | | LIH R8, 0x0400
0084: 65080010 | | SRLI R8, 0x0010, R8
0088: 0D02003C | | LDW R2, 0x003C(R8)
008C: 0D030040 | | LDW R3, 0x0040(R8)
0090: 6CC007BC | | LIH R6, 0x07BC
0094: 64C60010 | | SRLI R6, 0x0010, R6
Trabalho de Microprogramao Utilizando Escape DLX
PESC - Arquitetura de Computadores I

Prof.: Felipe Frana Alunos: Daniel Mendes e Fabrcio Jorge Lopes Ribeiro

20
0098: 0D010000 | fogo | LDW R1, 0x0000(R8)
009C: 0D040044 | | LDW R4, 0x0044(R8)
00A0: 1C220800 | | ADD R1, R2, R1
00A4: 1C230800 | | ADD R1, R3, R1
00A8: 1C240800 | | ADD R1, R4, R1
00AC: 64210002 | | SRLI R1, 0x0002, R1
00B0: 70010004 | | BRZ R1, fzero
00B4: 20250800 | | SUB R1, R5, R1
00B8: 19010000 | fzero | STW R1, 0x0000(R8)
00BC: 1C601000 | | ADD R3, R0, R2
00C0: 1C801800 | | ADD R4, R0, R3
00C4: 45080004 | | ADDI R8, 0x0004, R8
00C8: 20C83800 | | SUB R6, R8, R7
00CC: 7407FFC8 | | BRNZ R7, fogo
00D0: 0C0503F8 | | LDW R5, 0x03F8(R0)
00D4: 44A50001 | | ADDI R5, 0x0001, R5
00D8: 180503F8 | | STW R5, 0x03F8(R0)
00DC: 7000FF24 | fim | BRZ R0, inicio
Trabalho de Microprogramao Utilizando Escape DLX
PESC - Arquitetura de Computadores I

Prof.: Felipe Frana Alunos: Daniel Mendes e Fabrcio Jorge Lopes Ribeiro

21


9. Anexo 3 Fonte do programa para escapeDLX com instruo
FILT


0000: 180003F8 | | STW R0, 0x03F8(R0)
0004: 6C2003FC | inicio | LIH R1, 0x03FC
0008: 64210010 | | SRLI R1, 0x0010, R1
000C: 6C408405 | | LIH R2, 0x8405
0010: 64420010 | | SRLI R2, 0x0010, R2
0014: 6C60FFFF | | LIH R3, 0xFFFF
0018: 64630010 | | SRLI R3, 0x0010, R3
001C: 6CC007FC | | LIH R6, 0x07FC
0020: 64C60010 | | SRLI R6, 0x0010, R6
0024: 6CE0001A | | LIH R7, 0x001A
0028: 64E70010 | | SRLI R7, 0x0010, R7
002C: 6D0007C4 | | LIH R8, 0x07C4
0030: 65080010 | | SRLI R8, 0x0010, R8
0034: 0C240000 | chuta | LDW R4, 0x0000(R1)
0038: 24442000 | | MUL R2, R4, R4
003C: 44840001 | | ADDI R4, 0x0001, R4
0040: 64850010 | | SRLI R4, 0x0010, R5
0044: 2C832000 | | AND R4, R3, R4
0048: 180403FC | | STW R4, 0x03FC(R0)
004C: 54A50004 | | ANDI R5, 0x0004, R5
0050: 70050008 | | BRZ R5, zero
0054: 19070000 | | STW R7, 0x0000(R8)
0058: 70000004 | | BRZ R0, nzero
005C: 19000000 | zero | STW R0, 0x0000(R8)
0060: 45080004 | nzero | ADDI R8, 0x0004, R8
0064: 20C82800 | | SUB R6, R8, R5
0068: 7405FFC8 | | BRNZ R5, chuta
006C: 00000000 | | NOP
0070: 00000000 | | NOP
0074: 00000000 | | NOP
0078: 6CA00001 | | LIH R5, 0x0001
007C: 64A50010 | | SRLI R5, 0x0010, R5
0080: 6D000400 | | LIH R8, 0x0400
0084: 65080010 | | SRLI R8, 0x0010, R8
0088: 0D02003C | | LDW R2, 0x003C(R8)
008C: 0D030040 | | LDW R3, 0x0040(R8)
Trabalho de Microprogramao Utilizando Escape DLX
PESC - Arquitetura de Computadores I

Prof.: Felipe Frana Alunos: Daniel Mendes e Fabrcio Jorge Lopes Ribeiro

22
0090: 6CC007BC | | LIH R6, 0x07BC
0094: 64C60010 | | SRLI R6, 0x0010, R6
0098: 88080044 | fogo | FILT R8, 0x0044
009C: 19010000 | | STW R1, 0x0000(R8)
00A0: 1C601000 | | ADD R3, R0, R2
00A4: 1C801800 | | ADD R4, R0, R3
00A8: 45080004 | | ADDI R8, 0x0004, R8
00AC: 20C83800 | | SUB R6, R8, R7
00B0: 7407FFE4 | | BRNZ R7, fogo
00B4: 0C0503F8 | | LDW R5, 0x03F8(R0)
00B8: 44A50001 | | ADDI R5, 0x0001, R5
00BC: 180503F8 | | STW R5, 0x03F8(R0)
00C0: 7000FF40 | fim | BRZ R0, inicio

Trabalho de Microprogramao Utilizando Escape DLX
PESC - Arquitetura de Computadores I

Prof.: Felipe Frana Alunos: Daniel Mendes e Fabrcio Jorge Lopes Ribeiro

23

10. Anexo 4 Tabela de Microcdigo com instruo FILT



Trabalho de Microprogramao Utilizando Escape DLX
PESC - Arquitetura de Computadores I

Prof.: Felipe Frana Alunos: Daniel Mendes e Fabrcio Jorge Lopes Ribeiro

24

11. Anexo 5 Jump Table com instruo FILT