Herramientas de usuario

Herramientas del sitio


arm_tipodatos

Diferencias

Muestra las diferencias entre dos versiones de la página.

Enlace a la vista de comparación

Ambos lados, revisión anteriorRevisión previa
Próxima revisión
Revisión previa
arm_tipodatos [2020/03/02 01:41] marianoarm_tipodatos [2020/05/13 22:53] (actual) – editor externo 127.0.0.1
Línea 14: Línea 14:
 Estos son algunos ejemplos de cómo se pueden usar estos tipos de datos con las instrucciones Load y Store: Estos son algunos ejemplos de cómo se pueden usar estos tipos de datos con las instrucciones Load y Store:
  
-     ldr = Load Word +     ldr      Load Word 
-     ldrh = Load unsigned Half Word +     ldrh     Load unsigned Half Word 
-     ldrsh = Load signed Half Word +     ldrsh =    Load signed Half Word 
-     ldrb = Load unsigned Byte +     ldrb     Load unsigned Byte 
-     ldrsb = Load signed Bytes+     ldrsb =    Load signed Bytes
  
-str = Store Word +     str      Store Word 
-strh = Store unsigned Half Word +     strh     Store unsigned Half Word 
-strsh = Store signed Half Word +     strsh =    Store signed Half Word 
-strb = Store unsigned Byte +     strb     Store unsigned Byte 
-strsb = Store signed Byte+     strsb =    Store signed Byte 
 +      
 +==== Tipos de datos básicos ==== 
 + 
 +En la siguiente tabla se recogen los diferentes tipos de datos básicos que podrán aparecer en los ejemplos, así como su tamaño y rango de representación. 
 + 
 + 
 +{{ :tiposdatos.png?500 | }} 
 +     
 +Nótese como en ensamblador los tipos son neutrales al signo, lo importante es la longitud en bits del tipo. La mayoría de las instrucciones (salvo multiplicación) hacen la misma operación tanto si se trata de un número natural como si es entero en complemento a dos. Nosotros decidiremos el tipo mediante las constantes que pongamos o según los flags que interpretemos del resultado de la operación.  
 + 
 +==== Punteros ==== 
 +Un puntero siempre ocupa 32 bits y contiene una dirección de memoria. En el siguiente ejemplo se puede observar que acceder al dato de var1 nos cuesta 2 ldrs a través del puntero: 
 + 
 +     .data 
 +          var1: .word 99 
 +     .text @ Defincion de codigo del programa 
 +     .global main @ global, visible en todo el programa 
 +      
 +     main: 
 +      ldr r2, =var1 /* r2 apunta a var1*/ 
 +      ldr r3, [r2] 
 + 
 + 
 + 
 +==== Atención con Bi-Endian ==== 
 + 
 +Hay dos formas básicas de ver los bytes en la memoria: Little-Endian (LE) o Big-Endian (BE). La diferencia es el orden de bytes en el que cada byte de un objeto se almacena en la memoria. En máquinas little endian como Intel x86, el byte menos significativo se almacena en la dirección más baja (la dirección más cercana a cero). En las máquinas big-endian, el byte más significativo se almacena en la dirección más baja. La arquitectura ARM era little-endian antes de la versión 3, desde entonces es bi-endian, lo que significa que presenta una configuración que permite la endianness conmutable. En ARMv6, por ejemplo, las instrucciones son little-endian fijas y los accesos a los datos pueden ser little-endian o big-endian según lo controlado por el bit 9, el bit E, del Registro de estado del programa (CPSR). 
 + 
 +{{ :big-little-endian-1.png?600 |}} 
 + 
 +[[:oc_raspi0|Volver]]
× iphelper toolbox

you see this when javscript or css is not working correct

Untested
IP Address:
First usable:
Subnet:
Last usable:
CIDR:
Amount of usable:
Network address:
Reverse address:
Broadcast address:

arm_tipodatos.1583113315.txt.gz · Última modificación: 2020/03/02 01:41 (editor externo)