360 汇编/360 指令/EX
EX - EXecute - 操作码 X / 十进制
- BCTR R1,0
- EX R1,LABEL
- LABEL PACK PACKIT,0(L,R3)
- L 将被替换为 R1 的最后一个字节值
EX 指令在所有型号上都可用,包括 360、370 和 z/System。EX(执行)
EX R5,TARGET 这用于在执行目标代码之前稍微修改目标代码。如果第一个操作数不是 R0,则只能修改目标代码。
这里,如 X(0) 所示,这个零用于声明要从 Y 移动到 X 的字节长度。当 EXE 指令执行时,它将执行 MVC 指令中长度位字段的右侧字节与寄存器的右侧字节进行按位或运算。现在,目标代码指的是这里的 MVC 代码。
因此,现在将从 Y 复制 4 个字节到 X 字段。我们可以通过更改寄存器 5 中的值来根据需要更改字段。
更多示例::R4 = X
’00000005’ R5 = X
’FFFFFF04’ R6 = X
’00000034’
the values stored previously in those registers......
这里显示了一些目标代码的机器码................... TARGET1 MVC FIELDA(0),FIELDB * 机器码:D2 00 C0 10 C0 20
TARGET2 AP FIELDC(0),FIELDD(0) * 机器码:FA 00 C0 22 C0 34
TARGET3 LR R0,R0 * 机器码:18 00
................................................................................................
///////// 由于 R4 的最右侧字节 = x'05' = 05,因此将从 FIELDB 复制 6 个字节到 FIELDA EX R4,TARGET1
///////// 由于 R5 的最右侧字节 = x'04' = 04,因此将从 FIELDB 复制 5 个字节到 FIELDA
EX R5,TARGET1
///////// 由于 R6 的最右侧字节 = x'34' = 52,因此将从 FIELDB 复制 53 个字节到 FIELDA EX R6,TARGET1
//////// 由于 R6 的最右侧字节 = x'34',因此第一个 nibble 将用于 FIELDC,第二个 nibble 将用于 FIELDD
EX R6,TARGET2
////// FIELDD(5 个字节)加到 FIELDC(4 个字节)中,并存储到 FIELDC 中。
//////// 由于有两个 R0,这意味着两个 nibble 加在一起是 x'00'
EX R6,TARGET3
//////// 由于 R6 的最右侧字节 = x'34',因此在执行 EX 指令后机器码将变为 x'18 34'
//////// 并且寄存器 4 的内容将被加载到寄存器 3 中
EX 指令用于允许程序修改自身以更改其他指令的某些参数,而无需实际修改程序的代码。一个用法可能是移动 256 个字节或更少的字符串,通过执行 EX 指令更改该指令中的长度值来执行 MVC 指令。
EX 指令将 R1 寄存器的低字节与目标指令的第二个字节(通常是长度)进行按位或运算(不是替换,而是按位或运算),然后执行该指令。
第二个用途是通过编码 Ex 0,* 生成一个故意的 S0C3 异常,这会产生一个良好的转储,并且不会像使用 ABEND 宏时那样改变寄存器 14-1。这种技术并不专门为 IBM 使用,正如一些人所坚持的那样。
- 如果目标指令本身是 EX 指令,则会发生执行异常
- 如果目标指令不在偶数地址上,则会发生地址异常
- 如果目标指令不包含有效的操作码,则会发生操作异常
- 如果目标指令是特权指令,则会发生保护冲突异常,除非此任务在 PSW 中设置了特权位
- 如果要执行的指令发生了异常,则将抛出该异常
上一条指令 XXX |
360 汇编指令 | 下一条指令 XX |
上一个操作码 00 |
下一个操作码 00 |
360 汇编语言 | |
360 系列 | 简介 · 基本常见问题解答 · 360 系列 · 360 架构 |
---|---|
360 指令集 | 360 指令 · 分支指令 · 数据传输指令 · 控制流指令 · 算术指令 · 逻辑指令 · 移位和旋转指令 · 特权指令 · 其他指令 |
语法和汇编器 | 360 汇编器 · 伪指令 |
指令扩展 | 浮点 · 高级语言 |
此页面或部分是未开发的草稿或提纲。 您可以帮助 开发作品,或者您可以要求在 项目室 中提供帮助。 |