Você está na página 1de 4

Tarefa 3 – EA869

2do Semestre 2020 – Turma A

Aluno: Fabio Joaquín Bareiro Fleitas RA: 261262

Data de entrega (limite): 11 de maio

1. No segundo programa de exemplo mostrado na aula sobre avr_sim, foi feito o cálculo da soma
dos valores armazenados com as instruções ADD e ADC.
1.1. Por que não foi usada apenas ADD nos dois casos?
1.2. Mostre uma maneira de se fazer esta mesma soma de forma mais rápido, isto é, com menos
instruções de máquina.

Resposta:

1.1. Optamos por usar a instrução ADC em lugar de mais uma instrução ADD porque, precisamos
somar o flag Carry com o registrador R19, e dessa maneira é nele que ficarão armazenados
os 8bits mais significativos da soma dos valores armazenados na memória, zerando no
caminho o registrador R17 para ele não interferir na contagem; ou seja, como a instrução ADD
não fornece a possibilidade de somar o Carry, não podemos usá-lo para levar a conta nos bits
mais significativos mencionados.
1.2. Uma maneira alternativa, mas rápida, de fazer a soma é como se mostra na figura:

Código alternativo
Código original da com menos instruções
parte de somas.
de máquina.

Comentários:

No código alternativo, usamos 6 linhas de código (além do


rótulo), enquanto que no código original, fazíamos uso de
7 linhas. No fim das contas, poupamos o uso de uma
instrução de máquina, utilizando a contagem no
registrador r16 (que vai até 255) para fazer as somas
parciais, em lugar de ler os valores dos somandos na RAM.
Este código alternativo (mais a parte de Parada) não
precisa dos blocos inicio, Denovo e Setup; portanto,
poderia ser implementado sem eles, poupando mais
instruções ainda.
2. Sobre a linguagem de montagem (Assembly) do microcontrolador ATMega328 explique o que
se pede a seguir, exemplificando com trechos de saída de uma montagem (arquivo
programa.lst) feita com avr_sim
2.1. Como se diz para o montador que o código sendo montado deve ser colocado na posição de
memória 0x200?
Resposta:
Para colocar o código a partir dessa posição, usamos a pseudo-instrução .org da seguinte
forma:

Com essa diretiva é suficiente para armazenar nosso programa a partir da posição 0x200.

2.2. Qual a diferença entre as pseudo-instruções DB e BYTE?


Resposta:
A diferença principal radica em que a pseudo-instrução DB define constantes que se limitam
a um byte de espaço consumido, e que se alocam na memória de programa e na EEPROM;
enquanto que a pseudo-instrução BYTE reserva a quantidade de bytes que lhe é especificado,
e o faz na SRAM ou a EEPROM, a diferença do DB.
No seguinte exemplo, podemos visualizar melhor a diferença:

2.3. Qual a diferença entre as pseudo-instruções SET e EQU?


Resposta:
A diferença é que, quando a diretiva EQU assigna um valor a uma variável, esta não pode ser
redefinida nos trechos seguintes do programa, enquanto que a diretiva SET sim.
Na seguinte figura, visualizamos melhor a diferença:
3. Liste e justifique pelo menos duas diferenças entre firmware de aparelhos com
microcontroladores embarcados e o conceito de firmware que vimos na aula sobre
microprogramação.
As diferenças entre o termo firmware relacionado aos aparelhos com microcontroladores e
aquele relacionado com microprogramação são as seguintes:
Microcontroladores Firmware na Microprogramação
✓ Relacionado com o software de ✓ Referente ao hardware de um
aparelhos eletrônicos em geral. microcontrolador, especificamente a
Se refere ao código fonte que é a memória de controle dele.
programação de alto nível destes É a memória que associa uma instrução
aparelhos. específica, com a sequência de sinais de
controle que compõem a execução dela
✓ Associado a um ambiente de alto nível (que realizam as microperações)
de um computador.
O firmware é o código fonte que é feito ✓ Associado a um ambiente de baixo
pelos desenvolvedores finais do (mínimo) nível de um computador.
aparelho, e não pelos projetistas do É um tipo de programação que lida
hardware do microcontrolador que é diretamente com a linguagem de
componente dele, e, portanto, esses máquina, ao ter que servir de ponte entre
desenvolvedores programam ele com as instruções, e a cadeia de bits dos seus
linguagens de alto nível. respectivos sinais de controle, ou seja, a
linguagem de máquina do computador.
✓ Não é de natureza permanente.
Como lida com instruções em alto nível ✓ É armazenado permanentemente no
(incluindo o Assembly nesta circuito integrado.
comparação), ele pode ser reprogramado Tal memória de controle é feita pelo
para melhorar a rapidez e erros sem ter projetista do hardware do
que modificar o hardware. microcontrolador, e portanto não pode
ser modificado sem reprogramar,
fisicamente, essa memória.

4. Justifique com exemplos por que as afirmativas abaixo estão certas ou erradas.
1. ‘Toda micro-operação está associada à geração de um sinal de controle.’
Justificativa:
A afirmativa está errada, pois uma microperação pode precisar mais de um sinal de controle
para ser corretamente executada.
Por exemplo, a instrução ADD, no ciclo de execução, utiliza uma microperação que precisa
tanto da ativar um sinal de controle TRB, que faz a ação de levar um dado dos registradores
até o RDM, como também do sinal de controle wT, que leva ou escreve no TMP o dado do
barramento; portanto fazendo uso de mais de um sinal de controle.

2. ‘Cada microinstrução está associada a uma microperação.’


Justificativa:
A afirmação está errada. Isto porque uma microinstrução está sempre composta por várias
passos ou ações que uma vez estes sejam todos feitos, a microinstrução foi efetivamente
executada, e chamamos a tais passos como microperações. Assim, uma microinstrução
sempre está associada a várias microperações.

Você também pode gostar