Está en la página 1de 20

INTRODUCCIÓN AL LEGUAJE ASSEMBLER - “ARM”

INTEGRANTES

SARA ALICIA SIERRA DIAZ


Código: 1.017.247.290

SANTIAGO SOTO CORREA


Código: 1.037.637.560

PABLO MENA JULIO


Código: 1.038.816.776

DOCENTE
INGENIERO HERNANDO VANEGAS LOPEZ

POLITÉCNICO COLOMBIANO JAIME ISAZA CADAVID


MEDELLÍN - COLOMBIA
Facultad de ingenierías
Mayo de 2019

1
1. Introducción

En este informe nos enfocaremos en la solución de una función de transferencia


dada por el profesor, donde aplicaremos lo visto en las clases anteriores,
haciendo referencia a tabla de verdad, mapas de Karnaugh, diagramas de flujo,
entre otros, para de esta forma en el programa codeblocks mediante el lenguaje
assembler lograr codificar un algoritmo que permite la solución del ejercicio
propuesto.

A lo largo de este informe se mostrará todo lo referente con la solución de este


laboratorio, desde la consulta previa, los materiales utilizados hasta el paso a
paso de como resolvimos este ejercicio, para finalmente exponer como en la
solución del ejercicio podemos ingresar datos ya sea en el programa en sí, o
mediante consola para verificar el correcto funcionamiento del programa.

Finalmente, diremos las dificultades o conocimientos adquiridos a lo largo de la


solución de este ejercicio.

2
1. Objetivo General.

Iniciar a los estudiantes de Arquitectura en el lenguaje Assembler para


procesadores ARM e interactuando con la placa de desarrollo Mini PC
RASPBERRY PI 2 y PI 3. (Simulador QEMU). Manejo de datos por consola en
assembler.

2. Objetivos Específicos

● Aprender a codificar en Assembler.


● Familiarizarnos con la estructura propuesta por el profesor para la
correcta presentación de los desarrollos que se realicen en Assembler.
● Aplicar los diferentes conocimientos vistos en clase para la solución de
ejercicios y así de esta forma aplicarlos en la codificación.

3
3. Materiales
Computador Software –QEMU

Software CODEBLOCKS

4. Marco Teórico Desarrollo (aportes, fotos, anexos)

El programa assembler convierte nombres simbólicos de instrucciones en código


máquina. A diferencia de un compilador de lenguaje de alto nivel que genera una serie
de instrucciones de máquina por cada instrucción de alto nivel, el assembler genera una
instrucción de máquina por cada nemónico (lenguaje de máquina).

Las sentencias fuentes de un programa fuente ensamblador pueden ser:

Instrucciones:
También denominadas nemónicos, simbólicas del juego de instrucciones del
microprocesador.
[Etiqueta] Nombre [Operandos]
Ejemplos
MOV AX, CX: Aparece una etiqueta y dos operandos
INC CX: Aparece un solo operando (incrementa 1 al registro)
STI: Instrucción sin operandos (bandera de interrupción en un IF)

Directivas:
Son indicadores para el ensamblador, le indican que debe hacer con los datos y las
instrucciones.
Los operandos de las instrucciones pueden ser:

Registro:
De 8, 16 o 32 bits. Por ejemplo:
R2-> Nombre del registro.

4
Memoria:
Puede ser un byte de memoria o una palabra de memoria. Se especifica mediante una
dirección, Por ejemplo:
DS: [DI] -> El operando se halla en esa dirección.

Valor Inmediato (Dato):


Un número o una constante, Por ejemplo:
0FF0H -> Por defecto son decimales a no ser que se le coloque la H después del número
para indicarle que es hexadecimal.

Consulta previa

1. Introducción a la Raspberry pi en Linux

Raspberry Pi es un microprocesador sencillo con la potencia de un Smartphone de baja


gama, pero que podemos utilizar para múltiples tareas y que se ha extendido mucho en
diversos campos durante los pocos años que lleva en el mercado. Hay varias
distribuciones Linux pensadas y desarrolladas para utilizar en Raspberry Pi, una de las
más extendidas es Raspbian, basada en Debian (que es también la distribución en la que
está basada Ubuntu), el cual cuenta con las características de Linux como los son su
bajo peso y bajo consumo de recursos para hacer que este sistema funcione como
debería de ser.

2. Adquirir el Set de Instrucciones para Procesadores ARM

 Instrucciones de Salto.
Instrucción Uso Significado/Descripción

B Destino Salto convencional

BX Destino Salta a una posición de memoria

BL Rm Salto conservando el vinculo

 Instrucciones de Procesamiento de Datos.


Instrucción Uso Significado/Descripción

Destino, Op1, Op2 Desplazamiento aritmético hacia la derecha


ASR

LSL Destino, Op1, Op2 Desplazamiento lógico hacia la izquierda

5
Instrucción Uso Significado/Descripción

LSR Destino, Op1, Op2 Desplazamiento lógico hacia la derecha

ROR Destino, Op1, Op2 Rotar hacia la derecha a través del carry

RRX Destino, Op1 Rotar un bit hacia la derecha, con extensión

Instrucción Uso Significado/Descripción

ADD Destino, Op1, Op2 Suma

SUB Destino, Op1, Op2 Resta

RSB Destino, Op1, Op2 Resta reversa

ADC Destino, Op1, Op2 Suma con Acarreo

SBC Destino, Op1, Op2 Resta con Acarreo

RSC Destino, Op1, Op2 Resta reversa con Acarreo

MUL, MLA Destino, Op1, Op2 Multiplicar

AND Destino, Op1, Op2 AND lógica

ORR Destino, Op1, Op2 Or Inclusiva

EOR Destino, Op1, Op2 Or Exclusiva

BIC Destino, Op1, Op2 Borrar Bit

MOV Destino, Op1 Mover

MVN Destino, Op1 Mover negado

CMP Op1, Op2 Comparar

CMN Op1, Op2 Comparar Negativo

6
Instrucción Uso Significado/Descripción

TST Op1, Op2 Test de bits

TEQ Op1, Op2 Test Equivalente

 Instrucciones de Transferencias del registro Status


 El registro actual CPSR (Current Program Status Register ) el mismo es
accesible desde cualquier modo de procesador, y contiene las banderas de
condición, los bits de manejo de las interrupciones, el modo del procesador,
etc.
 Cada excepción posee además un SPSR (Saved Program Status Register), el
cual es utilizado para preservar el valor del CPSR cuando ocurre una
excepción.

 Instrucciones para Carga y Escritura en Memoria

Instrucción Uso Significado/Descripción

LDR
Destino, [Op1] Cargar registro

STR [Op1], Destino Almacenar registros

LDM Dirección, {Lista registros} Carga múltiples registros

STM Destino, {Lista registros} Almacenar múltiples registros

PLD [Rn{, FlexOffset}] Precarga de memoria caché

Destino, Fuente, [Dirección


SWP Intercambiar registros y memoria
memoria]

 Instrucciones para Coprocesador


Instrucción Uso Significado/Descripción

Coproc, #Cocod1, CRd, CRn,


CDP, CDP2 Operación de datos del coprocesador
CRm{, #Cocod2}

7
Instrucción Uso Significado/Descripción

MCR, MCR2, Coproc, #Cocode1, Rt, CRn,


Mover de registro (s) a coprocesador
MCRR CRm{, #Cocode2}

Coproc, #Cocode1, Rd, CRn,


MRC, MRC2 Mover del coprocesador al registro
CRm{, #Cocode2}

Coproc, #Cocode, Rt, Rt2,


MRRC Pasar de coprocesador a 2 registros
CRm

Cargar coprocesador, almacenar


LDC, STC Coproc, CRd, [Rn]
coprocesador

 Instrucciones para la Generación de Excepciones.


Instrucción Uso Significado/Descripción

SWI immed_24 Interrupción de software

Mueve el contenido del CPSR o SPSR a un


MRS Destino, psr
registro de propósito general

<psr>_<fields>, #immed_8r
MSR Mover de registro a PSR
<psr>_<fields>, Rm

BKPT immed_16 Excepción de aborto

Pasar de los registros al acumulador de 40


MAR Acc, RdLo, RdHi
bits.

Pasar del acumulador de 40 bits a los


MRA RdLo, RdHi, Acc registros.

3. Manejo de instrucciones básicas en Assembler ARM

ARM tiene dieciséis registros visibles en cualquier momento. Se llaman R0 a R15.


Todos tienen 32 bits de ancho.
Todos los registros son de uso general, excepto por:
● R13 / SP:que contiene el puntero de pila.
● R14 / LR:el registro de enlace que contiene la dirección de retorno de la persona
que llama.
● R15 / PC:que contiene el contador del programa.

8
La sintaxis básica de Assembler Arm es:
● <operation>:Un nemónico de tres letras, por ejemplo, MOV o ADD.
● {cond}:Un código de condición opcional de dos letras, por ejemplo, EQ o CS.
● {flags}:Banderas adicionales opcionales. Por ejemplo S.
● Rd:El registro de destino.
● Rn:El primer registro de la fuente.
● Operand2:Un segundo operando flexible.

4. Como mostrar datos desde Consola (Números y textos)

● ls - para ver los archivos donde estoy ubicado


● cd - para accerder un nivel mas entre carpetas
● Ingresar a la ubicacion donde esta alojado el proyecto
este este caso “cd Documents/Practica3/bin/Debug/”
● Despues, ingresar el nombre del comando global y archivo “gdb Practica3”
● Finalmente ingresar el comando “run” para ejecutar el evento.

5. Desarrollo

Con base en la función de transferencia o ecuación característica, el estudiante elaborara


cada uno de los siguientes ítems en el orden cronológico siguiente.

Mostrar el programa corriendo en CODEBLOCKS


Elaborar cada uno de los pasos para la simulación de su programa
Mostrar resultados en pantalla. (REG), Desde Codeblocks.
Mostrar el programa corriendo desde modo consola (Comandos)
Crear un archivo en assembler con un editor de Raspbian
- Elaborar cada uno de los pasos para correr su programa desde consola, mediante
comandos. (Ver página WEB).
- Mostrar en pantalla desde modo consola, el o los valores de los registros.

F (A, B, C, D, E) = Σ (0,1,2,3,13,17,21,29,25)

9
Tabla de verdad

10
Mapa Karnaugh

Circuito simplificado

11
Diagrama de Flujo

Tabla de relaciones

Variable Valor

R2 A

R3 B

R4 C

R5 D

R6 E

12
Assembler

13
14
15
Resultados desde Code Blocks (prueba escritorio)

16
17
Ejecución desde consola

Registros

18
5. Sugerencias

● Tener en cuenta las recomendaciones dadas en clase al momento de codificar;


recomendaciones al identar, documentar, encabezado.
● Tener presente que el registro 0 y 1 deben guardarse para la respuesta, el 13
como puntero de pila, 14 registro de enlace y el 15 contador de programa.
● Saber reutilizar los registros en caso de necesitar más.
● Tener en cuenta el manejo de la sintaxis y el set de instrucciones para evitar
errores al momento de compilar.
● Tener un buen manejo de los mapas de Karnaugh para obtener una función
completamente simplificada.

19
5. Conclusiones

● Aprendimos a pedir datos y a mostrar el resultado cargado en el R1 ya se desde


el programa codeblocks, o mediante consola.
● Este ejercicio nos sirvió para familiarizarnos mas con el programa codeblocks y
la codificación en assembler.
● Mediante la realización de la tabla de verdad, mapa de Karnaugh y el diagrama
de flujo se nos hizo de forma más sencilla la codificación en assembler ya que
teníamos un paso a seguir.
● Tuvimos varias dificultades en el desarrollo de este laboratorio, por lo que
tuvimos que acudir a consultas, entre otros, para lograr la solución de este
ejercicio.

6. Cibergrafía

● Rocabado, M. S. H., & Arias, F. D. A. (2009). Arquitectura y organización de la


computadora: microprocesadores y programación assembler. Retrieved from
https://ebookcentral.proquest.com
● Mijarez, C. R. (2014). Electronica. Retrieved from
https://ebookcentral.proquest.com
● Quiroga, Patricia. Arquitectura de computadoras. Alfaomega grupo editor
Argentino, 2010. Primera edición.
● Cueva, L. J. M. (2005). Conceptos básicos de procesadores de lenguaje.
Retrieved from https://ebookcentral.proquest.com
● Angulo, U. J. M., Angulo, M. I., & Etxebarria, R. A. (2007). Microcontroladores
pic: diseño práctico de aplicaciones. primera parte: pic12f508 y pic16f84a.
lenguajes ensamblador, c y pbasic (4a. ed.). Retrieved from
https://ebookcentral.proquest.com

20

También podría gustarte