跳转到内容

360 汇编/360 指令/LH

来自维基教科书,开放的书籍,开放的世界

LH - 加载半字 - 操作码 48 - RX 格式指令 (32 位)

LH 2,N2
LH 11,106(8,10)

具体的语法是

LH 目标寄存器,偏移量(索引寄存器,基址寄存器)

如果 USING 伪指令已被使用,并且目标地址标签所用的是某个基址寄存器的值 4096 字节以内,则汇编器将自动确定 偏移量索引寄存器基址寄存器 的值。

操作码

[编辑 | 编辑源代码]
RX 指令 (4 字节)
字节 1 字节 2 字节 3 和 4
目标寄存器 源地址
(以十六进制) (8 位)
操作码
48
(4 位)

0..F
(4 位)
索引
寄存器

0..F
(4 位)
基址
寄存器

0..F
(12 位)
位移
0..FFF
  • 第一个参数是 目标寄存器,其值受指令影响。
  • 第二个参数是源值位置地址,其中内容将被加载到目标寄存器中。它包含一个基址寄存器、一个索引寄存器和一个位移地址。位移 用作基址寄存器中值的无符号偏移量(0 到 4095),该位移将添加到基址寄存器中包含的值。如果索引寄存器为 0,则忽略它;否则,它的内容将添加到先前的结果中以获得最终地址。
  • 基址寄存器索引寄存器 的值为 0 到 15。偏移地址为 0 到 4095。

如果 USING 伪指令已被使用,并且目标地址标签所用的是某个基址寄存器的值 4096 字节以内,则汇编器将自动确定目标和基址寄存器的值。

可用性

[编辑 | 编辑源代码]

LH 指令在所有型号的 360、370 和 z/System 上都可用。

LH 指令从参数指定的内存地址读取一个 16 位整数,并将它放入由第一个参数指定的目标寄存器的低 16 位。寄存器的左半部分将被零或一替换,以反映半字的符号(最左边的位)。

源参数地址必须对齐到半字边界(即 2 字节),否则将发生异常。程序状态字中的条件码字段不会改变。

异常和错误

[编辑 | 编辑源代码]
  • 源地址必须在有效内存范围内,否则会发生操作异常。
  • 源地址必须对齐到半字边界,否则会发生地址异常。
  • 源地址的存储键必须与当前进程相同(或进程必须具有为零的权限键),否则会发生内存保护违反异常。
[编辑源代码]

最密切相关的指令是逻辑加寄存器(ALR),而不是加载地址(LA),如有时所假设的那样。而 L 从内存加载值,LA 不访问内存;它只计算一个数字,该数字可以是地址,但不一定是地址。

32 位指令

[编辑源代码]
  • 要从内存加载一个 8 位字节(字符)值,请参见 IC
  • 要根据掩码将一个或多个 8 位字节值加载到寄存器中,请参见 ICM
  • 要从内存加载一个 16 位半字值,请参见 LH
  • 要将一个 12 位无符号值加载到寄存器中,或将不超过 4095 的值加到一个或两个 32 位寄存器中的值,请参见 LA
  • 要将一个 32 位字值从一个寄存器复制到另一个寄存器,请参见 LR
  • 要从内存加载一个 32 位字值,请参见 L
  • 要将一个 8 位字节(字符)值存储到内存中,请参见 STC
  • 要根据掩码将一个或多个 8 位字节值存储到内存中,请参见 STCM
  • 要将一个 16 位半字值存储到内存中,请参见 STH
  • 要将一个 32 位字值存储到内存中,请参见 ST

64 位指令

[编辑源代码]
  • 要将一个 20 位有符号值从扩展的(20 位)有符号内存偏移量加载到一个 32 位或 64 位寄存器中,请参见 LAY
  • 要将一个 32 位值从扩展的(20 位)有符号内存偏移量加载到一个 64 位寄存器中,请参见 LGF
  • 要将一个 64 位值从一个 64 位寄存器复制到另一个 64 位寄存器,请参见 LGR
  • 要将一个 64 位值从内存加载到一个 64 位寄存器中,请参见 LG
  • 要将一个 32 位值从寄存器存储到扩展的(20 位)有符号内存偏移量,请参见 STY
  • 要将一个 64 位值从一个 64 位寄存器存储到内存中的地址,请参见 STG


上一条指令
LGR
360 汇编指令   下一条指令
LHI
上一个操作码
47
下一个操作码
49
360 汇编语言
360 系列 简介 · 基本常见问题解答 · 360 系列 · 360 架构
360 指令集 360 指令 · 分支指令 · 数据传输指令 · 控制流指令 · 算术指令 · 逻辑指令 · 移位和旋转指令 · 特权指令 · 其他指令
语法和汇编器 360 汇编器· 伪指令
指令扩展 浮点 · 高级语言


华夏公益教科书