0% encontró este documento útil (0 votos)
99 vistas101 páginas

Modos de Direccionamiento en ARM

El documento describe los modos de direccionamiento y el conjunto de instrucciones del procesador ARM. Explica que hay siete modos de direccionamiento principales, incluidos el modo de direccionamiento inmediato y el modo de direccionamiento con desplazamiento al registro. También describe el lenguaje ensamblador ARM y su sintaxis, y explica por qué es útil aprender ensamblador.

Cargado por

Javier GH
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

Temas abordados

  • Instrucciones de carga y almac…,
  • IDE para microcontroladores,
  • Control de flujo,
  • Instrucciones de configuración,
  • Lenguaje de alto nivel,
  • Instrucciones de desplazamient…,
  • Lenguaje de bajo nivel,
  • Operaciones aritméticas,
  • Big Endian,
  • Instrucciones de barrera de me…
0% encontró este documento útil (0 votos)
99 vistas101 páginas

Modos de Direccionamiento en ARM

El documento describe los modos de direccionamiento y el conjunto de instrucciones del procesador ARM. Explica que hay siete modos de direccionamiento principales, incluidos el modo de direccionamiento inmediato y el modo de direccionamiento con desplazamiento al registro. También describe el lenguaje ensamblador ARM y su sintaxis, y explica por qué es útil aprender ensamblador.

Cargado por

Javier GH
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

Temas abordados

  • Instrucciones de carga y almac…,
  • IDE para microcontroladores,
  • Control de flujo,
  • Instrucciones de configuración,
  • Lenguaje de alto nivel,
  • Instrucciones de desplazamient…,
  • Lenguaje de bajo nivel,
  • Operaciones aritméticas,
  • Big Endian,
  • Instrucciones de barrera de me…

UNIVERSIDAD NACIONAL AUTÓNOMA DE

MEXICO
FACULTAD DE INGENIERÍA

Microprocesadores y Microcontroladores

III. Modos de direccionamiento y


conjunto de instrucciones
LITTLE ENDIAN VS BIG ENDIAN

El byte menos significativo se coloca en la dirección menos


significativa y el byte MSB se coloca en la dirección mas alta,
esta convención es llamada Little endian, en contraste con big
endian.
Valor Memoria Direccion Valor Memoria Direccion
E0 000B 01 000B
82 000A 30 000A
E0 82 30 01 30 0009 E0 82 30 01 82 0009
01 0008 E0 0008

Little Endian Big Endian


CAPACIDAD DE LA MEMORIA

¿ cuantas direcciones de memoria se pueden acceder con 32


bits?
232 = 4294967296
Aproximadamente 4 Gigas
Dentro de la memoria, esta esta organizada por direcciones que
contienen solamente palabras de 1 byte, por lo tanto, la memoria
efectiva será de un poco mas de 1 Giga.
CONJUNTO DE INSTRUCCIONES

• El procesador ARM es fácil de programar a nivel de


ensamblador. (Es un RISC)
• Aprenderemos la programación de ensamblador ARM a nivel de
usuario.
MODOS DE DIRECCIONAMIENTO Y CONJUNTO DE
INSTRUCCIONES

Modo de direccionamiento
✓ El modo de direccionamiento es el formato que utiliza la
instrucción para especificar la localidad de memoria para leer o
escribir datos;

✓ Todas las instrucciones inician cuando son apuntadas por el


PC y extraídas de memoria (código de operación y operando) ;

✓ Algunas instrucciones operan directamente en el procesador y


no requieren alcanzar datos de memoria (interacción con
registros)

Microcontroladores y Microprocesadores
MODOS DE DIRECCIONAMIENTO Y CONJUNTO DE
INSTRUCCIONES
Modo de direccionamiento inmediato

En el modo de direccionamiento inmediato el dato es contenido en la


instrucción;
MOV R0,#100 ; R0=100 , direccionamiento inmediato

Dirección EEPROM
0x00000260
R0 0x 0064
0x00000264 F04F 0064 MOV R0,#100

0x00000268
PC 0x00000264
0x000002C6

 El direccionamiento inmediato se utiliza solo para tomar, cargar o leer


datos;
 La instrucción MOV nunca se utilizara como una instrucción para
almacenar datos en memoria;

Microcontroladores y Microprocesadores
MODOS DE DIRECCIONAMIENTO Y CONJUNTO DE
INSTRUCCIONES

Dirección EEPROM
0x00000142

0x00000144

0x00000146

0x00000148 6808 LDR R0,[R1]

PC 0x 00000144

Dirección RAM
R0 0x12345678
0x20000000

0x20000004 0x12345678
R1 0x20000004
0x20000008

0x2000000C

Microcontroladores y Microprocesadores
MODOS DE DIRECCIONAMIENTO Y CONJUNTO DE
INSTRUCCIONES
Modo de direccionamiento PRE indexado

El dato se encuentra en memoria y un registro contiene un apuntador al dato;


LDR R0, [R1,#4] ,R0 = valor apuntado por R1+4
Dirección EEPROM
0x00000142

0x00000144

0x00000146 6848 LDR


PC 0x 00000146
R0,[R1+4]
0x00000148

Dirección RAM
R0 0xF5A7D98E
0x20000000

0x20000004
R1 0x20000004
0x20000008 0xF5A7D98E R1+4

0x2000000C
 R1 no se modifica por la instrucción

Microcontroladores y Microprocesadores
MODOS DE DIRECCIONAMIENTO Y CONJUNTO DE
INSTRUCCIONES
Modo de direccionamiento
Generalmente hay siete modos de direccionamiento usados en el lenguaje
ensamblador del ARM Cortex-M4 y son:

1. Modo de direccionamiento inmediato


1. Modo de direccionamiento de desplazamiento inmediato regular
2. Modo de direccionamiento de desplazamiento inmediato pre-indexado
3. Modo de direccionamiento de desplazamiento inmediato post-indexado
4. Modo de direccionamiento de desplazamiento inmediato regular con acceso no
privilegiado
2. Modo de direccionamiento con desplazamiento al registro
3. Modo de direccionamiento relativo del PC
4. Modo de direccionamiento de cargar y almacenamiento a múltiples
registros

Microcontroladores y Microprocesadores
MODOS DE DIRECCIONAMIENTO Y CONJUNTO DE
INSTRUCCIONES
Modo de direccionamiento

5. Modo de direccionamiento al registro PUSH y POP


6. Modo de direccionamiento exclusivo de carga y almacenamiento de
registros
7. Modo de direccionamiento inherente

Microcontroladores y Microprocesadores
CONJUNTO DE INSTRUCCIONES
PROCESADORES ARM

Thumb, permite que una mezcla de instrucciones de 16 bits y 32 bits se ejecute en un


solo estado de funcionamiento.
Todos los procesadores ARM Cortex-M se basan en la tecnología Thumb-2.

Microcontroladores y Microprocesadores
LENGUAJE ENSAMBLADOR ARM CORTEX-M

SINTAXIS
Las instrucciones en el Lenguaje Ensamblador tiene 4
campos separados por espacios
Etiqueta Opcode Operandos Comentarios
Funcion MOV R0, #100 ; esto pone R0 con 100
BX LR ; esta es la función return

1. El campo de etiquetas- especifica la posición en memoria (opcional)


2. El campo de código de operación- especifica el comando a ejecutar
3. El campo del operando – especifica donde encontrar el dato para
ejecutar la instrucción
4. El campo de comentario – es ignorado por el ensamblador pero
permite al usuario describir el software

Microcontroladores y Microprocesadores
LENGUAJE ENSAMBLADOR ARM CORTEX-M

 Ejemplo:

1. El programa ensamblador traduce el código fuente (lenguaje


ensamblador) a código objeto (lenguaje de máquina)

Microcontroladores y Microprocesadores
LENGUAJE ENSAMBLADOR ARM CORTEX-M

¿Para que aprender ensamblador?

✓ En algún caso especifico se puede requerir optimizar una aplicación en


su máxima velocidad de ejecución o en su mínimo tamaño de memoria.
✓ → Escribir segmentos de código en lenguaje ensamblador es una
estrategia para alcanzar esta aproximación.

✓ Si podemos analizar el código ensamblador generado por el compilador


de nuestro código en C, podemos entender que es lo que está
realizando nuestro software
✓ → A partir de este entendimiento podemos evaluar, depurar y
optimizar nuestro sistema.

Microcontroladores y Microprocesadores
NIVELES EN LENGUAJE DE COMPUTADORAS

Lenguaje de Alto Nivel


Este un lenguaje fácil de ser entendido por los seres humanos. Pero no
puede ser entendido por los microcontroladores.
 C / C ++, Visual C ++, Visual [Link], Visual C # y Java.
El lenguaje de alto nivel es independiente de la computadora o de la
máquina, lo que significa que este tipo de lenguaje puede ser entendido
por cualquier computadora con cualquier sistema operativo.
Se necesita un traductor o intérprete para convertir las instrucciones
del lenguaje de alto nivel en las instrucciones de bajo nivel para
permitir que los microcontroladores las entiendan y ejecuten.

Microcontroladores y Microprocesadores
NIVELES EN LENGUAJE DE COMPUTADORAS

Lenguaje de Bajo Nivel


Este tipo de lenguaje está compuesto de código binario o secuencia de
código de máquina, como 01101110.
 El lenguaje de bajo nivel es un lenguaje dependiente de computadora o
máquina, lo que significa que diferentes microcontroladores tienen su
propio idioma y no pueden ser reconocidos por otros
microprocesadores o microcontroladores.
El lenguaje ensamblador es un Lenguaje de Bajo Nivel

Microcontroladores y Microprocesadores
PROCESO PARA EL DESARROLLO DE
SOFTWARE

Integrated Developed Enviroment (IDE) para Microcontroladores


Cortex M:
✓ ARM Keil uVision

✓ Code Composer Studio (CCStudio) de Texas Instruments

Los IDE contienen:


Editor
Programa Ensamblador
Compilador
Simulador

Pueden ser utilizados para depurar y bajar el programa al


microcontrolador

Microcontroladores y Microprocesadores
INTEGRATED DEVELOPED ENVIROMENT (IDE)

Editor
✓ Permite crear código fuente o lenguaje ensamblador
✓ El código fuente contiene un conjunto especifico de comandos en forma leíble
para un humano.

Programa Ensamblador
Un programa utilitario que traduce sentencias del lenguaje ensamblador
al código de máquina o código objeto
A partir de la mayoría de los códigos de fuente se genera una
traducción uno a uno a código de máquina es decir una línea de
ensamblador se traduce a una instrucción en código de máquina (al
contrario que en los lenguajes de alto nivel donde una declaración
genera mucho código de máquina)

Microcontroladores y Microprocesadores
INTEGRATED DEVELOPED ENVIROMENT (IDE)

Compilador
En caso de que se programe en un lenguaje de alto nivel el compilador
traduce a lenguaje de máquina

Simulador
✓ El IDE permite simular el programa y depurarlo

Carga de programa
El IDE permite cargar al programa a la memoria del microcontrolador y
depurarlo

Microcontroladores y Microprocesadores
CONJUNTO DE INSTRUCCIONES EN ARM
CORTEX M4

Hay aproximadamente 203 instrucciones en el conjunto de


instrucciones ARM Cortex-M4 sin incluir las instrucciones relacionadas
con FPU.
Todas estas instrucciones se pueden categorizarse en 14 grupos
basados en las funciones de esas instrucciones.
Estos grupos incluyen:
1. Instrucciones para movimiento de datos
2. Instrucciones Aritméticas
3. Instrucciones de lógica
4. Instrucciones para desplazar y rotar
5. Instrucciones de conversión de datos
6. Instrucciones de procesamiento de campo de bits
7. Instrucciones de comparación y prueba
8. Instrucciones de Control de Flujo del Programa
Microcontroladores y Microprocesadores
9. Instrucciones de Saturación
10. Instrucciones relacionadas con excepciones
11. Instrucciones de modo de reposo (wait)
12. Instrucciones de Barrera de Memoria
13. Instrucciones Diversas
14. Instrucciones no admitidas (soportadas)

Otros autores indican que estas se pueden condensar en solo 8 tipos:


A. Instrucciones de procesamiento de datos
B. Intercambio de datos únicos
C. Instrucciones de cambio y rotación
D. Instrucciones incondicionales e instrucciones condicionales
E. Operaciones de pila
F. Salto
G. Instrucciones de multiplicación
E: transferencia de datos

Microcontroladores y Microprocesadores
INSTRUCCIONES PARA MOVER DATOS

Instrucción para mover datos sin acceso a memoria

MOV Rd, Op2


✓ Instrucción que copia el valor de Op2 en Rd.
✓ Es útil para mover valores de 32 bits de un registro a otro y para inicializar
registros con un valor constante.

MOV {S} {cond} Rd, Op2

MOV {cond} Rd, #imm16


S - sufijo opcional para habilitar las banderas de condición
{cond} - código opcional de condición
Rd - es el registro destino
Op2 -es un segundo operando flexible, un registro, una constante o un parámetro
especificado por una instrucción.
imm16 - es cualquier valor en el rango entre 0-65535
Microcontroladores y Microprocesadores
INSTRUCCIONES PARA MOVER DATOS

Instrucción para mover datos sin acceso a memoria

MOV Rd, Op2


✓ Instrucción que copia el valor de Op2 en Rd.
✓ Es útil para mover valores de 32 bits de un registro a otro y para inicializar
registros con un valor constante.

MOV {S} {cond} Rd, Op2

Op2 puede ser una constante de 32 bits, donde X , Y son dígitos hexadecimales,
producidos mediante el corrimiento de un valor de 8 bits no signado hacia la izquierda con
las siguientes formas:

✓ 0x00XY00XY
✓ 0xXY00XY00
✓ 0xXYXYXYXY

Microcontroladores y Microprocesadores
INSTRUCCIONES PARA MOVER DATOS

Para cargar datos de 32 bits sin acceso a memoria

MOVT Rd, #0xD3F4


✓ Instrucción que copia el valor de 0xD3F4 a la parte superior de Rd.

Rd → D3F4_ _ _ _

MOVW Rd, #0x6E5A


✓ Instrucción que copia el valor de0x6E5A a la parte inferior de Rd.

Rd → _ _ _ _ 6E5A

Microcontroladores y Microprocesadores
INSTRUCCIONES PARA MOVER DATOS

The Definitive Guide to ARM Cortex-M3 and Cortex-M4 Processors


Third Edition, Joseph Yiu
ARM Ltd., Cambridge, UK

Microcontroladores y Microprocesadores
INSTRUCCIONES PARA MOVER DATOS
Instrucciones con acceso a memoria
Instrucción que carga datos desde memoria a un registro

LDR {type} {cond} Rt, [ Rn ]

{type} – determina el tamaño de la palabra que se guardara


{cond} - código opcional de condición
Rt - registro destino
Rn - registro en que se basa la dirección de memoria
Offset - offset desde Rn
Rm - es un registro que contiene un valor que se usara como offset

Microcontroladores y Microprocesadores
INSTRUCCIONES PARA MOVER DATOS

Instrucciones con acceso a memoria


Instrucción que almacena datos desde un registro a memoria

STR {type} {cond} Rt, [ Rn ]

{type} – determina el tamaño de la palabra que se guardará


{cond} - código opcional de condición
Rt - registro fuente
Rn - registro en que se basa la dirección de memoria
Offset - offset desde Rn
Rm - es un registro que contiene un valor que se usara como offset

Microcontroladores y Microprocesadores
MODOS DE DIRECCIONAMIENTO
Modo de Sintaxis Direccion efectiva Valor Rm después
direccionamiento de memoria de la ejecución

Pre-Indexado LDR Rd, [Rm, #k] Rm + #k Rm


Pre-Indexado con LDR Rd, [Rm, #k]! Rm + #k Rm + #k
Writeback
Post-Indexado LDR Rd, [Rm], #k Rm Rm + #k

Offset Sintaxis Direccion apuntada


Valor fijo LDR Rd, [Rm, #k] Rm + #k
Registro de LDR Rd, [Rm, Rn, <shift>] Rm + (Rn desplazado <shift>)
desplazamiento

Rd y Rm, son registros y #k es un valor signado inmediato de 12 bits entre -4095 y +4095
<shift>, Una instrucción tal como LSL #2
SUFIJOS DE CONDICIONES

Microcontroladores y Microprocesadores
EJERCICIO
Llevar a cabo un programa que ejecute las siguientes operaciones que
modifican tu numero de cuenta dentro de los registros especificados:
R0= #cuenta (truncado a 4 bytes )
R1= 16 bits de la parte baja del # cuenta
R2= 16 bits en la parte alta del #cuenta
R3= Dirección RAM (0x2000000F), donde se escribirá #cuenta
R4= Valor de la lectura contenida en la RAM (2000006b), “tu numero telefónico a
32 bits”
R5= Valor obtenido de una operación lógica que desprende el siguiente formato
00----0-, donde ---- son los dígitos centrales de tu numero de cuenta.
INSTRUCCIONES DE OPERACIONES LÓGICAS

Operaciones lógicas
 Se cuenta con operaciones lógicas y de corrimiento para combinar
información, extraer información y para realizar pruebas;

 Las operaciones lógicas en el ARM Cortex toman dos entradas, una de


un registro y la otra de un segundo operador flexible, estas
operaciones son ejecutadas en modo de 32 bits, bit por bit.

Microcontroladores y Microprocesadores
INSTRUCCIONES DE OPERACIONES LÓGICAS

Operaciones lógicas

Operaciones lógicas en Cortex M

A B A&B A|B A^B A&(~B) A|(~B)


Rn 2do AND ORR EOR BIC ORN
operando

0 0 0 0 0 0 1
0 1 0 1 1 0 0
1 0 0 1 1 1 1
1 1 1 1 0 0 1

Microcontroladores y Microprocesadores
INSTRUCCIONES DE OPERACIONES LÓGICAS

Operaciones lógicas

ORR
OR lógico de 32 bits

✓ Sintaxis

ORR {S} {cond} {Rd}, Rn, Op2

S - sufijo opcional para habilitar las banderas de condición


{cond} - código opcional de condición
Rd - es el registro destino (si es omitido el registro destino es Rn)
Rn - es el registro que tiene al primer operando
Op2 - es el segundo operando flexible

Microcontroladores y Microprocesadores
INSTRUCCIONES DE OPERACIONES LÓGICAS

Operaciones lógicas

AND
AND lógico de 32 bits

✓ Sintaxis

AND {S} {cond} {Rd}, Rn, Op2

S - sufijo opcional para habilitar las banderas de condición


{cond} - código opcional de condición
Rd - es el registro destino (si es omitido el registro destino es Rn)
Rn - es el registro que tiene al primer operando
Op2 - es el segundo operando flexible

Microcontroladores y Microprocesadores
INSTRUCCIONES DE OPERACIONES LÓGICAS

Operaciones lógicas

EOR
XOR lógico de 32 bits

✓ Sintaxis

EOR {S} {cond} {Rd}, Rn, Op2

S - sufijo opcional para habilitar las banderas de condición


{cond} - código opcional de condición
Rd - es el registro destino (si es omitido el registro destino es Rn)
Rn - es el registro que tiene al primer operando
Op2 - es el segundo operando flexible

Microcontroladores y Microprocesadores
BIC Bit Clear.
Sintaxis

BIC {S} {cond} Rd, Rn, Operand2


dónde:

{cond}, es un código de condición opcional

{S} es un sufijo opcional. Si S se especifica, las banderas


del código de condición se actualizan en el resultado de la
operación.

Rd es el registro ARM del resultado (Destino).

Rn es el registro ARM que contiene el primer operando.

Operand2 es un segundo operando flexible.

La instrucción BIC (BIt Clear) realiza una


operación AND en los bits de entrada Rn con
los complementos de los bits
correspondientes en el valor de Operand2.

Bit clear (Rd)=Rn and ~Oper2


INSTRUCCIONES PARA CAMBIAR Y GIRAR

Operaciones de desplazamiento

1 ≤ n ≤ 32

Microcontroladores y Microprocesadores
INSTRUCCIONES PARA CAMBIAR Y GIRAR
Operaciones de desplazamiento

LSR
Desplazamiento de 32 bits a la derecha

✓ Sintaxis
LSR {S} {cond} Rd Rm Rs
LSR {S} {cond} Rd Rm #n
S - es un sufijo opcional, si se especifica las banderas de condición del código se actualizan
{cond} - condición opcional (ver tabla )
Rd - es el registro destino
Rm - es el registro que tiene el valor que será desplazado
Rs - es el registro que tiene la longitud del desplazamiento a aplicar a Rm (solo 0 a 255)
n - es la longitud de desplazamiento

Microcontroladores y Microprocesadores
INSTRUCCIONES PARA CAMBIAR Y GIRAR

Operaciones de desplazamiento

ASR
Desplazamiento Aritmético de 32 bits a la derecha

✓ Sintaxis
ASR {S} {cond} Rd Rm Rs
ASR {S} {cond} Rd Rm #n
S - es un sufijo opcional, si se especifica las banderas de condición del código se actualizan
{cond} - condición opcional (ver tabla 3.2)
Rd - es el registro destino
Rm - es el registro que tiene el valor que será desplazado
Rs - es el registro que tiene la longitud del desplazamiento a aplicar a Rm (solo 0 a 255)
n - es la longitud de desplazamiento

Microcontroladores y Microprocesadores
INSTRUCCIONES PARA CAMBIAR Y GIRAR

Operaciones de desplazamiento

LSL
Desplazamiento lógico de 32 bits a la izquierda
✓ Sintaxis
LSL {S} {cond} Rd Rm Rs
LSL {S} {cond} Rd Rm #n
S - es un sufijo opcional, si se especifica las banderas de condición del código se actualizan
{cond} - condición opcional (ver tabla 3.2)
Rd - es el registro destino
Rm - es el registro que tiene el valor que será desplazado
Rs - es el registro que tiene la longitud del desplazamiento a aplicar a Rm (solo 0 a 255)
n - es la longitud de desplazamiento ( 0 a 31)

Microcontroladores y Microprocesadores
INSTRUCCIONES PARA CAMBIAR Y GIRAR
Operaciones de Rotación
ROR {S} {cond} Rd Rm Rs
ROR {S} {cond} Rd Rm #n
Rotación lógica de 32 bits a la derecha

S - es un sufijo opcional, si se especifica las banderas de condición del código se actualizan


{cond} - condición opcional (ver tabla 3.2)
Rd - es el registro destino
Rm - es el registro que tiene el valor que será desplazado
Rs - es el registro que tiene la longitud del desplazamiento a aplicar a Rm (solo 0 a 255)
n - es la longitud de desplazamiento ( 0 a 31)

Microcontroladores y Microprocesadores
INSTRUCCIONES PARA CAMBIAR Y GIRAR
Operaciones de desplazamiento

RRX
Desplazamiento a la derecha por un bit a la derecha, esta operación
hace uso del bit Carry como el bit 33

Sintaxis
RRX Rd, Rm

; Rotación a la derecha extendida y coloca el resultado


MOV R0, R0, RRX
dentro de R0
INSTRUCCIONES ARITMÉTICAS

Operaciones aritméticas
SUMADOR
CIN

+ 0 a
0 b
------------
Cout s

a s
b
cin cout

Microcontroladores y Microprocesadores
INSTRUCCIONES ARITMÉTICAS

Operaciones aritméticas
Sumador con acarreo en cascada
a s
b
cin cout

Microcontroladores y Microprocesadores
INSTRUCCIONES ARITMÉTICAS

Operaciones aritméticas
 La sustracción y la adición trabajan con valores signados y no
signados;

 Como diseñadores, nosotros debemos conocer previamente si


tenemos números signados o no signados;

 El procesador no puede decir desde el binario cual tipo de número es,


por lo tanto valida las banderas C y V;

 Nuestro trabajo como programadores es ver a la bandera C si los


valores son no signados y ver a V si los valores son signados.

Microcontroladores y Microprocesadores
INSTRUCCIONES ARITMÉTICAS

Resumen operación de números con complemento a 2

✓ Rango -2m-1 hasta 2m-1 – 1

✓ Se representa un número negativo mediante el complemento a 2 del


número

✓ Regla de desbordamiento: si dos números con el mismo signo se


suman, existe un sobre flujo si el resultado tiene un signo opuesto

✓ Para substraer B de A, toma el complemento de 2 de B y se suma a A

Microcontroladores y Microprocesadores
INSTRUCCIONES ARITMÉTICAS

Representación de un entero en complemento a 2


4 bits

Microcontroladores y Microprocesadores
INSTRUCCIONES ARITMÉTICAS
Complemento a 2
 Simplifican la operación de sustracción y las manipulaciones lógicas;
Para un número positivo N en base 2 con parte entera de m dígitos:

El complemento de 2 de N → 2m – N , para N≠0


0 , para N=0

Ejemplo:
El complemento de 2 de (101100)2

→ 26 - (101100)2 =

(1000000 – 101100)2 = 010100

Se observa que el complemento de 2 puede ser formado dejando sin


cambio todos los ceros menos significativos y el primer digito menos
significativo diferente de cero, y luego remplazar los unos por ceros y
ceros por unos.
Microcontroladores y Microprocesadores
INSTRUCCIONES ARITMÉTICAS

Representación con complemento 2

𝑩 = 𝒃𝑵−𝟏 𝒃𝑵−𝟐 … . . 𝒃𝟏 𝒃𝟎 𝒅𝒐𝒏𝒅𝒆 𝒃𝒊 ∈ 𝟎, 𝟏

Bit de signo
Valor decimal

𝑫 𝑩 = −𝒃𝑵−𝟏 𝟐𝑵−𝟏 + 𝒃𝑵−𝟐 𝟐𝑵−𝟐 … . 𝒃𝟏 𝟐𝟏 + 𝒃𝟎 𝟐𝟎

Microcontroladores y Microprocesadores
INSTRUCCIONES ARITMÉTICAS
Sustracción de dos números positivos (M-N) en
base 2:

 El complemento de 2 de N → 2m_ N, para N≠0


0, para N=0

a) 𝑴 + 𝟐𝒎 − 𝑵 ≥ 𝟐𝒎 𝒔𝒊 𝑴 ≥ 𝑵

En este caso la respuesta es positiva y se descarta el acarreo dado


por 2m

b) 𝑴 + 𝟐𝒎 − 𝑵 < 𝟐𝒎 𝒔𝒊 𝑴 < 𝑵
En este caso la respuesta es negativa e igual a –(N-M)
Este caso se detecta por la ausencia del acarreo final.
El número negativo esta en complemento.
La respuesta se obtiene sacando un segundo complemento y agregando un
signo negativo:
𝒎 𝒎
− 𝟐 − 𝑴+𝟐 −𝑵 =− 𝑵−𝑴

Microcontroladores y Microprocesadores
INSTRUCCIONES ARITMÉTICAS

Sustracción con complemento a 2


Sustracción de dos números positivos (M-N) en base 2:

✓ Se suma el minuendo M al complemento de 2 del sustraendo N

✓ Se inspeccionan si ocurre un “acarreo” final en los datos obtenidos en


el Paso 1

✓ Si ocurre un “acarreo” final, se debe descartar y se toma el resultado

✓ Si no ocurre un “acarreo” final, se toma el complemento del número


obtenido en el paso 1 y se coloca un número negativo al frente

Microcontroladores y Microprocesadores
INSTRUCCIONES ARITMÉTICAS

Ejemplo usando complemento de 2 para sustraer M-N:


M = 1010100
N = 1000100

1010100
+ 0111100
------------
acarreo final → 1 0010000

Resultado → 10000

Microcontroladores y Microprocesadores
INSTRUCCIONES ARITMÉTICAS
Ejemplo usando complemento de 2 para sustraer M-N:
M = 1000100
N = 1010100

1000100
+ 0101100
------------
No hay acarreo final → 1110000

Se obtiene complemento de 2 → 0010000

Resultado → -10000

Microcontroladores y Microprocesadores
INSTRUCCIONES ARITMÉTICAS

Se puede ignorar al acarreo

Microcontroladores y Microprocesadores
INSTRUCCIONES ARITMÉTICAS

Se puede ignorar al acarreo

Cuando se tiene dos números negativos


siempre se tendrá acarreo

Microcontroladores y Microprocesadores
INSTRUCCIONES ARITMÉTICAS
Bandera - acarreo – “carry”, C
 En una operación de 8 bits no signados, el bit “carry”, C, es validado cuando
se pasa de 255 a 0 durante la adición.

 El bit de “carry”, C, es limpiado cuando pasa de 0 a 255 en la substracción;

 El bit de “carry”, C, es validado después de una adición no signada cuando el


resultado es incorrecto;

 El bit de “carry”, C, es limpiado después de una sustracción no signada


cuando el resultado es incorrecto;

Microcontroladores y Microprocesadores
INSTRUCCIONES ARITMÉTICAS
Bandera – sobreflujo – “overload ”, V

 En la suma y adición de valores signados en complemento a dos se utilizan las


mismas instrucciónes

 La única diferencia es que el bit “carry”, C, no representa un error cuando se


suma o resta los números signados en complemento a dos;

 Para identificar errores se calcula un nuevo bit llamado “overflow”, V; validado


cuando se pasa de 127 a -128 durante la adición.

 El bit “overflow”, V, es validado cuando el resultado de una operación de


adición o substracción signada es incorrecto.

-32+64=32 V= 0  96+64= -96 V=1 X


Microcontroladores y Microprocesadores
INSTRUCCIONES ARITMÉTICAS

Operaciones aritméticas
 En las operaciones aritméticas en el ARM Cortex, el valor de 32 bits se
puede especificar por la constante #im12 o generado por el operando
flexible <op2>. Cuando Rd esta ausente , el resultado se ponen Rn.

Microcontroladores y Microprocesadores
MODOS DE DIRECCIONAMIENTO Y CONJUNTO DE
INSTRUCCIONES

Operaciones aritméticas
Multiplicación

14
x 11
----------

Microcontroladores y Microprocesadores
MODOS DE DIRECCIONAMIENTO Y CONJUNTO DE
INSTRUCCIONES

Operaciones aritméticas
Multiplicación

Microcontroladores y Microprocesadores
MODOS DE DIRECCIONAMIENTO Y CONJUNTO DE
INSTRUCCIONES

Operaciones aritméticas
Multiplicación

Microcontroladores y Microprocesadores
MODOS DE DIRECCIONAMIENTO Y CONJUNTO DE
INSTRUCCIONES
Operaciones aritméticas
Multiplicación

MUL – Multiplicación
MLA – Multiplicación con acumulador
MLS - Multiplicación con substracción

Usan operandos de 32 bits y producen 32 bits de resultados;


Estas tres instrucciones de multiplicación solo salvan los 32 últimos bits
del resultado;
Se pueden usar con números signados o no signados;
No se generan banderas de sobre flujo;
Si el sufijo S se agrega, entonces los bits Z y N son validados de acuerdo
al resultado.

Microcontroladores y Microprocesadores
MODOS DE DIRECCIONAMIENTO Y CONJUNTO DE
INSTRUCCIONES
Operaciones aritméticas
Multiplicación

Usan operandos de 32 bits y producen 64 bits de resultados;


Los registros RdLo y RdHi contienen los bits menos significativos y más
significativos respectivamente de los 64 bits de resultados
Estas instrucciones no activan banderas de condición;

Microcontroladores y Microprocesadores
MODOS DE DIRECCIONAMIENTO Y CONJUNTO DE
INSTRUCCIONES

UDIV
División no signada de 32 bits

✓ Sintaxis

{cond} - condición opcional (ver tabla 3.2)


Rd - es el registro destino
Rn - es el registro que tiene al valor a dividir
Rm - es el registro que tiene al divisor

Rd = Rn/ Rm

Si Rn no es divisible por Rm, el resultado se redondea a cero.

Microcontroladores y Microprocesadores
MODOS DE DIRECCIONAMIENTO Y CONJUNTO DE
INSTRUCCIONES

SDIV
División signada de 32 bits

✓ Sintaxis

{cond} - condición opcional (ver tabla 3.2)


Rd - es el registro destino
Rn - es el registro que tiene al valor a dividir
Rm - es el registro que tiene al divisor

Rd = Rn/ Rm

Si Rn no es divisible por Rm, el resultado se redondea a cero.

Microcontroladores y Microprocesadores
INSTRUCCIONES ARITMÉTICAS
Bits de condición (registro PSR)
 Los bits de condición contienen el estatus de la operación aritmética previa;

Bit Nombre Validado si después de adición o


sustracción
N Negativo Resultado es negativo
Z Cero Resultado es cero
V Sobre flujo Sobre flujo signado
C Acarreo Sobre flujo no signado

Microcontroladores y Microprocesadores
SUFIJOS DE CÓDIGO DE CONDICIÓN

Sufijos de código de condición, utilizados opcionalmente para la ejecución de


instrucciones.

Microcontroladores y Microprocesadores
INSTRUCCIONES DE COMPARACIÓN Y PRUEBA

Comparación y prueba

✓ Estas instrucciones se utilizan para hacer comparaciones entre


registros o entre un registro y un dato inmediatos;

✓ El resultado de la comparación se utiliza para actualizar los bits de


condición en el registro de estado, pero el resultado no se guarda;

✓ Las instrucciones de prueba de bits se utilizan para realizar la


comprobación bit a bit;

✓ El procesador ARM Cortex-M4 contiene dos instrucciones de


comparación y dos instrucciones de prueba de bits:
✓ Comparar (CMP)
✓ Comparar negativos (CMN)
✓ Prueba AND bit a bit (TST)
✓ Prueba XOR bit a bit (TEQ)

Microcontroladores y Microprocesadores
INSTRUCCIONES DE COMPARACIÓN Y PRUEBA

Comparación y prueba
Instrucción Función Banderas

CMP Rn, Operando Compara el valor de Rn con el N,Z,C,V


Operando (sustracción Rn-operando).
Actualiza los banderas de condiciones
con el resultado, pero no se escribe el
resultado en Rn.
TST Rn, Operando Realice una operación AND bit a bit N,Z,C,V
con el valor de Rn y el valor del
Operando. El resultado no se escribe
en Rn.
TEQ Rn, Operando Realice una operación XOR bit a bit N,Z,C,V
con el valor de Rn y el valor del
Operando. El resultado no se escribe
en Rn.

Microcontroladores y Microprocesadores
INSTRUCCIONES DE COMPARACIÓN Y PRUEBA

Comparación

CMP
compara 32 bits

✓ Sintaxis

CMP {cond} Rn, Op2


{cond} - código opcional de condición
NO HAY REGISTRO DESTINO
Rn - es el registro que tiene al primer operando
Op2 - es el segundo operando flexible

Operación ► Rn – Op2

Afecta banderas N,Z,V,C

Microcontroladores y Microprocesadores
INSTRUCCIONES DE COMPARACIÓN Y PRUEBA

Comparación

CMN
compara 32 bits

✓ Sintaxis

CMP {cond} Rn, Op2


{cond} - código opcional de condición
NO HAY REGISTRO DESTINO
Rn - es el registro que tiene al primer operando
Op2 - es el segundo operando flexible

Operación ► Rn – (- Op2)

Afecta banderas N,Z,V,C


INSTRUCCIONES DE COMPARACIÓN Y PRUEBA
Prueba

TST
Prueba con operación AND de 32 bits

✓ Sintaxis

TST {cond} Rn, Op2


{cond} - código opcional de condición
NO HAY REGISTRO DESTINO
Rn - es el registro que tiene al primer operando
Op2 - es el segundo operando flexible

Operación ► Rn & Op2

Afecta banderas N,Z,V,C

Microcontroladores y Microprocesadores
INSTRUCCIONES DE COMPARACIÓN Y PRUEBA
Comparación

TEQ
Prueba con operación xor 32 bits

✓ Sintaxis

TEQ {cond} Rn, Op2


{cond} - código opcional de condición
NO HAY REGISTRO DESTINO
Rn - es el registro que tiene al primer operando
Op2 - es el segundo operando flexible

Operación ► Rn  Op2

Afecta banderas N,Z,V,C

Microcontroladores y Microprocesadores
INSTRUCCIONES DE CONTROL DE FLUJO DE
PROGRAMA
Subrutinas
 Subrutinas - Son subprogramas a los que se envían desde un
programa principal y pueden o no regresar valores al programa
principal;

 Se define una subrutina dando un nombre en el campo de etiqueta que


sigue a una instrucción la cual ejecutara el efecto de salto deseado;

 La instrucción BL ETIQUETA envía a la subrutina que se encuentra a


partir de la dirección determinada por ETIQUETA

 La dirección de retorno se guarda en el registro LR es decir R14 ;


 La dirección de retorno es la localidad de instrucción inmediata
después de la instrucción BL;

 AL final de la subrutina la instrucción BX LR, recupera la dirección de


regreso desde el registro LR , regresando el programa a el lugar desde
el cual la subrutina fue llamada, específicamente una instrucción
después;
Microcontroladores y Microprocesadores
Salto a subrutina
MOV R2, G ;R2 = G MOV R2, G ;R2 = G
LDR RO, [R2] ;RO = G LDR RO, [R2] ;RO = G
CMP RO, #7 ; es G = 7 ? CMP RO, #7 ;es G != 7 ?
BNE next1 ; si no es, salta BEQ next2 ; si no es, salta
BL GEqual7 ;G = 7 BL GNotEqual7 ;G != 7
next1 next2

GEqual7 GNotEqual7
MOV R2, G ;R2 = G MOV R2, G ;R2 = G
LDR RO, [R2] ;RO = G LDR RO, [R2] ;RO = G
CMP RO, #7 ; es G = 7 ? CMP RO, #7 ;es G != 7 ?
BNE next1 ; si no es, salta BEQ next2 ; si no es, salta
BX next1 ; retorno BX next2 ;retorno
INSTRUCCIONES DE CONTROL DE FLUJO DE
PROGRAMA

✓ El procesador Cortex-M4 proporciona 10 instrucciones de control y salto de


programa;

✓ Estas instrucciones se usan para controlar los flujos y ejecuciones del programa
con ciertas condiciones o sin ninguna condición;

✓ Estas instrucciones proporcionan una capacidad de control inteligente para


Microcontroladores;

✓ Estas instrucciones se pueden dividir en cuatro grupos de acuerdo a sus


funciones:

1. Saltos incondicionales
2. Saltos condicionales
3. Compara y salta
4. Ejecuciones condicionales (If-Then o IT)

Microcontroladores y Microprocesadores
INSTRUCCIONES DE CONTROL DE FLUJO DE
PROGRAMA

✓ Sintaxis
{cond} - condición opcional

B {cond} etiqueta ; salto a etiqueta

BX {cond} Rm ;salto indirecto a una localidad especificada por Rm

BL {cond} etiqueta ; salto a la subrutina ubicada en etiqueta

BLX {cond} Rm ;salto indirecto a la subrutina con localidad


especificada por Rm

Microcontroladores y Microprocesadores
INSTRUCCIONES DE CONTROL DE FLUJO DE
PROGRAMA (SALTO-BRANCH)

Microcontroladores y Microprocesadores
INSTRUCCIONES DE CONTROL DE
FLUJO DE PROGRAMA PARA
NUMEROS SIGNADOS
IF THEN

MOV R2, G ;R2 = G MOV R2, G ;R2 = G


LDR RO, [R2] ; RO = G LDR RO, [R2] ; RO = G
CMP RO, #7 ; es G =7 ? CMP RO, #7 ; es G != 7 ?
BNE next1 ; si no, salta BEQ next2 ; si no, salta
BL GEqual7 ; G = 7 BL GNotEqual7 ; G != 7
next1 next2
IF- THEN
MOV R2, G ;R2 = G MOV R2, G ;R2 = G MOV R2, G ;R2 = G
LDR RO, [R2] ;RO = G LDR RO, [R2] ;RO = G LDR RO, [R2] ; RO = G
CMP RO, #7 ;es G > 7? CMP RO, #7 ; es G >= 7? CMP RO, #7 ; es G < 7?
BLS next1 ; si no, salta BLO next2 ; si no, salta BHS next3 ; si no, salta
BL GGreater7 ; G > 7 BL GGreaterEq7 ; G >= 7 BL GLess7 ; G < 7
next1 next2 next3

MOV R2, G ;R2 = G


LDR RO, [R2] ; RO G
CMP RO, #7 ;es G <= 7?
BHI next4 ; si no, salta
BL GLessEq7 ; G <= 7
next4
ASUMA QUE G1 SON 8 BITS NO SIGNADOS,
ESCRIBE UN PROGRAMA TAL QUE SI G1
ES MAYOR QUE 100, G2 ES IGUAL A 1.
MOV R2, G1 ;R2 = G1
LDRB RO, [R2] ; RO = G1
CMP RO, #100 ; es G1 > 100?
BLS next ; si no, salta al final
MOV Rl, #1 ;Rl = l
LDR R2, =G2 ; R2 = G2
STRB Rl, [R2] ; G2 = 1
next
ESTRUCTURA CONDICIONAL
SIGNADA

MOV R2, G ;R2 = G MOV R2, G ;R2 = G LDR MOV R2, G ;R2 = G MOV R2, G ;R2 = G
LDR RO, [R2] ; RO = G RO, [R2] ; RO = G LDR RO, [R2] ; RO = G LDR RO, [R2] ; RO = G
CMP RO, #7 ; is G > 7? CMP RO, #7 ; is G >= 7? CMP RO, #7 ; is G < 7? CMP RO, #7 ; is G <=7?
BLE nextl ; if not, skip BLT next2 ; if not, skip BGE next3 ; if not, skip BGT next4 ; if not, skip
BL GGreater7 ; G > 7 BL GGreaterEq7 ; G >= 7 BL GLess7 ; G < 7 BL GLessEq7 ; G <= 7
nextl next2 next3 next4
IF – THEN - ELSE
ESTRUCTURA IF-THEN-ELSE NO
SIGNADA
MOV R2, G ;R2 = G1
LDR RO, [R2] ; RO = G1
LDR R2, =G2 ; R2 = G2
LDR Rl, [R2] ; Rl = G2
CMP RO, Rl ; is G1 > G2 ?
BHI high ; es asi, salta a high
low BL isLessEq ; Gl <= G2
B next ; unconditional
high BL isGreater ; Gl > G2
next
CICLOS WHILE
ESTRUCTURA WHILE
LDR R4, =G1 ; R4 = G1
LDR R5, =G2 ; RS = G2
loop LDR R0, [R5] ; R0 = G2
LDR R1, [R4] ; R1 = G1
CMP R0, Rl ; es G2 <= G1?
BLS next ; es asi, salta a next
BL Body ; subrutina Body
B loop
next
DO-WHILE

LDR R1, =P ; R1 = P
LDR R5, =S ; R5 = S
loop LDR RO, [R1]
EOR RO, #2 ; intercambia el bit 1
STR RO, [R1]
LDR R2, [R5] , R2 = S
ANDS R2, #Ox20 ; el bit 5=1?
BEQ loop ; brinca mientras está en bajo
next
CICLOS FOR
CICLOS FOR
MOV R4, #0 ; R4 = O
loop CMP R4, #100 ; index >= 100?
BHS done ; es asi, salta a done
BL Process ;subrutina process
ADD R4, R4, #1 ; R4 = R4 + 1
B loop
done

MOV R4, #100 ; R4= 100 MOV R4, #0 ; R4= 0


loop BL Process ; subrutina loop BL Process ; subrutina
SUBS R4, R4, #1 ; R4 = R4-1 ADD R4, R4, #1 R4 = R4+1
BNE loop CMP R4, #100 ; hecho?
done BLO loop ; si no, repite
INSTRUCCIONES ARITMÉTICAS
Bits de condición
 Los bits de condición contienen el estatus de la operación aritmética previa;

Suma no Sustracción no
signada signada

R= A + B R= A - B

C=1 C=0
C Techo C Piso

R = 42 94 967 295
Ó R= 0
C=0 R= FFFF FFFF C=1
Correcto Correcto

Fin Fin

Microcontroladores y Microprocesadores
INSTRUCCIONES ARITMÉTICAS
Bits de condición
 Los bits de condición contienen el estatus de la operación aritmética previa;

Sustracción
Suma signada
signada

R= A + B R= A - B

V=1 V=1
V error V error

R =2147483647 R=
Ó 2147483647
V=0 R= 0x7FFF FFFF V=0
N=0 N=0
N N
N=1 N=1 R = - 2147483648
R = - 2147483648
Ó Ó
R= 0x 8000 0000 R= 0x 8000 0000

Fin bajo bajo


Fin
Microcontroladores y Microprocesadores
DIRECTIVAS DEL ENSAMBLADOR

DIRECTIVAS DEL ENSAMBLADOR

 Se utilizan para asistir y controlar el proceso del ensamblador;


 Las directivas no son parte del conjunto de instrucciones;
 Las directivas cambian la forma en la que el código es ensamblado;
 El primer lote define en donde y como los objetos ( código y variables)
son ubicados en memoria;

Microcontroladores y Microprocesadores
DIRECTIVAS DEL ENSAMBLADOR

 .global –
Permite ligar entre archivos, con ella una etiqueta en un archivo se
hace accesible a otro archivo.
Si tenemos un objeto global (función o variable) podemos agregarle
la directiva .global en donde el objeto esta definido y este podrá dar
acceso desde otro objeto.

En un programa en CCS se debe tener una función “main” que sea global

.global main

Si se necesita se puede utilizar un nombre alias mediante la substitución de


símbolos
.asg “main”, XXXXXX

Microcontroladores y Microprocesadores
DIRECTIVAS DEL ENSAMBLADOR

DIRECTIVAS DEL ENSAMBLADOR

 .data –
Las líneas que siguen conforman la sección .data , la cual contiene
las tablas de datos o las variables pre inicializadas, se guardan en SRAM

Microcontroladores y Microprocesadores
DIRECTIVAS DEL ENSAMBLADOR

DIRECTIVAS DEL ENSAMBLADOR


 .text –
Indica que sigue el código del programa;

Y que a las secciones de código producidos por el compilador C, o por secciones de


código asociadas con la librería C (con .text esta sección de código se puede llamar
desde C);

La sección .text es la sección presente por preconfiguración. Por lo tanto, al principio


de un ensamblaje, el ensamblador ensambla código en la sección .text a menos que
utilice un .data o directiva .sect para especificar una sección diferente.

Si no se usa ninguna de las directivas de las secciones, el ensamblador ensambla


todo en la sección .text.

Se gurda en FLASH ROM

Microcontroladores y Microprocesadores
DIRECTIVAS DEL ENSAMBLADOR

Estructura básica de un programa en lenguaje ensamblador

.global main ; hace a main accesible desde afuera de este archivo

.thumb ; se usara instrucciones thumb

.data ; ubica localidad de memoria SRAM

; las variables se ponen aquí

.text ; ubica localidad de memoria en flash

main

; el código va aquí

.end

Microcontroladores y Microprocesadores
DIRECTIVAS DEL ENSAMBLADOR
DIRECTIVAS DEL ENSAMBLADOR
 .field –

Inicializa un campo múltiple de bits de memoria dentro de una sola palabra (32 bits);

Sintaxis:

etiqueta .field valor, tamaño en bits

Donde:
valor - es un parámetro obligatorio; es una expresión que se evalúa y se coloca en el campo,
el valor debe ser absoluto.

tamaño en bits- es un parámetro opcional; se especifica un número de 1 a 32, que es el


número de bits en el campo. El tamaño predeterminado es de 32 bits. Si especifica un valor
que no puede caber en el tamaño en bits, el ensamblador trunca el valor y emite una
advertencia.

Por ejemplo, .field 3,1 causas el ensamblador para truncar el valor 3 a 1;

Microcontroladores y Microprocesadores
DIRECTIVAS DEL ENSAMBLADOR

DIRECTIVAS DEL ENSAMBLADOR


 .field –
Si se utiliza una etiqueta, señala al byte que contiene el campo
especificado.

En CCS no se acepta la sintaxis:


LDR R#, =etiqueta

Así que por ejemplo, para acceder a las variables y a las E/S de los puertos
necesitamos definir un puntero constante utilizando la directiva .field de 32
bits.

etiqueta .field valor, 32

Microcontroladores y Microprocesadores
DIRECTIVAS DEL ENSAMBLADOR

DIRECTIVAS DEL ENSAMBLADOR


 .equ –
Da el nombre de un símbolo a un valor constante;

simbolo .equ valor

El símbolo es una etiqueta que debe aparecer en el campo de etiqueta;

El valor debe ser una expresión bien definida, es decir, todos los símbolos de
la expresión deben ser definidos previamente.

LEDS .EQU 0x03 ; se asigna el valor 0x03 al símbolo LEDS


LEDS2 .EQU 0X00 ; se asigna el valor 0x00 al símbolo LEDS2

Microcontroladores y Microprocesadores
MODOS DE DIRECCIONAMIENTO Y CONJUNTO DE
INSTRUCCIONES

PSEUDOINSTRUCCIÓN
Es una instrucción para el programa ensamblador, esto es, que solo se
ejecuta en el momento de ensamblar, además de no generar código.

Microcontroladores y Microprocesadores

También podría gustarte