Instrucción lscbx (Load String y Compare Byte Indexed)

Finalidad

Carga bytes consecutivos en almacenamiento en registros consecutivos.

Nota: La instrucción lscbx solo está soportada en la arquitectura de la familia POWER ®.

Sintaxis

Bits VALOR
0 - 5 31
6 - 10 RT
11 - 15 RA
16 - 20 RB
21 - 30 277
31 RC
Elemento Descripción
familia POWER familia POWER
lscbx RT, RA, RB
lscbx. RT, RA, RB

Descripción

La instrucción lscbx carga N bytes consecutivos dirigidos por la dirección efectiva (EA) en el registro de uso general (GPR) RT, empezando por el byte más a la izquierda en el registro RT, a través de RT + NR -1, y recortando de vuelta a través del GPR 0, si es necesario, hasta que se haya cargado una coincidencia de bytes con XER16-23 o N bytes. Si se encuentra una coincidencia de bytes, ese byte también se carga.

Si el GPR RA no es 0, el EA es la suma del contenido del GPR RA y la dirección almacenada en el GPR RB. Si RA es 0, EA es el contenido del RPR RB.

Tenga en cuenta lo siguiente cuando utilice la instrucción lscbx :

  • XER (16-23) contiene el byte a comparar.
  • XER (25-31) contiene el recuento de bytes antes de que se invoque la instrucción y el número de bytes cargados después de que se haya completado la instrucción.
  • Si XER (25-31) = 0, el GPR RT no se altera.
  • N es XER (25-31), que es el número de bytes a cargar.
  • NR es el límite máximo (N/4), que es el número total de registros necesarios para contener los bytes consecutivos.

Los bytes siempre se cargan de izquierda a derecha en el registro. En el caso en el que se ha encontrado una coincidencia antes de que se cargaran N bytes, el contenido de los bytes situados más a la derecha que no se han cargado desde dicho registro y el contenido de todos los registros posteriores hasta el registro RT + NR -1 no están definidos. Además, no se hace ninguna referencia al almacenamiento después de que se encuentre el byte coincidente. En el caso en el que no se ha encontrado una coincidencia, el contenido de los bytes más a la derecha no cargados del registro RT + NR -1 no está definido.

Si el GPR RA no es 0 y los GPR RA y RB están en el rango que se va a cargar, los GPR RA y RB no se escriben. Los datos que se habrían escrito en ellos se descartan y la operación continúa normalmente. Si el byte en XER (16-23) se compara con cualquiera de los 4 bytes que se habrían cargado en GPR RA o RB, pero se están descartando para su reinicio, el bit EQ en el registro de condición y el recuento devuelto en XER (25-31) no están definidos. El registro de cociente múltiple (MQ) no se ve afectado por esta operación.

La instrucción lscbx tiene dos formatos de sintaxis. Cada formulario de sintaxis tiene un efecto diferente en el campo de registro de condición 0.

Elemento Descripción Descripción Descripción Descripción
Sintaxis Formulario Desbordamiento Excepción (OE) Punto fijo Registro de excepciones Registro Bit (Rc) Condición Campo de registro 0
lscbx Ninguna XER (25-31) = nº de bytes cargados 0 Ninguna
lscbx. Ninguna XER (25-31) = nº de bytes cargados 1 LT,GT, EQ, SO

Los dos formatos de sintaxis de la instrucción lscbx colocan el número de bytes cargados en los bits 25-31 del registro de excepciones de punto fijo (XER). Si el formulario de sintaxis establece el bit Registro (Rc) en 1, la instrucción afecta a los bits Menor que (LT) cero, Mayor que (GT) cero, Igual a (EQ) cero y Desbordamiento de resumen (SO) en el Campo de registro de condición 0. Si Rc = 1 y XER (25-31) = 0, el campo de registro de condición 0 no está definido. Si Rc = 1 y XER (25-31) < > 0, el campo de registro de condición 0 se establece de la forma siguiente:

LT, GT, EQ, SO = b'00'||match||XER(SO)

Nota: Una interrupción del almacenamiento de datos puede interrumpir esta instrucción. Cuando se produce una interrupción de este tipo, la instrucción se reinicia desde el principio.

Parámetros

Elemento Descripción
RT Especifica el registro de propósito general de destino inicial.
RA Especifica el registro de propósito general de origen para el cálculo de EA.
RB Especifica el registro de propósito general de origen para el cálculo de EA.

Ejemplos

  1. El código siguiente carga bytes consecutivos en los GPR 6, 7 y 8:
    
    .csect data[rw]
    string: "Hello, world"
    # Assume XER16-23 = 'a.
    # Assume XER25-31 = 9.
    # Assume GPR 5 contains the address of csect data[rw].
    # Assume GPR 4 contains the displacement of string relative
    # to csect data[rw].
    .csect text[pr]
    lscbx 6,5,4
    # GPR 6 now contains 0x4865 6c6c.
    # GPR 7 now contains 0x6f2c 2077.
    # GPR 8 now contains 0x6fXX XXXX.
    
  2. El código siguiente carga bytes consecutivos en los GPR 6, 7 y 8:
    
    # Assume XER16-23 = 'e.
    # Assume XER25-31 = 9.
    # Assume GPR 5 contains the address of csect data[rw].
    # Assume GPR 4 contains the displacement of string relative
    # to csect data[rw].
    .csect text[pr]
    lscbx. 6,5,4
    # GPR 6 now contains 0x4865 XXXX.
    # GPR 7 now contains 0xXXXX XXXX.
    # GPR 8 now contains 0xXXXX XXXX.
    # XER25-31 = 2.
    # CRF 0 now contains 0x2.