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 彙編器 · 偽指令 |
| 指令擴充套件 | 浮點 · 高階語言 |
| 此頁面或部分是未開發的草稿或提綱。 您可以幫助 開發作品,或者您可以要求在 專案室 中提供幫助。 |