Bienvenido: Ingresar

Empty target given.

Quitar mensaje
location: WebHome / ASMIntroduccionARM

El presente texto, pretende ser una introducción a las instrucciones de un microprocesador con núcleo ARM7TDMI-S.

La información fue extraída del ARM Architecture Reference Manual y ARM7TDMI-S Revision: r4p3 Technical Reference Manual, ambas publicaciones se pueden encontrar en Bibliografía

Set de Instrucciones del ARM

El Set de instrucciones del ARM puede ser dividido en 6 categorías generales

La mayoría de las instrucciones de procesamiento de datos puede actualizar las cuatro banderas de condiciones en el CPSR ([N]Negativo, [Z]Cero, [C]Acarreo y [V]Desborde) de acuerdo a su resultado

Además todas las instrucciones ARM contiene un campo de 4bit condicional ubicado en el extremo mas significativo, un valor especifico de este campo determina la ejecución incondicional de la instrucción, otros 14 valores condicionan la ejecución de la instrucción, si la las banderas indica que la correspondiente condición es verdadera, entonces la instrucción es ejecutada, caso contrario no ocurre nada y continua a la próxima instrucción.

El nemónico de la condición y su significado se puede ver en la siguiente tabla.

Opcode

Mnemónico

Significado

Condición

0000

EQ

Igual

Z = 1

0001

NE

Distintos

Z = 0

0010

CS/HS

Acarreo / Sobre o igual

C = 1

0011

CC/LO

Sin Acarreo / Debajo

C = 0

0100

MI

Negativo

N = 1

0101

PL

Positivo o Cero

N = 0

0110

VS

Desborde

V = 1

0111

VC

Sin desborde

V = 0

1000

HI

Sobre

C = 1 y Z = 0

1001

LS

Debajo o Igual

C = 0 o Z = 1

1010

GE

Mayor o Igual

N = V

1011

LT

Menor

N <> V

1100

GT

Mayor

Z = 0 y N = V

1101

LE

Menor o Igual

Z = 1 o N <> V

1110

AL

Sin Condición

1111

No Usado

Estas 14 condiciones, permiten:

Instrucciones de Salto

Así como cualquier instrucción de procesamiento de dato o instrucciones de carga pueden cambiar el flujo del programa simplemente escribiendo el PC, una instrucción estándar de Salto, provee un número de 24bit con signo como corrimiento, permitiendo realizar saltos hacia arriba o abajo dentro de una brecha de +/-32Mb.

Existe también un salto con vinculo o mejor dicho preservando el vinculo, (BL) esta instrucción antes de realizar el salto guarda la posición de la instrucción precedente a la instrucción de salto en R14 o LR, esto provee a la subrutina la posibilidad de retornar desde donde fue llamada copiando simplemente LR a PC.

Las Instrucciones de salto permiten además cambiar de modo de operación ( de ARM a Thumb o de Thumb a ARM ), llamar a subrutinas escritas en ARM desde Thumb o rutinas escritas en Thumb desde ARM.

Descripción

Instrucciones de Procesamiento de Datos

Las instrucciones de procesamiento de datos, realizan cálculos en los registros de propósitos generales.

Se dividen en tres categorías:

Instrucciones Aritméticas / lógicas

Realizan operaciones aritméticas y lógicas en uno o dos operandos y escriben el resultado en un registro destino.

Además pueden opcionalmente actualizar los códigos de condición basándose en el resultado.

El primer operador debe ser siempre un registro, el otro operador puede ser:

En este último caso, se pueden especificar cinco tipos de corrimientos, esto permite que cada instrucción aritmética/lógica pueda realizar además un corrimiento, como resultado, ARM no posee instrucciones de corrimiento dedicadas.

El Contador de Programa (PC) al ser un registro de propósitos generales, las instrucciones aritméticas/lógicas pueden escribir en él un nuevo valor, permitiendo otra via para implementar saltos.

Descripción

Instrucciones de Comparación

Estas instrucciones poseen el mismo formato que las Aritméticas/Lógicas, realizan también una operación A/L, pero no escriben el resultado en un registro, ellas solo actualizan las banderas de condición, basándose en el resultado.

Los operandos poseen las mismas características de las A/L incluyendo la posibilidad de incorporar un corrimiento a uno de los operadores.

Descripción

Instrucciones de Multiplicación

Realizan operaciones de multiplicación con enteros.

Podemos distinguir dos tipo de instrucciones de multiplicación

Denominación

Tamaño op.

Resultado

Normal

32bits x 32bits

32 bits (inferiores)

Long

32bits x 32bits

64bits.

Descripción

Instrucciones de transferencias del registro Status

Las instrucciones de transferencias del registro Status, transfieren desde o hacia CPSR o SPSR con un registro de propósitos múltiples.

Modificando el CPSR se puede:

Descripción

Instrucciones de Carga y Almacenamiento

Las Instrucciones de carga y almacenamiento, realizan transferencias de datos entre los registros de propósitos múltiples y la memoria.

Se dividen en:

Existen también instrucciones de intercambio de bytes, pero no se recomienda su uso por estar consideradas obsoletas en versiones posteriores del ARM.

Carga y Almacenamiento de Registros

Una instrucción de carga, permiten cargar un word (32bits), un halfword (16bits), o un byte (8bits) desde memoria a un registro, los bytes o halfword pueden ser automáticamente completados con cero o signo cuando son cargados, dependiendo de la instrucción.

Una instrucción de almacenamiento, permite guardar en memoria un word (32bits), un halfword (16bits), o un byte (8bits) desde un registro.

Debe tenerse en cuenta que al guardar o cargar un word (32bits) la memoria debe estar alineada a 32 bits, caso contrario, puede afectar al valor guardado o leído de manera impredecible.

Con respecto al direccionamiento de estas instrucciones, tienen tres modos, todos utilizan un registro base y un corrimiento especificados en la instrucción:

En todos los casos, el corrimiento puede ser un valor inmediato, un registro de propósitos múltiples o un registro de propósitos múltiples con un corrimiento fijo.

Como el PC es un registro de propósito general un valor de 32 bits puede ser cargado directamente de memoria, pudiendo de esta forma acceder a cualquiera de los 4GB del mapa

Descripción

Carga y Almacenamiento de Registros Múltiples

Las instrucciones de Carga Múltiple (LDM) y Almacenamiento Múltiple (STM), realizan una transferencia de un conjunto de registro de propósitos múltiples hacia o desde la la memoria.

Existen cuatro modos de direccionamiento

El registro base es especificado por un registro, el cual puede ser opcionalmente actualizando después de la transferencia.

En el caso de la subrutinas, el uso de las LDM y STM en las entrada y salida es utilizado de la siguiente forma:

Las instrucciones LDM y STM permite construir eficientes código para copiar y/o procesar bloques de datos.

Descripción

Instrucciones para la generación de excepciones

Existen dos tipos de instrucciones designadas para causar una excepción específica

Instrucciones de interrupción por software

Las instrucciones SWI, causan que ocurra una excepción por interrupción de software.

Ellas son usadas normalmente para realizar llamadas al sistema operativo, requiriendo un servicio definido por el SO.

Esta excepción causan también un cambio en los privilegios del modo del procesador, esto permite realizar acceso a tareas con privilegios, pero solo a través del control del SO.

Instrucción de Breakpoint por Software

Las instrucciones BKPT genera una excepción de aborto.

En el caso de tener un debugger instalado en el vector de aborto, una excepción generada de esta forma es tratada como un breakpoint.

Si esta presente en el sistema un debug por hardware, esto puede dar lugar directamente al tratamiento de la BKPT como un breakpoint, previniendo que se produzca efectivamente la excepción de aborto.

Para terminar, los siguientes tipos de instrucciones causan un excepción indefinida:

Las excepciones indefinidas, son normalmente usadas, ya sea para generar un error o para iniciar el software de emulación de la instrucción.