Post on 26-Jun-2020
Microprocesadores y Microcontroladores
III. Modos de direccionamiento y conjunto de instrucciones
FACULTAD DE INGENIERÍA
Microcontroladores y Microprocesadores
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
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
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;
0x00000260
0x00000264
0x00000268
0x000002C6
Dirección EEPROM
R0
PC
MOV R0,#100F04F 0064
0x00000264
0x 0064
LDR R0,[R1]
Microcontroladores y Microprocesadores
0x00000142
0x00000144
0x00000146
0x00000148
Dirección EEPROM
PC
R0
R1
6808
0x 00000144
0x20000000
0x20000004
0x20000008
0x2000000C
Dirección RAM
0x20000004
0x12345678
0x12345678
LDR R0,[R1+4]
Microcontroladores y Microprocesadores
INSTRUCCIONES
Modo de direccionamiento inmediato 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
R1 no se modifica por la instrucción
0x00000142
0x00000144
0x00000146
0x00000148
Dirección EEPROM
PC
R0
R1
68480x 00000146
0x20000000
0x20000004
0x20000008
0x2000000C
Dirección RAM
0x20000004
0xF5A7D98E
0xF5A7D98E R1+4
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:
▪ Modo de direccionamiento inmediato
Modo de direccionamiento de desplazamiento inmediato regular
Modo de direccionamiento de desplazamiento inmediato pre-indexado
Modo de direccionamiento de desplazamiento inmediato post-indexado
Modo de direccionamiento de desplazamiento inmediato regular con acceso no
privilegiado
▪ Modo de direccionamiento de desplazamiento con registro
▪ Modo de direccionamiento relativo del PC
▪ Modo de direccionamiento de cargar y almacenamiento a múltiples
registros
Microcontroladores y Microprocesadores
Modo de direccionamiento
4. Modo de direccionamiento de cargar y almacenamiento a múltiples
registros
5. Modo de direccionamiento del 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-2 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
Hay aproximadamente 203 instrucciones en el conjunto de
instrucciones ARM Cortex-M4 sin incluir las instrucciones relacionadas
con FPU.
Todas estas instrucciones se pueden categorizar en 14 grupos basados
en las funciones de esas instrucciones. Estos grupos incluyen:
1. Instrucciones para mover datos
2. Instrucciones Aritméticas
3. Instrucciones de lógica
4. Instrucciones para cambiar y girar
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 la excepción
11. Instrucciones de modo de reposo
12. Instrucciones de Barrera de Memoria
13. Instrucciones Diversas
14. Instrucciones no admitidas
Microcontroladores y Microprocesadores
SINTAXIS
Las instrucciones en el Lenguaje Ensamblador tiene 4
campos separados por espacios
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
Etiqueta Opcode Operandos Comentarios
Funcion MOV R0, #100 ; esto pone R0 con 100
BX LR ; esta es la función return
Microcontroladores y Microprocesadores
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 Basic.NET, 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
Integrated Developed Enviroment (IDE) para Microcontroladores
Cortex M:
ARM Keil uVision
Code Compouser 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
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
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
14 grupos de instrucciones:
1. Instrucciones para mover datos
2. Instrucciones Aritméticas
3. Instrucciones de lógica
4. Instrucciones para cambiar y girar
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
9. Instrucciones de Saturación
10. Instrucciones relacionadas con la excepción
11. Instrucciones de modo de reposo
12. Instrucciones de Barrera de Memoria
13. Instrucciones Diversas
14. Instrucciones no admitidas
Microcontroladores y Microprocesadores
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, #imm16S - 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
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
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 →
MOVW Rd, #0x6E5A
▪ Instrucción que copia el valor de0x6E5A a la parte inferior de Rd.
Rd →
D3F4_ _ _ _
_ _ _ _ 6E5A
Microcontroladores y Microprocesadores
The Definitive Guide to ARM Cortex-M3 and Cortex-M4 ProcessorsThird Edition, Joseph YiuARM Ltd., Cambridge, UK
Microcontroladores y Microprocesadores
SUFIJOS DE CONDICIONES
Microcontroladores y Microprocesadores
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 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
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
Operaciones lógicas
Operaciones lógicas en Cortex M
A
Rn
B2do
operando
A&B
AND
A|B
ORR
A^B
EOR
A&(~B)
BIC
A|(~B)
ORN
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
Operaciones lógicas
ORROR 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
Operaciones lógicas
ANDAND 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
Operaciones lógicas
EORXOR 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
Operaciones de desplazamiento
Logical Shift Right → LSR 1 ≤ n ≤ 32
31 29 ……………………… ………… .. 1 0 C
0 0 0 1 1 0 0 0 0 1 0
Microcontroladores y Microprocesadores
Operaciones de desplazamiento
Microcontroladores y Microprocesadores
Operaciones de desplazamiento
LSRDesplazamiento 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 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
Operaciones de desplazamiento
ASRDesplazamiento 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
Operaciones de desplazamiento
LSLDesplazamiento 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
Operaciones aritméticas
SUMADOR
CIN
+ 0 a
0 b
------------
Cout s
abcin
s
cout
Microcontroladores y Microprocesadores
Operaciones aritméticas
Sumador con acarreo en cascada
abcin
s
cout
Microcontroladores y Microprocesadores
Representación de un entero en complemento a 2
4 bits
Microcontroladores y Microprocesadores
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 de un entero en complemento a 2
4 bits
Rango -2m-1 hasta 2m-1 – 1
Microcontroladores y Microprocesadores
Representación con complemento 2
𝑩 = 𝒃𝑵−𝟏𝒃𝑵−𝟐… . . 𝒃𝟏𝒃𝟎 𝒅𝒐𝒏𝒅𝒆 𝒃𝒊 ∈ 𝟎, 𝟏
Bit de signo
Valor decimal
𝑫 𝑩 = −𝒃𝑵−𝟏𝟐𝑵−𝟏 + 𝒃𝑵−𝟐𝟐
𝑵−𝟐… . 𝒃𝟏 𝟐𝟏 + 𝒃𝟎𝟐
𝟎
Microcontroladores y Microprocesadores
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
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
Ejemplo usando complemento de 2 para sustraer M-N:
M = 1010100
N = 1000100
1010100+ 0111100
------------acarreo final → 1 0010000
Resultado → 10000
Microcontroladores y Microprocesadores
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
Se puede ignorar al acarreo
Microcontroladores y Microprocesadores
Se puede ignorar al acarreo
Cuando se tiene dos números negativos
siempre se tendrá acarreo
Microcontroladores y Microprocesadores
SOBREFLUJO
Sobreflujo: el bit de signo no concuerda con las entradas
Microcontroladores y Microprocesadores
SOBRE FLUJO
Sobreflujo: el bit de signo no concuerda con las entradas
Microcontroladores y Microprocesadores
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
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
Operaciones aritméticas
Multiplicación
14
x 11
----------
Microcontroladores y Microprocesadores
Operaciones aritméticas
Multiplicación
Microcontroladores y Microprocesadores
Operaciones aritméticas
Multiplicación
Microcontroladores y Microprocesadores
Operaciones aritméticas
Multiplicación
MUL – Multiplicación
MULA – 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
UDIVDivisió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
SDIVDivisió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
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
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
Bandera – sobreflujo – “overload ”, V
En la suma y adición de valores signados en complemento a dos se utilizan las
mismas instrucción
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
Bits de condición
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, utilizados opcionalmente para la ejecución
de instrucciones –pág. 91
Microcontroladores y Microprocesadores
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
Comparación y prueba
Instrucción Función Bander
as
CMP Rn,
Operando
Compara el valor de Rn con Operando
(sustracción Rn-operando). Actualiza los
banderas de condiciones con elresultado, pero no se escribe el resultado
en Rn.
N,Z,C,V
TST Rn,
Operando
Realice una operación AND bit a bit con
el valor de Rn y el valor del Operando. El
resultado no se escribe en Rn.
N,Z,C,V
TEQ Rn,
Operando
Realice una operación XOR bit a bit con
el valor de Rn y el valor del Operando. El
resultado no se escribe en Rn.
N,Z,C,V
Microcontroladores y Microprocesadores
Comparación
CMPcompara 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
Prueba
TSTPrueba 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
TEQPrueba 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 xor Op2
Afecta banderas N,Z,V,C
Microcontroladores y Microprocesadores
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 cinco grupos de acuerdo a sus
funciones:
1. Saltos incondicionales
2. Saltos condicionales
3. Compara y salta
4. Tabla de saltos (TBB, TBH)
5. 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
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;
Suma no
signada
Fin
R= A + B
C
R = 42 94 967 295
Ó
R= FFFF FFFF
C=1 Techo
C=0Correcto
Sustracción no
signada
Fin
R= A - B
C
R= 0
C=0 Piso
C=1Correcto
Microcontroladores y Microprocesadores
INSTRUCCIONES ARITMÉTICAS
Bandera – sobreflujo – “overload ”, V
▪ Se valida después de una suma signada R = X + M si:
𝑽 = 𝑿𝟑𝟏 &𝑴𝟑𝟏& ഥ𝑹𝟑𝟏 | ഥ𝑿𝟑𝟏& ഥ𝑴𝟑𝟏& 𝑹𝟑𝟏
▪ Se valida después de una sustracción signada R = X - M si:
𝑽 = 𝑿𝟑𝟏 & ഥ𝑴𝟑𝟏& ഥ𝑹𝟑𝟏 | ഥ𝑿𝟑𝟏&𝑴𝟑𝟏& 𝑹𝟑𝟏
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;
Suma signada
Fin
R= A + B
V
V=1error
V=0
N
N=1
N=0
bajo
Sustracción
signada
Fin
R= A - B
V
R= 2147483647
V=1 error
V=0
N
N=1
N=0
bajo
R =2147483647
Ó
R= 0x7FFF FFFF
R = - 2147483648
Ó
R= 0x 8000 0000
R = - 2147483648
Ó
R= 0x 8000 0000
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
ESTRUCTURA FOR - LOOP
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 0x20 al símbolo LEDS
LEDS2 .EQU 0X00 ; se asigna el valor 0x20 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.