Operators – Referencia de Lenguaje Spin
En tiempo de ejecución podemos accesar esas cadenas directamente, usando
@Str3
, pero accesarlas indirectamente es problemático porque cada cadena es de una longitud
diferente; haciendo difícil de usar cualquiera como cálculos de base indirecta.
La solución podría parecer simplemente haciendo otra tabla de direcciones como en::
DAT
StrAddr word @Str1, @Str2, @Str3
Esto crea una tabla de words, empezando en
de una cadena única. Desafortunadamente para constantes en tiempo de compilación (como
StrAddr
en la tabla
), las direcciones que se regresan por
tiempo de compilación, en vez de la dirección absoluto de tiempo de ejecución del símbolo.
Para obtener la verdadera dirección de tiempo de ejecución, necesitamos agregar la dirección
Offset del símbolo de la dirección del programa base del objeto. Esto es lo que el operador
Object Address Plus Symbol hace. Ejemplo:
REPEAT Idx FROM 0 TO 2
PrintStr(@@StrAddr[Idx])
El ejemplo anterior incrementa
de la cadena almacenada en tiempo de compilación almacenada en el elemento
StrAddr
@@
. El operador
objeto al valor Offset del tiempo de compilación que se recupero, resultando en una dirección
valida en tiempo de ejecución para la cadena. El método
en este ejemplo, puede usar esa dirección para procesar cada caracter de la cadena.
Pagina 178 · Manual Propeller v1.1
StrAddr
Idx
de 0 a 2. la instrucción
en frente de la instrucción
, donde cada word contiene la dirección
@
es solo el Offset de la dirección del
StrAddr[Idx]
StrAddr[Idx]
agrega la dirección base del
PrintStr
, cuyo código no se muestra
@Str1
@Str2
,
, y
recupera el Offset
Idx
de la tabla