Red de conocimiento informático - Computadora portátil - conjunto del brazo ldr r0 =0x00000000 ¿Qué representa este signo =?

conjunto del brazo ldr r0 =0x00000000 ¿Qué representa este signo =?

Ensamblaje ARM ldr r0 =0x00000000 ¿Qué significa el signo =?

ARM es una estructura RISC y el movimiento de datos desde la memoria a la CPU solo se puede completar a través del L/ Instrucción S. Es decir, la instrucción ldr/str.

Por ejemplo, si desea leer datos desde algún lugar de la memoria a un registro, solo puede usar ldr

Por ejemplo:

ldr r0, 0x12345678

Esto es para almacenar el valor en la dirección 0x12345678 en r0.

Pero mov no puede hacer este trabajo. mov solo puede mover datos entre registros o mover datos inmediatos a registros. Esta es la mayor diferencia con los chips de arquitectura CISC como x86.

No hay instrucción ldr en x86 porque la instrucción mov x86 puede mover datos de la memoria a un registro.

Otra es la pseudoinstrucción ldr. Aunque la pseudoinstrucción ldr es muy similar a la instrucción ldr de ARM, sus funciones son diferentes. La pseudoinstrucción ldr puede agregar = antes del valor inmediato para indicar que se escribe una dirección en un registro, por ejemplo:

ldr r0, =0x12345678

De esta manera, 0x12345678 La dirección está escrito en r0. Por lo tanto, la pseudoinstrucción ldr y mov son relativamente similares. Sin embargo, la instrucción mov limita la longitud de los datos inmediatos a 8 bits, lo que significa que no puede exceder 512. La pseudoinstrucción ldr no tiene esta restricción. Si cuando se utiliza la pseudoinstrucción ldr, el siguiente número inmediato no excede los 8 bits, entonces la pseudoinstrucción ldr se convertirá en una instrucción mov durante el ensamblaje real. Cuénteme sobre las instrucciones de ensamblaje de ARM ldr r1, ¿cómo usar el número medio = 0x00555555?

LDR r0, =etiqueta

Si etiqueta es un número inmediato, asigne el valor a r0. Si etiqueta es un identificador, asigne el valor de la dirección de la etiqueta a r0. La instrucción de ensamblaje ARM ( ) completa la operación R1=R0×8.

[D]MOV R1, R0, LSL #3

Esta operación de desplazamiento a la izquierda es una operación de multiplicación. 2 elevado a la tercera potencia es 8. ¿Cuál es la diferencia entre LDR R0, TABLE y ADR R0, TABLE y LDR R0, =TABLE en ARM?

Primero explique el significado específico de este comando LDR y ADR.

1. LDR

Formato de uso: LDR lt; lt; dirección_modegt

LDR se utiliza para leer una palabra de 32 bits desde la memoria Registro de destino de la instrucción Si la PC se utiliza como registro de destino en la instrucción, la instrucción puede realizar la función de salto del programa.

De hecho, hay dos tipos de instrucciones LDR de ARM, una es la instrucción LDR y la otra es la pseudoinstrucción LDR. Están escritas de la misma manera pero tienen significados diferentes. la pseudoinstrucción tiene "=", por lo que entre las tres instrucciones dadas, la primera LDR es la instrucción LDR de ARM y la tercera es la pseudoinstrucción LDR de ARM. El número detrás de la pseudoinstrucción LDR= es un número inmediato de 32 bits. (puede ser una constante inmediata). Al ensamblar un programa fuente, el compilador reemplaza la pseudoinstrucción LDR por una instrucción adecuada. Si la constante cargada no excede el rango de MOV o MVN, use la instrucción MOV o MVN para reemplazar la pseudoinstrucción LDR; de lo contrario, el ensamblador coloca la constante en el grupo literal y usa una instrucción LDR de desplazamiento relativo al programa para leer; la constante del grupo literal. LDR se utiliza para cargar la dirección de registro (valor inmediato de 32 bits) de los componentes funcionales periféricos del chip para implementar diversas operaciones de control.

El desplazamiento desde la PC hasta el grupo literal debe ser inferior a 4 KB.

2. Pseudoinstrucción ADR

Formato de uso: ADR lt; Registergt;, lt; exprgt;

ADR carga una dirección relativa basada en la PC o el registro. En el registro R0, la principal limitación es el rango de direccionamiento de la dirección expr. Si expr está alineado con palabras, entonces su rango de direccionamiento es (-) 1024 bytes. Si es una dirección no alineada, el rango de direccionamiento es solo (-). ) )255 bytes. Se utiliza principalmente para leer datos en un rango pequeño.

En otras palabras, cuál usar depende del tipo y tamaño de la TABLA posterior. Si está leyendo datos de la memoria a un registro, use el primero, use el segundo si desea leer un rango pequeño y use el tercero si desea leer una dirección de tipo constante de 32 bits.

Espero que te sea de utilidad. ¿Qué significa el código de pantalla azul 0x0000010e (0x0000001e, 0x00000000, 0x00000000, 0x00000000)?

Hola, la pantalla azul de la computadora se debe principalmente a: "error de memoria" o "incompatibilidad de software".

Esta es la solución: (Autor: Li Wang Historia)

1. Intente iniciar, después de verificar la marca de la computadora, presione F8, modo seguro, cursor seleccionado: Última configuración buena conocida,

Ingrese, Ingrese, presione. Paso crucial

2. Si eso no funciona, ingrese al modo seguro, presione Entrar, vaya al escritorio, use el software antivirus y realice un antivirus completo.

¡Elimina todo lo que esté en la "Zona de Cuarentena" por completo!

3. Reutilizar: 360 Security Guard, "Botiquín de primeros auxilios del sistema 360" en "Lista de funciones",

Haga clic en: ¡Iniciar primeros auxilios! Después de reiniciar, haga clic en "Área de recuperación de archivos", seleccione todos y elimine completamente los archivos.

Reparación del sistema, selecciona todo, ¡repara inmediatamente! El paso clave

Reparación de red, inicie la reparación, reinicie la computadora.

¡360 Security Guard escanea los complementos y los limpia inmediatamente! 360 Security Guard, reparación de sistemas, reparación con un clic!

Kingsoft First Aid Kit, comprobar: escaneo extendido, escanear ahora, procesar inmediatamente, reiniciar la computadora.

4. Si aún no funciona, desconecte la tarjeta gráfica y el módulo de memoria, limpie con un borrador, luego use un cepillo para limpiar el polvo en la ranura y el ventilador,

Reemplace la ranura de memoria, etc. ! Escritorio

5. Compruebe si hay software similar redundante con funciones similares, como múltiples reproductores, múltiples software antivirus

, etc. Desinstale los redundantes y conserve solo uno, ¡porque software similar no es compatible entre sí! Paso crucial

6. Si eso no funciona, descargue "Drive Life" y actualice: ¡el controlador de la tarjeta gráfica!

7. Si aún no funciona, debe "restaurar con un clic" o "reinstalar el sistema".

8. Hay un problema con el hardware, ¡envíelo a reparar! En ensamblaje (como arm), el valor de la dirección de R0 es bit[1:0]. ¿Qué significa este bit[1:0]?

Hola, esto es lo que encontré para ti. Espero que pueda serte útil. Ayuda

Transferencia de registro único

Veamos primero el primero, es muy simple: transferir un solo dato hacia (LDR) o hacia fuera (STR). ) registrarse, y el acceso a la memoria puede ser DWORD (32 bits), WORD (16 bits) y BYTE (8 bits).

El formato del comando es el siguiente:

DWORD:

lt; STRgt; direccionamiento1

WORD:

lt; LDR | STRgt; H Rd, direccionamiento2 versión sin firmar

lt; LDRgt; ; B Rd, versión sin firmar de direccionamiento

lt; LDRgt; SB Rd, versión firmada de direccionamiento2

La clasificación de direccionamiento1 y direccionamiento2 se analizará a continuación. método de direccionamiento.

En términos de transferencia de registro único, existen los siguientes tres modos de indexación, que son:

◆ preindex

Este modo de indexación es diferente del direccionamiento x86 modo. El mecanismo de direccionamiento es muy similar. El registro se opera primero y luego se direcciona. Sin embargo, después de la búsqueda, el contenido del registro de dirección base no cambia. , #4]

El significado es cargar el DOWRD en la dirección r1 4 en r0, y el contenido de r1 no cambia después de la dirección.

◆ preindex con escritura diferida

Este método de indexación es algo similar al significado de i. Antes de direccionar, primero se opera el registro de dirección base y luego se direcciona. Su sintaxis básica es Agregar un. "!" después del carácter de dirección [] para representar. Por ejemplo:

ldr r0, [r1, #4]!

se puede descomponer en:

agregar r1, r1, #4

ldr r0, [r1, #0]

◆ postindex

Naturalmente, este método de indexación es el mismo que El El método de i es muy similar. Primero use el registro de dirección base para direccionar y luego realice operaciones en el registro de dirección base. La sintaxis básica es colocar la parte de desplazamiento fuera de [], por ejemplo:

ldr. r0, [r1], #4

se puede descomponer en:

ldr r0, [r1, #0]

agregar r1, r1, #4

Si todavía recuerdas el funcionamiento SIB de x86, entonces debes preguntarte si ARM también lo tiene. La respuesta es sí o no. La diferencia entre el direccionamiento1 y el direccionamiento2 mencionado anteriormente en ss es el uso del registro de escala. El direccionamiento1 puede usar [base, escala, palanca de cambios de barril] para lograr el efecto SB, o pasar [base, desplazamiento] (el desplazamiento aquí puede ser un valor inmediato). o registro) para lograr el efecto de SI, mientras que direccionamiento2 solo puede usar este último. Por lo tanto, cada modo de indexación puede tener hasta 3 modos de direccionamiento, por lo que puede haber hasta 9 formularios de instrucciones para el direccionamiento. Por ejemplo:

ldr r0, [r1, r2, LSR #0x04]!

ldr r0, [r1, -#0x04]

ldr r0, [ r1], LSR #0x04

Encontré uno de cada uno, lo que probablemente signifique esto. En este punto, la transferencia de registro único ha terminado y dominarlos es suficiente para realizar los recados. Echemos un vistazo a las transferencias de registros múltiples.

Transferencia de registros múltiples

Para decirlo muy claramente, significa escribir el contenido de múltiples registros en la memoria al mismo tiempo o escribir datos de la memoria en los registros mediante una instrucción, que es altamente eficiente. El precio es una mayor latencia del sistema, por lo que arm proporciona una opción de compilador para controlar la cantidad de registros. El formato de la instrucción es un poco complicado:

lt; LDM | STMgt; lt; modo de direccionamiento Rn{!}, lt; hágalo primero Comprenda el modo de direccionamiento Hay 4 modos de transferencia de registros múltiples:

Es decir, los que comienzan con A comienzan en la posición original de Rn y los que comienzan con B comienzan en la siguiente. posición de Rn. Si todavía estás confundido, veamos un ejemplo.

Antes de ejecutar todas las instrucciones de muestra:

mem32[0x1000C] = 0x04

mem32[0x10008] = 0x03

mem32[0x10004 ] = 0x02

mem32[0x10000] = 0x01

r0 = 0x00010010

r1 = 0x00000000

r3 = 0x00000000

r4 = 0x00000000

1) ldmia r0!, {r1-r3} 2) ldmib r0!, {r1-r3}

Después de la ejecución: Después de la ejecución: p>

r0 = 0x0010001C r0 = 0x0010001C

r1 = 0x01 r1 = 0x02

r2 = 0x02 r2 = 0x03

r3 = 0x03 r3 = 0x04

En cuanto a los modos DA y DB, son similares a IA/IB, por lo que no entraré en detalles.

Lo último que hay que decir es que utilizar las instrucciones ldm y stm para proteger el grupo de registros es una función muy común y eficaz.

Esquema de emparejamiento:

stmia/ldmdb

stmib/ldmda

stmda/ldmib

stmdb/ldmia

Sigamos con dos ejemplos:

Antes de la ejecución:

r0 = 0x00001000

r1 = 0x00000003

r2 = 0x00000002

r3 = 0x00000001

Instrucciones ejecutadas:

stmib r0!, {r1-r3}

mov r1, #1 Estas reglas han sido modificadas;

mov r2, #2

mov r3, #3

Estado de registro actual:

r0 = 0x0000100C

r1=0x00000001

r2=0x00000002

r3=0x00000003

ldmia r0!, {r1-r3}

La final resultado:

r0 = 0x00001000

r1 = 0x00000003

r2 = 0x00000002

r3 = 0x00000001

En Además, también podemos usar esta instrucción para completar una copia eficiente de los bloques de memoria:

loop

ldmia r9!, {r0-r7}

stmia r10 ! , {r0-r7}

cmp r9, r11

bne loop

En este punto, los lectores deben comprender la arquitectura Load-Store de RISC. Es muy importante tener una comprensión general y poder emparejar y utilizar comandos correctamente. Cómo usar el ensamblaje ARM para implementar r0 = r1/16, se necesitan urgentemente expertos en programación

ldr r0, r1, LSR # 4 es desplazar lógicamente el contenido de r1 hacia la derecha en 4 bits y luego colocarlo en r0 La lógica aquí se desplaza hacia la derecha en 4 bits, lo que puede verse como una división por 2 elevado a la cuarta potencia, que es 16. (Pregunta simple sobre ensamblaje de ARM) Se sabe que C=1, R1=100, R2=90, luego de ejecutar la instrucción ADDC R0, R1, R2, R0=?

Debido a que es necesario agregar el bit de transporte CF y C = 1, a 191 principiantes les gustaría aprender un concepto simple sobre el ensamblaje del brazo MVN R1, #0;

Código complementario, 0 es 0xffffffff después de invertirlo en el espacio de almacenamiento de 32 bits y la visualización con signo es -1. Brazo de ensamblaje LDR, sé qué es LDRD.

El el formato de la instrucción LDR es:

LDR{condición} registro de destino, lt; dirección de memoria gt

La instrucción LDR se utiliza para transferir datos de una palabra de 32 bits desde la memoria; al registro de destino. Esta instrucción se usa generalmente para leer datos de palabras de 32 bits de la memoria

a un registro general y luego procesar los datos. Cuando el contador de programa PC se utiliza como registro de destino, los datos de palabra leídos de la memoria por la instrucción se utilizan como dirección de destino, de modo que se pueda saltar el flujo del programa. Esta instrucción se usa comúnmente en programación

. Los métodos de direccionamiento son flexibles y diversos, por lo que los lectores deben dominarla con cuidado.