Modos de Direccionamiento en ARM
Temas abordados
Modos de Direccionamiento en ARM
Temas abordados
MEXICO
FACULTAD DE INGENIERÍA
Microprocesadores y Microcontroladores
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;
Microcontroladores y Microprocesadores
MODOS DE DIRECCIONAMIENTO Y CONJUNTO DE
INSTRUCCIONES
Modo de direccionamiento inmediato
Dirección EEPROM
0x00000260
R0 0x 0064
0x00000264 F04F 0064 MOV R0,#100
0x00000268
PC 0x00000264
0x000002C6
Microcontroladores y Microprocesadores
MODOS DE DIRECCIONAMIENTO Y CONJUNTO DE
INSTRUCCIONES
Dirección EEPROM
0x00000142
0x00000144
0x00000146
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
0x00000144
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:
Microcontroladores y Microprocesadores
MODOS DE DIRECCIONAMIENTO Y CONJUNTO DE
INSTRUCCIONES
Modo de direccionamiento
Microcontroladores y Microprocesadores
CONJUNTO DE INSTRUCCIONES
PROCESADORES ARM
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
Microcontroladores y Microprocesadores
LENGUAJE ENSAMBLADOR ARM CORTEX-M
Ejemplo:
Microcontroladores y Microprocesadores
LENGUAJE ENSAMBLADOR ARM CORTEX-M
Microcontroladores y Microprocesadores
NIVELES EN LENGUAJE DE COMPUTADORAS
Microcontroladores y Microprocesadores
NIVELES EN LENGUAJE DE COMPUTADORAS
Microcontroladores y Microprocesadores
PROCESO PARA EL DESARROLLO DE
SOFTWARE
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
Microcontroladores y Microprocesadores
INSTRUCCIONES PARA MOVER DATOS
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
Rd → D3F4_ _ _ _
Rd → _ _ _ _ 6E5A
Microcontroladores y Microprocesadores
INSTRUCCIONES PARA MOVER DATOS
Microcontroladores y Microprocesadores
INSTRUCCIONES PARA MOVER DATOS
Instrucciones con acceso a memoria
Instrucción que carga datos desde memoria a un registro
Microcontroladores y Microprocesadores
INSTRUCCIONES PARA MOVER DATOS
Microcontroladores y Microprocesadores
MODOS DE DIRECCIONAMIENTO
Modo de Sintaxis Direccion efectiva Valor Rm después
direccionamiento de memoria de la ejecución
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;
Microcontroladores y Microprocesadores
INSTRUCCIONES DE OPERACIONES LÓGICAS
Operaciones lógicas
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
Microcontroladores y Microprocesadores
INSTRUCCIONES DE OPERACIONES LÓGICAS
Operaciones lógicas
AND
AND lógico de 32 bits
✓ Sintaxis
Microcontroladores y Microprocesadores
INSTRUCCIONES DE OPERACIONES LÓGICAS
Operaciones lógicas
EOR
XOR lógico de 32 bits
✓ Sintaxis
Microcontroladores y Microprocesadores
BIC Bit Clear.
Sintaxis
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
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
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;
Microcontroladores y Microprocesadores
INSTRUCCIONES ARITMÉTICAS
Microcontroladores y Microprocesadores
INSTRUCCIONES ARITMÉTICAS
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:
Ejemplo:
El complemento de 2 de (101100)2
→ 26 - (101100)2 =
Bit de signo
Valor decimal
Microcontroladores y Microprocesadores
INSTRUCCIONES ARITMÉTICAS
Sustracción de dos números positivos (M-N) en
base 2:
a) 𝑴 + 𝟐𝒎 − 𝑵 ≥ 𝟐𝒎 𝒔𝒊 𝑴 ≥ 𝑵
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
Microcontroladores y Microprocesadores
INSTRUCCIONES ARITMÉTICAS
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
Resultado → -10000
Microcontroladores y Microprocesadores
INSTRUCCIONES ARITMÉTICAS
Microcontroladores y Microprocesadores
INSTRUCCIONES ARITMÉTICAS
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.
Microcontroladores y Microprocesadores
INSTRUCCIONES ARITMÉTICAS
Bandera – sobreflujo – “overload ”, V
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
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
UDIV
División no signada de 32 bits
✓ Sintaxis
Rd = Rn/ Rm
Microcontroladores y Microprocesadores
MODOS DE DIRECCIONAMIENTO Y CONJUNTO DE
INSTRUCCIONES
SDIV
División signada de 32 bits
✓ Sintaxis
Rd = Rn/ Rm
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;
Microcontroladores y Microprocesadores
SUFIJOS DE CÓDIGO DE CONDICIÓN
Microcontroladores y Microprocesadores
INSTRUCCIONES DE COMPARACIÓN Y PRUEBA
Comparación y prueba
Microcontroladores y Microprocesadores
INSTRUCCIONES DE COMPARACIÓN Y PRUEBA
Comparación y prueba
Instrucción Función Banderas
Microcontroladores y Microprocesadores
INSTRUCCIONES DE COMPARACIÓN Y PRUEBA
Comparación
CMP
compara 32 bits
✓ Sintaxis
Operación ► Rn – Op2
Microcontroladores y Microprocesadores
INSTRUCCIONES DE COMPARACIÓN Y PRUEBA
Comparación
CMN
compara 32 bits
✓ Sintaxis
Operación ► Rn – (- Op2)
TST
Prueba con operación AND de 32 bits
✓ Sintaxis
Microcontroladores y Microprocesadores
INSTRUCCIONES DE COMPARACIÓN Y PRUEBA
Comparación
TEQ
Prueba con operación xor 32 bits
✓ Sintaxis
Operación ► Rn Op2
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;
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
✓ Estas instrucciones se usan para controlar los flujos y ejecuciones del programa
con ciertas condiciones o sin ninguna condición;
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
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 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
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
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
Microcontroladores y Microprocesadores
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
Microcontroladores y Microprocesadores
DIRECTIVAS DEL ENSAMBLADOR
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:
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.
Microcontroladores y Microprocesadores
DIRECTIVAS DEL ENSAMBLADOR
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.
Microcontroladores y Microprocesadores
DIRECTIVAS DEL ENSAMBLADOR
El valor debe ser una expresión bien definida, es decir, todos los símbolos de
la expresión deben ser definidos previamente.
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