conjunto ARM - Adición de bytes específicos a partir de valores de tamaño de palabra

1

Estoy intentando codificar una forma de agregar palabras medias específicas de números de tamaño de palabra en el lenguaje ensamblador ARM. Por ejemplo, digamos que quiero agregar los primeros 4 dígitos de r0 = 0x 3B02 9BA1 y r1 = 0x 0B54 A361 o los 4 dígitos del medio de r0 = 0x3B 029B A1 y r1 = 0x0B 54A3 61. Parece que no puedo hacer que esto funcione. Este es un ejemplo reducido de lo que tengo hasta ahora.

LDR r0, =0x3B029BA1;
LDR r1, =0x0B54A361;
LDRH r10, [r1]; 

Estoy bastante seguro de que será necesario que haya un desplazamiento para la dirección en la tercera línea del código, pero no he superado una media palabra solo para ingresar al registro 10. Cada vez que ejecuto este código, los valores de registro correctos terminan en r0 y r1, pero no aparece nada en r10. Entonces, antes de hacer cualquier otra cosa, solo quiero entender por qué sucede esto.

    
pregunta RoryHector

1 respuesta

1

LDR y LDRH son instrucciones para cargar un registro desde la memoria. Está utilizando R1 como puntero a la ubicación de memoria 0x0B54A361. R10 luego se carga con el contenido de esta ubicación de memoria (que podría ser cualquier cosa, pero probablemente 0 si no se está utilizando esa ubicación de memoria en particular).

Para mover (copiar) datos de un registro a otro, debe usar la instrucción MOV. Puede combinar el movimiento con otras operaciones utilizando instrucciones como AND o ADD, porque el registro de destino puede ser diferente de los registros de origen. También puede aplicar un cambio o rotar con la misma instrucción.

    
respondido por el Bruce Abbott

Lea otras preguntas en las etiquetas