跳轉到內容

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 彙編器· 偽指令
指令擴充套件 浮點 · 高階語言


華夏公益教科書