360 汇编/360 指令/ST
外观
ST - 存储 - 操作码 50 - RX 格式指令 (32 位)
- ST 2,N2
- ST 11,106(8,10)
具体的语法是
- ST 源寄存器,位移(索引寄存器,基址寄存器)
如果使用了 USING 伪指令,并且目标地址标签所使用的值在某个基址寄存器值的 4096 字节范围内,则汇编程序会自动确定 位移、索引寄存器和 基址寄存器 的值。
RX 指令 (4 字节) | |||||||
字节 1 | 字节 2 | 字节 3 和 4 | |||||
源寄存器 | 目标地址 | ||||||
(以十六进制) | (8 位) 操作码 50 |
(4 位) 0..F |
(4 位) 索引 寄存器 0..F |
(4 位) 基址 寄存器 0..F |
(12 位) 位移 0..FFF |
- 第一个参数是 源寄存器,其值不受指令影响。
- 第二个参数是目标值存储地址,其中包含源寄存器的内容。它由基址寄存器、索引寄存器和位移地址组成。位移用作基址寄存器值从 0 到 4095 的无符号偏移量,并将此位移添加到基址寄存器中包含的值。如果索引寄存器为 0,则忽略它;否则,将其内容添加到先前结果中以获得最终地址。
- 基址寄存器 和 索引寄存器 值为 0 到 15。偏移地址为 0 到 4095。
如果使用了 USING 伪指令,并且目标地址标签所使用的值 (位移) 在某个基址寄存器值的 4096 字节范围内,则汇编程序会自动确定目标和基址寄存器值。
ST 指令在所有型号的 360、370 和 z/System 上都可用。
ST 指令将第一个参数指定的 源寄存器 中包含的 32 位整数复制到第二个参数 (目标地址) 指定的内存地址中。
目标地址的构造方法是:取基址寄存器中存储的值,加上 12 位偏移量 (称为 位移) 地址的值,然后将索引寄存器中存储的值 (除非索引寄存器为 0,否则不添加其内容) 加到基址和位移地址上,以确定目标地址。在上面的 106(8,10) 地址示例中,寄存器 10 中存储的地址值将与位移地址 106 (十六进制 6A) 相加,然后将寄存器 8 中存储的地址值添加到此地址以创建目标地址。如果使用寄存器 0 而不是寄存器 8,则不会使用寄存器 0 中存储的值。
目标地址必须与字边界对齐 (即 4 字节)。程序状态字中的条件码字段不会改变。
- 目标地址必须在有效内存范围内,否则会发生操作异常。
- 目标地址必须与字边界对齐,否则会发生地址异常。
- 目标地址的存储密钥必须与当前进程相同 (或进程必须具有密钥 0 的权限),否则会发生内存保护违规异常。
最密切相关的指令
[编辑源代码]最密切相关的指令是 Add Logical Register (ALR) 而不是 Load Address (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。
上一条指令 SSM |
360 汇编指令 | 下一条指令 STAP |
上一个操作码 4F |
下一个操作码 51 |
360 汇编语言 | |
360 系列 | 介绍 · 基本常见问题解答 · 360 系列 · 360 架构 |
---|---|
360 指令集 | 360 指令 · 分支指令 · 数据传输指令 · 控制流指令 · 算术指令 · 逻辑指令 · 移位和旋转指令 · 特权指令 · 其他指令 |
语法和汇编器 | 360 汇编器· 伪指令 |
指令扩展 | 浮点数 · 高级语言 |
此页面或部分是一个未完成的草稿或概要。 您可以帮助开发工作,或者您可以在项目室中寻求帮助。 |