PDF de programación - Introducción a la arquitectura de computadores con Qt ARMSim y Arduino

Imágen de pdf Introducción a la arquitectura de computadores con Qt ARMSim y Arduino

Introducción a la arquitectura de computadores con Qt ARMSim y Arduinográfica de visualizaciones

Publicado el 21 de Mayo del 2019
1.329 visualizaciones desde el 21 de Mayo del 2019
1,3 MB
43 paginas
Creado hace 9a (16/02/2015)
o 1

l
u
t
í
p
a
C

Primeros pasos con ARM y
Qt ARMSim

Índice

Introducción al ensamblador Thumb de ARM . . .
1.1.
1.2.
Introducción al simulador Qt ARMSim . . . . . . .
1.3. Literales y constantes en el ensamblador de ARM .
1.4.
Inicialización de datos y reserva de espacio . . . . .
1.5. Carga y almacenamiento . . . . . . . . . . . . . . .
1.6. Problemas del capítulo . . . . . . . . . . . . . . . .

3
8
22
25
31
41

En este capítulo se introduce el lenguaje ensamblador de la arqui-

tectura ARM y se describe la aplicación Qt ARMSim.

Con respecto al lenguaje ensamblador de ARM, lo primero que hay
que tener en cuenta es que dicha arquitectura proporciona dos juegos
de instrucciones diferenciados. Un juego de instrucciones estándar, en el
que todas las instrucciones ocupan 32 bits; y un juego de instrucciones
reducido, llamado Thumb, en el que la mayoría de las instrucciones
ocupan 16 bits.

Uno de los motivos por el que la arquitectura ARM ha acaparado
el mercado de los dispositivos empotrados ha sido justamente por pro-

Este capítulo forma parte del libro «Introducción a la arquitectura de computadores con
Qt ARMSim y Arduino». Copyright c 2014 Sergio Barrachina Mir, Maribel Castillo Catalán,
Germán Fabregat Llueca, Juan Carlos Fernández Fernández, Germán León Navarro, José
Vicente Martí Avilés, Rafael Mayo Gual y Raúl Montoliu Colás. Se publica bajo la licencia
«Creative Commons Atribución-CompartirIgual 4.0 Internacional».

1

Primeros pasos con ARM y Qt ARMSim

2

porcionar el juego de instrucciones Thumb. Si se utiliza dicho juego de
instrucciones es posible reducir a la mitad la memoria necesaria para
las aplicaciones utilizadas en dichos dispositivos, reduciendo sustancial-
mente su coste de fabricación.

Cuando se programa en ensamblador de ARM, además de tener cla-
ro qué juego de instrucciones se quiere utilizar, también hay que tener
en cuenta qué ensamblador se va a utilizar. Los dos ensambladores más
extendidos para ARM son el ensamblador propio de ARM y el de GNU.
Aunque la sintaxis de las instrucciones será la misma independientemen-
te de qué ensamblador se utilice, la sintaxis de la parte del código fuente
que describe el entorno del programa (directivas, comentarios, etc.) es
diferente en ambos ensambladores.

Por tanto, para programar en ensamblador para ARM es necesario
tener en cuenta en qué juego de instrucciones (estándar o Thumb) se
quiere programar, y qué ensamblador se va a utilizar (ARM o GNU).

En este libro se utiliza el juego de instrucciones Thumb y la sintaxis

del ensamblador de GNU, ya que son los utilizados por Qt ARMSim.

Por otro lado, Qt ARMSim es una interfaz gráfica para el simulador
ARMSim1. Proporciona un entorno de simulación de ARM multiplata-
forma, fácil de usar y que ha sido diseñado para ser utilizado en cursos
de introducción a la arquitectura de computadores. Qt ARMSim se dis-
tribuye bajo la licencia libre GNU GPL v3+ y puede descargarse desde
la página web: «http://lorca.act.uji.es/projects/qtarmsim».

Este capítulo se ha organizado como sigue. Comienza con una breve
descripción del ensamblador de ARM. El segundo apartado describe
la aplicación Qt ARMSim. Los siguientes tres apartados proporcionan
información sobre aquellas directivas e instrucciones del ensamblador de
ARM que serán utilizadas con más frecuencia a lo largo del libro. En
concreto, el Apartado 1.3 muestra cómo utilizar literales y constantes; el
Apartado 1.4 cómo inicializar datos y reservar espacio de memoria; y el
Apartado 1.5 las instrucciones de carga y almacenamiento. Finalmente,
se proponen una serie de ejercicios adicionales.

Para complementar la información mostrada en este capítulo y ob-
tener otro punto de vista sobre este tema, se puede consultar el Apar-
tado 3.4 «ARM Assembly Language» del libro «Computer Organization
and Architecture: Themes and Variations» de Alan Clements. Conviene
tener en cuenta que en dicho apartado se utiliza el juego de instruccio-
nes ARM de 32 bits y la sintaxis del compilador de ARM, mientras que
1ARMSim es un simulador de ARM desarrollado por Germán Fabregat Llueca

que se distribuye conjuntamente con Qt ARMSim.

1.1. Introducción al ensamblador Thumb de ARM

3

en este libro se describe el juego de instrucciones Thumb de ARM y la
sintaxis del compilador GCC.

1.1.

Introducción al ensamblador Thumb de
ARM

Aunque se irán mostrando más detalles sobre la sintaxis del lengua-
je ensamblador Thumb de ARM conforme vaya avanzando el libro, es
conveniente familiarizarse cuanto antes con algunos conceptos básicos
relativos a la programación en ensamblador.

Es más, antes de comenzar con el lenguaje ensamblador propiamente
dicho, es conveniente diferenciar entre «código máquina» y «lenguaje
ensamblador».

El código máquina es el lenguaje que entiende el procesador. Una
instrucción en código máquina es una secuencia de ceros y unos que el
procesador es capaz de reconocer como una instrucción y, por tanto, de
ejecutar.

Por ejemplo, un procesador basado en la arquitectura ARM reco-
nocería la secuencia de bits 0001100010001011 como una instrucción
máquina que forma parte de su repertorio de instrucciones y que le in-
dica que debe sumar los registros r1 y r2 y almacenar el resultado de
dicha suma en el registro r3 (es decir, [r3] ← [r1] + [r2], en notación
RTL).

Cada instrucción máquina codifica en ceros y unos la operación que
se quiere realizar, los operandos con los que se ha de realizar la operación
y el operando en el que se ha de guardar el resultado. Por tanto, la
secuencia de bits del ejemplo sería distinta si se quisiera realizar una
operación que no fuera la suma, si los registros con los que se quisiera
operar no fueran los registros r1 y r2, o si el operando destino no fuera
el registro r3.

Ahora que sabemos qué es una instrucción (en código) máquina, ¿qué
es un programa en código máquina? Un programa en código máquina
es simplemente una secuencia de instrucciones máquina que cuando se
ejecutan realizan una determinada tarea.

Como es fácil de imaginar, desarrollar programas en código máquina,
teniendo que codificar a mano cada instrucción mediante su secuencia
de unos y ceros correspondiente, es una tarea sumamente ardua y pro-
pensa a errores. No es de extrañar que tan pronto como fue posible,
se desarrollaran programas capaces de leer instrucciones escritas en un
lenguaje más cercano al humano y de codificarlas en los unos y ceros
que forman las instrucciones máquina correspondientes.

El lenguaje de programación que se limita a representar el lenguaje
de la máquina, pero de una forma más cercana al lenguaje humano, re-

1.1. Introducción al ensamblador Thumb de ARM

4

cibe el nombre de lenguaje ensamblador. Aunque este lenguaje es más
asequible para nosotros que las secuencias de ceros y unos, sigue estando
estrechamente ligado al código máquina. Así pues, el lenguaje ensam-
blador entra dentro de la categoría de lenguajes de programación de bajo
nivel, ya que está fuertemente relacionado con el hardware en el que se
puede utilizar.

El lenguaje ensamblador permite escribir las instrucciones máquina
en forma de texto. Así pues, la instrucción máquina del ejemplo ante-
rior, 0001100010001011, se escribiría en el lenguaje ensamblador Thumb
de ARM como «add r3, r1, r2». Lo que obviamente es más fácil de
entender que 0001100010001011, por muy poco inglés que sepamos.

Para hacernos una idea de cuán relacionado está el lenguaje en-
samblador con la arquitectura a la que representa, basta con ver que
incluso en una instrucción tan básica como «add r3, r1, r2», podría-
mos encontrar diferencias de sintaxis con el lenguaje ensamblador de
otras arquitecturas. Por ejemplo, la misma instrucción se escribe como
«add $3, $1, $2» en el lenguaje ensamblador de la arquitectura MIPS.
No obstante lo anterior, podemos considerar que los lenguajes ensam-
bladores de las diferentes arquitecturas son más bien como dialectos, no
son idiomas completamente diferentes. Aunque puede haber diferencias
de sintaxis, las diferencias no son demasiado grandes. Por tanto, una vez
que se sabe programar en el lenguaje ensamblador de una determinada
arquitectura, no cuesta demasiado adaptarse al lenguaje ensamblador
de otra arquitectura. Esto es debido a que las distintas arquitecturas de
procesadores no son tan radicalmente distintas desde el punto de vista
de su programación en ensamblador.

Como se había comentado anteriormente, uno de los hitos en el desa-
rrollo de la computación consistió en el desarrollo de programas capaces
de leer un lenguaje más cercano a nosotros y traducirlo a una secuencia
de instrucciones máquina que el procesador fuera capaz de interpretar
y ejecutar.

Uno de estos programas, el programa capaz de traducir lenguaje
ensamblador a código máquina recibe el imaginativo nombre de ensam-
blador. Dicho programa lee un fichero de texto con el código en ensam-
blador y genera un fichero de instrucciones en código máquina que el
procesador entiende directamente.

Es fácil darse cuenta de que una vez desarrollado un programa capaz
de traducir instrucciones en ensamblador a código máquina, el siguien-
te paso natural haya sido el de añadir más características al lenguaje
ensamblador que hicieran más fácil la programación a bajo nivel. Así
pues, el lenguaje ensamblador también proporciona una serie de recur-
sos adicionales destinados a facilitar la programación en dicho lenguaje.
A continuación se muestran algunos de dichos recursos, particularizados
para el caso del lenguaje ensamblador de GNU para ARM:

1.1. Introducción al ensamblador Thumb de ARM

5

Comentarios Sirven para dejar por escrito qué es lo que está haciendo
alguna parte del programa y para mejorar su legibilidad señalando
las partes que lo forman.
Si comentar un programa cuando se utiliza un lenguaje de alto
nivel se considera una buena práctica de programación, cuando se
programa en lenguaje ensamblador es prácticamente imprescindi-
ble comentar el código para poder saber de un vistazo
  • Links de descarga
http://lwp-l.com/pdf15958

Comentarios de: Introducción a la arquitectura de computadores con Qt ARMSim y Arduino (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad