ENSAMBLADORES E INTERPRETES.
Alumna: Estefanía Rodríguez Sánchez.
Facilitador: Elsa Viveros Galván.
Carrera: Ingeniería en sistemas computacionales.
Ciclo:10.
Tarea 4: Practica 2. Programas que utilizan
instrucciones aritméticas y lógicas.
Fecha: 5 de noviembre del 2023.
Práctica 2. Programas que utilizan instrucciones aritméticas y lógicas:
Diseña, ensambla y ejecuta los siguientes programas:
2.1.1. Un programa que calcula la siguiente expresión: (76 - 23 + 12) /4.
;
; programa2.1.1.asm
;
; Created: 05/11/2023 7:29:40 PM
; Author : Fanny Rodriguez
;
; Replace with your application code
start:
inc r16 ;incrementa el registro R16
rjmp start ;salto relativo incondicional al inicio
; programa que calcula una expresion prog2.1.1.asm
;--------------------------------------------------------------------------
;prog2.1.1.asm
;--------------------------------------------------------------------------
.NOLIST
;Incluye el programa completo del microcontrolador AVR ATmega168p
;.Include "c:\Archivos del programa\Atmel\AVR Tools\AvrAssembler\Appnotes\
m168pdef.Inc"
.LIST
;salta a la funcion principal del programa
.def temp=r16 ;define al registro temporal r16
.def result=r17 ;define el resultado
rjmp Inicio ;salta al inicio
;
Inicio: ;Inicia el programa
ldi r16, 76 ; carga el valor 76 en R16
ldi r17, 23 ; carga el valor 23 en R17
sub r16, r17 ;resta sin acarreo
ldi r17, 12 ; carga el valor 12 en R17
add r16, r17 ;sumas en acarreo
ldi r17, 4 ; carga el valor 4 en R17
DivLoop:
cp r16, r17 ;carga y compara el valor del dato
brcc Done ;salta si r16 < r17
sub r16, r17 ;resta sin acarreo
inc temp ;incrementa
rjmp DivLoop ; salta de nuevo a la funcion DivLoop
;
Done: ;resultado hecho
mov result,temp ; movimiento del resultado final en R17
;
rjmp Inicio ;salto al inicio del puntero del programa
;
Captura de pantalla del programa copilado correctamente:
2.1.2. Un programa que calcule el promedio de los siguientes 16 números: 3, 7, 10, 11,
28, 14, 23, 37, 9, 3, 10, 45, 20, 6, 8, 5.
;
; 2.1.2 Programa promedio.asm
;
; Created: 05/11/2023 9:59:17 PM
; Author : Fanny Rodriguez
;
;
; programa promedio prog2.1.2.asm
;--------------------------------------------------------------------------
;prog2.1.2.asm
;--------------------------------------------------------------------------
.NOLIST
;Incluye el programa completo del microcontrolador AVR ATmega168p
;.Include "c:\Archivos del programa\Atmel\AVR Tools\AvrAssembler\Appnotes\
m168pdef.Inc"
;
.LIST
;salta a la funcion principal del programa
;
;
.cseg ; Seccion de codigo
;
.org 0x0000 ; Direccion de inicio
;
ldi r16, 0 ; Inicializa un registro (r16) para almacenar la suma
ldi r17, 16 ; Inicializa otro registro (r17) con el número de elementos (16)
;
; Arreglo de los numeros
Numbers:
.db 3, 7, 10, 11, 28, 14, 23, 37, 9, 3, 10, 45, 20, 6, 8, 5
;
;Bucle para realizar la suma de los numeros
SumLoop:
lds r18, Numbers ; Carga el valor del siguiente numero en R18
add r16, r18 ; Suma el numero acumulador
dec r17 ; Decrementa el contador de elementos
brne SumLoop ; Si r17 no es igual a cero, repite el bucle
; se divide la suma por r16 para calcular el promedio (desplazamiento a la derecha)
lsr r16 ; Realiza un desplazamiento a la derecha en r16 (divide por 2)
; El resultado final (el promedio) se encuentra en r16
;
loop:
rjmp loop ; Bucle infinito
;
Captura de pantalla del programa compilado correctamente:
2.1.3 Un programa que calcula la siguiente expresión: (200 - 91 - 45 - 23) *2:
;
; 2.1.3 Programa para calcular.asm
;
; Created: 05/11/2023 11:17:22 PM
; Author : Fanny Rodriguez
;
;
; programa para calcular prog2.1.3.asm
;--------------------------------------------------------------------------
;prog2.1.3.asm
;--------------------------------------------------------------------------
.NOLIST
;Incluye el programa completo del microcontrolador AVR ATmega168p
;.Include "c:\Archivos del programa\Atmel\AVR Tools\AvrAssembler\Appnotes\
m168pdef.Inc"
;
.cseg ; seccion del codigo
.org 0x0000 ; Direccion de inicio
ldi r24, 200 ; Carga el valor 200 en r24
ldi r25, 91 ; Carga el valor 91 en r25
ldi r16, 45 ; Carga el valor 45 en r16
ldi r18, 23 ; Carga el valor 23 en r18
sub r24, r25 ; Resta r25 de r24 (200 - 91)
sub r24, r16 ; Resta r16 de r24 (resultado anterior - 45)
sub r24, r18 ; Resta r18 de r24 (resultado anterior - 23)
lsl r24 ; Multiplica r24 por 2 (desplazamiento a la izquierda)
; El resultado final de la expresion se encuentra en r24
;
loop:
rjmp loop ; Bucle infinito
Captura de pantalla del programa compilado correctamente:
Referencias
Aragón-IEE., P. E. (27 de octubre de 2021). ATmega328 AVR-C Variables, operaciones aritméticas y
lógicas [Vídeo]. YouTube. . Obtenido de https://www.youtube.com/watch?
v=JOWLBpoG7S0
Electronics, A. (13 de octubre de 2022). Microcontroladores AVR para procesamiento de 8 bits de
alto rendimiento y consumo eficiente de energía. Obtenido de
https://www.arrow.com/es-mx/research-and-events/articles/avr-microcontrollers-for-
high-performance-and-p
Escartin, V. M. (2010). Diseño del núcleo de un procesador AVR de 8 bits utilizando lógica
programable. Obtenido de https://doi.org/10.1234/rielac.v29i3.34