5.16 Tipos de Variantes

 

 

 

Las variantes de una estructura pueden declararse e inicializarse de manera opcional con valores específicos. Ésta es la sintaxis, en la que ya se ha definido tipo Estructura mediante la directiva STRUCT: identificador tipo Estructura < lista-inicializadores >

El identificador sigue las mismas reglas que los demás nombres de variables en MASM. La lista-inicializadores es opcional, pero si se utiliza, es una lista separada por comas de constantes en tiempo de ensamblado que coinciden con los tipos de datos de los campos específicos de una estructura: inicializador [, inicializador]

Los signos de mayor y menor que (< >) vacíos hacen que la estructura contenga los valores predeterminados de los campos, provenientes de la definición de la estructura. De manera alternativa, podemos insertar nuevos valores en los campos seleccionados. Los valores se insertan en los campos de la estructura, en orden de izquierda a derecha, coincidiendo con el orden de los campos en la declaración de la estructura. A continuación se muestran ejemplos de ambos métodos, usando las estructuras COORD y Empleado:

.data

punto1 COORD <5,10>                                              ; X = 5, Y = 10

punto2 COORD <20>                                                 ; X = 20, Y = ?

punto2 COORD <>                                                     ; X = ?, Y = ?

trabajador Empleado <>                                           ; (inicializadores predeterminados)

 

Es posible redefinir sólo los inicializadores de los campos predeterminados. La siguiente declaración redefine sólo el campo NumId de la estructura Empleado, asignando los valores predeterminados a los campos restantes:

persona1 Empleado <"555223333">

Una forma de notación alternativa utiliza llaves {…} en vez de los signos < >:

persona2 Empleado {"555223333"}

Cuando el inicializador para un campo de cadena es más corto que el campo, el resto de las posiciones se rellenan con espacios. No se inserta de manera automática un byte nulo al final de un campo de cadena. Podemos omitir campos de la estructura insertando comas como marcadores de posición. Por ejemplo, la siguiente instrucción omite el campo NumId e inicializa el campo Apellido:

Persona3 Empleado <,"dJones">

Para un campo de arreglo, utilice el operador DUP para inicializar algunos o todos los elementos del arreglo.  Si el inicializador es más corto que el campo, el resto de las posiciones se rellena con ceros. En el siguiente ejemplo, inicializamos los primeros dos valores de HistorialSalario y establecemos el resto a cero:

Persona4 Empleado <,2 DUP(20000)>

Arreglo de estructuras Use el operador DUP para crear un arreglo de estructuras. En el siguiente ejemplo, los campos X y Y de cada elemento en Todos los Puntos se inicializan con ceros:

NumPuntos = 3

TodosLosPuntos COORD NumPuntos DUP(<0,0>)

 

Inicio