lscbx (装入字符串并比较已建立索引的字节) 指令

用途

将存储器中的连续字节装入到连续寄存器中。

注: lscbx 指令仅在 POWER ® 系列体系结构中受支持。

语法

位数 VALUE
0 - 5 31
6 - 10 RT
11 - 15 亚美尼亚共和国
16 - 20 经常预算
21 - 30 277
31 rc
描述
POWER 系列 POWER 系列
lscbx RT RA RB
lscbx。 RT RA RB

描述

lscbx 指令将由有效地址 (EA) 寻址的 N 个连续字节装入到通用寄存器 (GPR) RT中,从寄存器 RT中最左边的字节开始,通过 RT + NR -1 ,并在需要时通过 GPR 0 回绕,直到找到与 XER16-23 或 N 字节匹配的字节为止。 如果找到字节匹配,那么还会装入该字节。

如果 GPR RA 不是 0 ,那么 EA 是 GPR RA 的内容与存储在 GPR RB中的地址的总和。 如果 RA 为 0 ,那么 EA 是 GPR RB的内容。

使用 lscbx 指令时,请考虑以下事项:

  • XER (16-23) 包含要比较的字节。
  • XER (25-31) 包含在调用指令之前的字节计数以及在指令完成之后装入的字节数。
  • 如果 XER (25-31) = 0 ,那么不会改变 GPR RT
  • N 是 XER (25-31) ,这是要装入的字节数。
  • NR 是上限 (N/4) ,这是包含连续字节所需的寄存器总数。

在寄存器中始终从左到右装入字节。 在装入 N 字节之前找到匹配项的情况下,未从该寄存器装入最右边的字节的内容以及所有后续寄存器的内容 (包括寄存器 RT + NR -1) 都未定义。 另外,在找到匹配的字节之后,不会对存储器进行任何引用。 在找不到匹配项的情况下,未从寄存器 RT + NR -1 装入的最右边字节的内容未定义。

如果 GPR RA 不是 0 ,并且 GPRs RARB 在要装入的范围内,那么不会写入 GPRs RARB 。 将废弃将写入到这些数据中的数据,并且该操作将正常继续执行。 如果 XER (16-23) 中的字节与已装入到 GPR RARB中但由于可重新启动而被废弃的任何 4 字节进行比较,那么未定义 "条件寄存器" 中的 EQ 位以及 XER (25-31) 中返回的计数。 乘商 (MQ) 寄存器不受此操作影响。

lscbx 指令有两种语法形式。 每种语法形式对条件寄存器字段 0 都有不同的影响。

描述 描述 描述 描述
语法 表单 溢出 异常 (OE) 固定点 异常寄存器 记录 位 (RC) 条件 注册字段 0
lscbx XER (25-31) = 已装入的字节数 0
lscbx。 XER (25-31) = 已装入的字节数 1 LT ,GT, EQ 和 SO

lscbx 指令的两种语法形式将装入定点异常寄存器 (XER) 位的字节数放置在 25-31。 如果语法格式将记录 (Rc) 位设置为 1 ,那么指令会影响条件寄存器字段 0 中的 "小于 (LT) 0" , "大于 (GT) 0" , "等于 (EQ) 0" 和 "摘要溢出 (SO)" 位。 如果 rc = 1 且 XER (25-31) = 0 ,那么未定义条件寄存器字段 0。 If Rc = 1 and XER(25-31) <> 0, then Condition Register Field 0 is set as follows:

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

注: 此指令可由数据存储器中断中断。 当发生此类中断时,将从头开始重新启动指令。

参数

描述
RT 指定起始目标通用寄存器。
RA 指定用于 EA 计算的源通用寄存器。
经常预算 指定用于 EA 计算的源通用寄存器。

示例

  1. 以下代码将连续字节装入 GPR$tag1 , 7 和 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. 以下代码将连续字节装入 GPR$tag1 , 7 和 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.