Você está na página 1de 3

LAB 04 – ARQUITETURA DE COMPUTADORES

1)Coloque cada dígito do seu número de matricula na memória iniciando no endereço 20h
(cada número em um byte da memória).Escreva uma subrotina para calcular o somatório dos
valores do vetor que contém o seu número de matricula, cujo está no endereço 20h. (Utilize
estrutura de repetição) Armazene o resultado da soma no endereço 30h. Termine o programa
com um laço infinito.

MAIN:

MOV R0, #09

MOV R1, #20H


MOV 20H, #02H

MOV 21H, #02H

MOV 22H, #01H

MOV 23H, #02H

MOV 24H, #02H

MOV 25H, #00H

MOV 26H, #07H

MOV 27H, #03H

MOV 28H, #04H

LCALL SUB

SJMP $

SUB:

ADD A, @R1

INC R1

DJNZ R0, SUB

RET

2) Funções iterativas são funções que utilizam estruturas de controle de fluxo iterativas, como
loops, para repetir uma sequência de instruções até que uma condição seja atendida. Qual é a
diferença entre uma função recursiva e uma função iterativa em termos de desempenho e
consumo de memória?

A função iterativa se os valores forem salvos em pilhas ou listas, eles podem usar a
mesma quantidade de memória e tem um desempenho mais ágil. Já a função recursiva, utiliza
mais memória por realocar as variáveis a cada chamada, tornando assim um processo mais
pesado.
3) Qual é o principal problema que pode ocorrer quando criamos funções recursivas em
programas? Como podemos evitá-lo?.

O principal problema é o estouro de pilhas que ocorre quando não há uma condição de
parada, esse problema é possível ser evitado criando uma condição de parada adequada para
o problema.

4) Faça uma função recursiva (sub-rotina recursiva) com o problema que você respondeu no
exercício anterior. Execute o programa e apresente a imagem da Tela do programa executado.

ORG 0000h

MAIN:

MOV 20h, #2

MOV 21h, #2

MOV 22h, #1

MOV 23h, #2

MOV 24h, #2

MOV 25h, #0

MOV 26h, #7

MOV 27h, #3

MOV 28h, #4
LCALL RECURSIVE_SUM

SJMP $

RECURSIVE_SUM:

MOV A, P2

SUBB A, #20h

MOV R0, A

MOVX A, @R0
INC R0

MOV A, R0

MOV R1, A

ADD A, R1

MOV R0, A

LCALL RECURSIVE_SUM

ADD A, @R0

MOV R0, A

MOVX @R0, A
RET

END_RECURSION:

MOV A, #0

RET

Você também pode gostar