Ensamblaje de ARM integrado

¿Qué aspecto tiene el lenguaje ensamblador?

  • Ejemplo: agregue 100 a un valor en el registro.
    X86: agregue eax, # 100
    68K: ADD # 100, D0
    ARM: agregue r0, r0, # 100

  • Ejemplo: carga desde un puntero de registro para registrar
    x86: mov eax, DWORD PTR [ebx]
    68K: MOVE L (A0), D0
    ARM: ldr r0, [r1]

  • Ejemplo: estructura del código de inicio ARM
    Inserte la descripción de la imagen aquí

  • Formato de instrucción de ensamblaje ARM :
    Operación [cond] {estado} Rd, Rn, Operand2

Montaje de BRAZO

Condiciones de instrucción y códigos de estado

  • Código de condición (cond)
    Inserte la descripción de la imagen aquí
  • Código de estado (estado)

Inserte la descripción de la imagen aquí

Modo de direccionamiento de ensamblaje ARM

  • Direccionamiento inmediato :
    ADD R0, R0, # 0x3F
  • Direccionamiento de registro:
    ADD R0, R1, R2
  • Registrar direccionamiento indirecto
    LDR R0, [R1]
    STR R0, [R1]
  • Registre el direccionamiento por desplazamiento
    ADD R3, R2, R1, LSL # 2 (R1 se desplaza dos bits a la izquierda y se agrega R1, y luego se asigna a R3)
  • Dirección base direccionamiento
    LDR R0, [R1, # 4] (sume el valor señalado por la dirección R1 más 4 a R0)
    LDR R0, [R1], # 4 (sume 4 al valor tomado de la dirección R1 R0)
    LDR R0, [R1, R2]
  • Direccionamiento de múltiples registros
    LDMIA R0, {R1, R2, R3, R4}
  • Direccionamiento relativo
    BL NEXT (saltar a NEXT)
    MOV PC, LR

Operación de datos (operación ALU)

Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí

Operación lógica (y, o, no, exclusiva o)

Inserte la descripción de la imagen aquí

Operación de comparación

Inserte la descripción de la imagen aquí

Operación de memoria

Instrucciones de lectura y escritura de registro único, instrucciones de
Inserte la descripción de la imagen aquí
lectura y escritura de registros múltiples
Inserte la descripción de la imagen aquí

  • Modo de dirección
    (1) Modo de bloque de datos: IA (dirección más 4 después de la transmisión), IB (dirección más 4 antes de la transmisión), DA (dirección menos 4 después de la transmisión), DB (dirección menos 4 antes de la transmisión)
    (2) Modo de pila: Pila inferior completa, EA (pila de disminución vacía), FD (pila de disminución completa), ED (pila de incremento vacía), FA (pila de incremento completa)

Instrucciones de intercambio de datos
Inserte la descripción de la imagen aquí

Saltar, estado de operación

Código de operación Operandos Descripción Función
segundo Instrucción de salto pc <-etiqueta
licenciado en Derecho Salto de conexión con retorno pc -> - etiqueta
BX Saltar y cambiar de estado Pulgar
BLX Saltar con retorno y cambiar de estado Pulgar

Operación de registro de estado

Operación del registro de estado: divida las instrucciones de 32 bits en cuatro campos: [7: 0] campo de bit de control c, [15: 8] campo de bit extendido x, [23:16] campo de bit de estado s, [31:24] condición Campo de bandera f

Código de operación Operandos Descripción Función
SEÑORA Transferir el valor del registro de estado del programa al registro general
MSR CPSR R0; SPSR, R0; CPSR_c R0 Registro general al registro de estado del programa

Instrucción de generación de excepciones

Código de operación Operandos Descripción Función
SWI SWI 0x02 Instrucción de interrupción suave
BKPT BKPT Instrucción de interrupción de punto de interrupción

Pseudo instrucciones ARM

En el programa de lenguaje ensamblador ARM, hay algunos mnemónicos de instrucción especial. Estos mnemónicos son diferentes de los mnemónicos del sistema de instrucción. No hay un código de operación correspondiente. Estos mnemónicos de instrucción especial generalmente se llaman pseudoinstrucciones. La operación se llama pseudo operación. La función de las pseudoinstrucciones en el programa fuente es hacer varios preparativos para completar el programa de ensamblaje. Estas pseudoinstrucciones solo funcionan en el proceso de ensamblaje. Una vez finalizado el ensamblaje, se completa la misión de la pseudoinstrucción.

  • Seudoinstrucciones básicas comunes
    Inserte la descripción de la imagen aquí
    Inserte la descripción de la imagen aquí
    Inserte la descripción de la imagen aquí

Símbolos comúnmente usados ​​en programas en lenguaje ensamblador

  • Convenciones de nomenclatura de símbolos:
    (1) Los símbolos distinguen entre mayúsculas y minúsculas, y el compilador considerará los símbolos en mayúsculas y minúsculas con el mismo nombre como dos símbolos diferentes.
    (2) El símbolo debe ser único dentro de su ámbito de acción.
    (3) El símbolo personalizado no puede coincidir con la palabra reservada del sistema.
    (4) El nombre del símbolo no debe ser el mismo que el de la instrucción o pseudoinstrucción
  • Símbolos, variables El
    ensamblador ARM (Thumb) admite variables numéricas, variables lógicas y variables de cadena
    Inserte la descripción de la imagen aquí
  • Constante
    (1) Una constante digital es generalmente un entero de 32 bits. Cuando se usa como un número sin signo, su rango de valores es 0 ~ 232-1, cuando se usa como un número con signo, su rango de valores es -231 ~ 231-1
    ( 2) Solo hay dos valores para las constantes lógicas: verdadero o falso
    (3) Una constante de cadena es una cadena fija, que generalmente se usa para solicitudes de información cuando el programa se está ejecutando
  • Carácter de sustitución de
    variable Una variable del programa puede obtener una constante mediante la operación de sustitución. El operador de sustitución es: "" $ ""
    Ejemplo:
LCLS S1
LCL S2
S1 SETS "Test!"
S2 SETS "This is a  $S1"   ;字符串变量S2的值为    This is a Test!
  • Expresiones y operadores
    Inserte la descripción de la imagen aquí

Operación de registro

Operación de registro
Inserte la descripción de la imagen aquí

Pseudoconjunto de definición de datos

Pseudoconjunto de definición de datos
Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí

Directiva de control

Inserte la descripción de la imagen aquí
Muestra:

GBLL Test ;声明一个全局的逻辑变量,变量名为Test
……
IF Test = TRUE
指令序列1
ELSE
指令序列2
ENDIF


GBLA Counter ;声明一个全局的数学变量,变量名为Counter 
Counter SETA 3 ;由变量Counter控制循环次数 
…… 
WHILE Counter < 10 
指令序列 
WEND


MACRO
$OP hello world $param1,$param2
MOV R3,#0x02
MEXIT
MEND

Supongo que te gusta

Origin blog.csdn.net/qq_41782149/article/details/96176151
Recomendado
Clasificación