Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 7

Manual de

Prácticas
Microprocesador
División: Ingeniería Eléctrica Departamento: Ingeniería Electrónica

Programación en L enguaje

Assembly (Ensamblador)

N.° de
práctica: 04

Nombre completo del alumno Firma

Garcia Hernandez Carlos

N.° de brigada: Fecha de elaboración: 27/10/20 Grupo:4


Parte 1
1) Objetivos de aprendizaje.
El alumno aprenderá a realizar ciclos condicionales empleando el lenguaje
ensamblador. Diseñara la estructura de un programa que resuelva la implementación
de un algoritmo iterativo para el calculo de un convertidor de BCD a Grey.

2) Material y equipo.
Tarjeta de desarrollo y CCS
IDE.
3)
Actividad de investigación.
a) Examine el comportamiento de los siguientes segmentos de código. Identifique el
resultado de las instrucciones ADD(S) y el estado de las banderas C,Z,N del APSR.
.global main
.text
main
MOVW R0, #0xFFFF ; carga solo 16 bits lsb
MOVW R1, #0x1 ; carga solo 16 bits lsb
ADD R0, R1 ; R0 = 0xFFFF + 0x1, no afecta banderas
MOVW R0, #0xFFFF ;
ADDS R0, R1 ; R0 = 0xFFFF + 0x1, si afecta banderas
ADDS R2, R1, #-1 ; suma con signo, destino especificado
MOVW R1, #5
MOVW R2, #0x0
LOOP1 ADD R2, #10
SUBS R1, #1 ; subs afecta banderas
BNE LOOP1 ;"Branch if Not Equal" va a LOOP1 si la instrucción anterior no
resulta 0
MOVW R2, #0XABCD ; carga un Registro con 32 Bits R2 = 0x1234ABCD
MOVT R2, #0X1234
B main

b) En un programa, ¿Qué hace la instrucciones?: B etiqueta 1


Produce un salto no condiciona a la etiqueta 1.

c)Las instrucciones derivadas de B tienen un sufijo, que es una condición que se debe
cumplir para realizar la instrucción B. Explique las siguientes sintaxis de la instrucción B
con los diferentes sufijos.
Sufijo/cond B{cond} etiqueta BX{cond} Rm
EQ Salto condicionado a etiqueta si el resultado anterior es ‘0’ Salto a la dirección especificada por RM si el resultado
anterior es ‘0’
NE Salto a etiquetas si el resultado anterior es diferente de ‘0’ Salto a la dirección especificada por RM si el resultado es
diferente de’0’
CS or HS Salto a etiqueta si el resultado de comparar los dos Salto a la dirección especificada por RM si el resultado
anteriores es RX>=RY anterior es Rx>=Ry
CC or LO Salto a etiqueta si el resultado de comparar los dos Salto a la dirección especificada por RM si el resultado
anteriores es RX<=RY anterior es Rx<=Ry
MI Salto a etiqueta si el resultado de la instrucción anterior Salto a la dirección especificada por Rm si el resultado
es negativo anterior es negativo
PL Salto a etiqueta si el resultado es positivo o ‘0’ Salto a la dirección especificada por Rm si el resultado es
positivo o ‘0’
d)Explique la operación que realizan las siguientes instrucciones.

CBNZ Rn, etiqueta CBZ Rn, etiqueta


Si el valor RN es mayor que ‘0’ realiza un salto a etiqueta. Si el valor en RN es ‘0’ realiza el salto a etiqueta.

e) Explique la función del siguiente segmento de código, después con un diagrama de flujo,
ilustre la secuencia de pasos realizada.

MOV R3, #0x64 ; comentarios


B Test
Loop . ;aquí hace cualquier otra
.
.
SUB R3, R3, #1
Test BNE Loop

Primero guarda en R3 0x64, posterior hace un salto a test, en test se evalúa si el resultado
es diferente de ‘0’, lo cual no es posible pues no se ha realizado ninguna operación y
tampoco se han habilitado las banderas, las banderas Z esta inicializada en 1 por lo cual no
realiza el salto a Loop
4) Escriba un programa para escribir dos localidades de memoria en RAM la conversión
hacia GREY partiendo de una cadena de 4 bits en BCD.

.global main
.data
.text

main nop
mov r0,#9 ;valor a evaluar
mov r3,#0x0000
movt r3,#0x2000
mov r6,#9

f subs r6,r0
beq f1
b f

f1 lsr r1,r0,#0x1; se hace un corrimiento para poder realizar la conversion


eor r2,r1,r0; se almacena en R2 el resultdo en BCD
str r2,[r3]; se guarda en memoria el resultado
b f

5) Cuestionario
¿Para que sirve la directiva equ?
Iguala un valor constante a un símbolo, luego se puede usar en lugar de un valor.

¿De que tipo debe ser una instrucción aritmética, para que tenga efecto en las banderas
de condición?
Aritmética signada.

¿Qué instrucciones de salto condicional se pueden emplear para realizar ciclos?


Presente en lenguaje ensamblador, la estructura de los ciclos de control: while-do, do-
while, if A<B else, if A>B else, if A==0 else.
BEQ, BCS, BHS.
Parte 2

1) Actividad previa

¿Cómo se obtiene la representación binaria de un numero negativo?


Se invierte el número y se suma 1.

¿Cuál es la longitud Máxima de bytes de una multiplicación no signada al multiplicar?


- Dos numero de 16 bits cada uno
4 bytes
-Dos números de 32 bits
8 bytes

¿Qué hace el salto condicional “BEQ etiqueta1”?


Si el resultado es ‘0’ realiza el salto a etiqueta1

¿Qué hace el salto “BL etiqueta2”?


Realiza el salto a etiqueta2 pero guardando en LR el valor del contador de
programa para poder regresar a la instrucción que sigue.

Para cada uno de los dos saltos anteriores, ¿Se debe regresar al lugar del salto?,
¿Cómo?
Se puede regresar en el caso de BEQ usando “B etiqueta”, aunque no es necesario
regresar , para BL usamos “BX LR” y es necesario regresar siempre donde se quedó
el programa.

2) Desarrollo.
Escriba un programa que funcione como una calculadora de números enteros de hasta
32 bits, con operaciones suma, resta, multiplicación, AND, OR, XOR.
Para elegir la operación a realizar, desde el depurador se escribe un valor R0 del 1 al
6.
El programa debe hacer llamados a dos subrutinas: una para carga de operandos y
otra para guardar resultado.
Los dos operandos se encuentran definidos en memoria RAM y se debe colocar en R1
y R”.
El resultado se escribe también en memoria RAM, usando R3.
Los operandos se pueden modificar en cualquier momento sobre-escribiendo su valor
en memoria RAM desde la ventana usando Memory-Browser, en la sección de
depuración.
.global main
.data
.text

main nop
mov r0,#1 ;valor a evaluar(1:suma,2:resta,3:multiplicacion,4:
and,5:or,6 xor
mov r7,#0x0008
movt r7,#0x2000 ;direccion resultado
mov r6,#0x000c
movt r6,#0x2000

op ldr r0,[r6]

cmp r0,#0x01
beq suma

cmp r0,#0x02
beq resta

cmp r0,#0x03
beq mult

cmp r0,#0x04
beq fand

cmp r0,#0x05
beq for

cmp r0,#0x06
beq fxor
b op

suma
bl leer
add r3,r1,r2
bl cargar
b op

resta
bl leer
sub r3,r1,r2
bl cargar
b op

mult
Conclusiones:
El uso de banderas en un programa en ensamblador nos permite realizar comparaciones y de
esta forma implementar saltos condicionados, es así como podemos relacionar el uso de
condiciones en algún lenguaje de alto nivel, así como la creación de menus de selección, como
en el caso de la calculadora lo hicimos.

También podría gustarte