Escolar Documentos
Profissional Documentos
Cultura Documentos
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:
LCALL SUB
SJMP $
SUB:
ADD A, @R1
INC R1
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