Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Practica 4
Practica 4
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
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
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.
e) Explique la función del siguiente segmento de código, después con un diagrama de flujo,
ilustre la secuencia de pasos realizada.
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
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.
1) Actividad previa
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.