跳到內容

360 彙編/360 架構

來自華夏公益教科書,開放的世界,開放的書籍

360 架構是 32 位機器(z/System 為 64 位),其中標準字長為 32 位(z/System 為 64 位)。在使用 32 位指令時,根據定址模式,許多指令不使用所有 32 位,而可能只使用地址、暫存器或記憶體的低 24 位或 31 位。360 支援高達 16 兆位元組(2^24 或 16*1024^3)的記憶體和 24 位定址。370 和 390 支援高達 2 吉位元組(2^31)的記憶體和 31 位定址。z/System 支援高達 16 艾位元組(2^64)的記憶體和 64 位定址。

360 架構具有:-

  • 16 個通用 32 位暫存器(z/System 上為 64 位),編號為 0 到 15(通常等效於標籤“R0”到“R15”)
  • 如果啟用了訪問模式(PSW 的位 16 和 17 設定為 X'01'),則有 16 個 32 位訪問暫存器,編號為 0 到 15(360 上沒有訪問暫存器)。
  • 16 個特權 32 位控制暫存器,0 到 15,用於控制計算機的各種操作(360 上不可用)
  • 4 個浮點 64 位暫存器,編號為 0、2、4 和 6,而 370、390 和 z/System 則擁有完整的 15 個浮點暫存器,以及
  • 一個 64 位(z/System 上為 128 位)的程式狀態字 (PSW)。程式狀態字由特權位、程式計數器和記憶體保護金鑰以及其他標誌位組成。

特權狀態和問題狀態

[編輯 | 編輯原始碼]

PSW 的特權位 (15) 指示當前執行的程式的狀態。有兩種狀態,問題狀態 (0) 和管理狀態 (1)。如果特權位設定,則程式處於“管理狀態”,如果特權位清除,則程式處於“問題狀態”。

問題狀態是所有使用者軟體執行的地方。問題狀態應用程式(“問題程式”)有諸多限制,包括記憶體讀寫限制,並且不能直接發出 I/O 指令。
管理狀態為作業系統及其所有元件保留。某些作業系統允許程式被標記為“授權”,在這種情況下,該程式可以在管理狀態下執行。

記憶體保護

[編輯 | 編輯原始碼]

記憶體保護金鑰(位 8-11)為 4 位,決定特定程式可以訪問哪些記憶體區域。計算機記憶體的頁面被標記為特定的保護金鑰,只有執行具有相同金鑰(或金鑰為零)的程式才能寫入特定記憶體部分。某些版本的硬體也具有讀保護功能。

虛擬記憶體

[編輯 | 編輯原始碼]

370 及更高版本支援“動態地址轉換”,其中程式可以載入到虛擬地址,並且虛擬地址由硬體直接自動轉換為真實地址。多個程式可以對映到比機器實際擁有的記憶體更多的虛擬記憶體,從而允許比實際記憶體容量更多的程式同時執行,或允許比實際可用記憶體更大的程式執行。作業系統可以將頁面寫入磁碟空間並從磁碟空間讀取頁面,以便在程式未執行時或未使用所有記憶體時儲存程式。

由於程式並不總是正常工作,或者可能需要作業系統代表他們執行某些操作,因此 360 系列支援各種異常來指示事件的發生。某些異常指示錯誤,可能的違反安全行為,普通的系統請求或機器損壞。以下是許多可用異常中比較常見的異常:

  • 定址 - 引用不存在的記憶體。雖然這通常是程式設計錯誤,但如果程式訪問未交換進來的虛擬記憶體,則會合法地發生此異常,在這種情況下不是錯誤條件。
  • 時鐘 - 計時器已發出訊號,表明已經過去了另一秒。這不是錯誤條件。
  • 資料 - 打包算術中的無效十進位制資料值,某些算術或陷阱指令中的超出範圍的值,
  • 十進位制除法 - 十進位制算術指令中的除以 0。
  • 十進位制溢位 - 結果過大而無法容納在提供的區域內時,會丟失數字。
  • 外部中斷 - 連線到計算機的裝置已發出中斷訊號。這不是錯誤條件。
  • 執行 - 嘗試對帶有執行操作碼的指令使用執行指令 (EX)。
  • 定點除法 - 二進位制算術指令中的除以 0。
  • 定點溢位 - 結果超過允許的最大值
  • 浮點除法 - 浮點算術指令中的除以 0
  • 浮點有效性 - 分數變為零
  • 浮點平方根 - 值小於零
  • I/O 中斷 - 輸入或輸出裝置(印表機、鍵盤、乙太網)已發出訊號,表明它已完成處理傳送給它的資料或命令,或者有輸入可用
  • 機器檢查 - 硬體的某一部分發生了故障。
  • 監控 - 監控呼叫指令中的標記值被使用。
  • 運算元 - 給 I/O 指令提供的某些值不正確。
  • 操作 - 嘗試執行無效的操作碼。
  • 頁面轉換 - 要引用的記憶體頁面的地址表被標記為無效(這並不一定錯誤,可能意味著作業系統已將該頁面交換出去,需要恢復它)
  • 主要許可權 - 給程式轉移 (PT) 指令提供不正確或無效的值。
  • 特權操作 - 問題程式試圖執行特權指令。
  • 保護 - 訪問無效、不存在或未經授權的記憶體。
  • 規格 - 嘗試在奇數地址執行(或將控制權轉移到)指令;在某些浮點算術指令中使用不正確的浮點暫存器;在指令中使用不在正確地址邊界(半字、字、雙字)上的記憶體地址。
  • 管理呼叫 - 程式已發出管理呼叫 (SVC) 指令。這不是錯誤條件。
  • 計時器中斷 - 中斷計時器已發出訊號,表明時間限制已到。這不是錯誤條件。
  • 轉換 - 給程式呼叫 (PC) 指令提供無效的程式碼。

暫存器約定

[編輯 | 編輯原始碼]

360 上的某些暫存器是“保留”的,要麼是硬體要求,要麼是約定(作業系統使用或通用做法)。請注意,這些僅僅是約定或一般做法,因為從技術上講,沒有一個通用暫存器被保留用於任何特定用途。

暫存器 0 通常在許多指令中用作佔位符,表示沒有操作。許多指令將使用暫存器 0 視為具有推定的零值或等效於記憶體中的地址 X'00000000'(在 64 位模型上為 X'0000000000000000')。根據作業系統以及地址 0 是真實地址 0 還是虛擬地址,該區域可能受到讀、寫或讀防寫(除非當前任務在管理狀態或儲存金鑰 0 下執行)。

暫存器 1 按照約定用於指向傳遞給被呼叫子程式的引數列表(32 位地址),以及用於傳遞作業系統呼叫 (SVC) 的引數。它也由翻譯和測試指令 TRT 特別使用。

暫存器 2 可能被某些作業系統或某些指令用於其他引數或返回值,但通常可用於通用用途。

暫存器 3暫存器 12 可用於通用用途(除了 Linux 中編號低於 7 的暫存器可用於管理呼叫的引數)。

暫存器 13 按照約定用於指向被呼叫子程式用於儲存傳遞暫存器的儲存區域。它在具有堆疊的處理器上等效於“堆疊指標”。作為獨立應用程式執行且不呼叫任何子程式的程式可以使用該暫存器用於任何目的,但不建議這樣做,除非在原始碼中放置警告,表明正在這樣做,因為這是非標準的,並且可能會被以後維護該應用程式的任何人忽略。

暫存器 14 按照約定用於提供被呼叫子程式返回到呼叫者的地址。

暫存器 15,按照慣例,用來提供被呼叫子程式的入口地址,併為子程式提供初始基址暫存器。如果子程式很短(並且它本身不呼叫更低階的子程式或發出更改暫存器 15 的 Supervisor Call),子程式可以繼續使用暫存器 15 作為其基址暫存器;或者,更典型的情況是,它會立即將此暫存器(以及其他暫存器)儲存在暫存器 13 提供的儲存區域中,並使用不同的暫存器(或一組暫存器)作為基址。此外,暫存器 15 可能會被某些作業系統用來提供一些引數(或從 SVC 返回一些值)。它用於此目的與某些小型機和微型機上的程式計數器暫存器有一些相似之處。按照慣例,暫存器 15 也經常用作從被呼叫子程式返回的值,通常設定為索引值(0、4、8、12 等),適合在返回後直接用在分支表中。

當程式在 Linux 作業系統上執行時,Supervisor Calls 會分別在暫存器 1 到 6 中傳遞最多 6 個值。當程式在 OS/VS1 或 z/OS 上執行時,Supervisor Calls 會在暫存器 0、1 中傳遞值,如果超過 2 個,則在暫存器 1 指向的列表中傳遞值。

程式狀態字

[edit | edit source]

程式狀態字 (PSW) 是一個 64 位(在 IBM 360、370、ESA/390、Univac 和 Fujitsu 上)或 128 位(在 IBM z/System 上)的 privileged 暫存器,它包含有關機器當前狀態的資訊(位 12 決定它是一個 64 位還是 128 位暫存器)。與通用暫存器不同,PSW 不能直接訪問讀或寫。privileged 程式可以透過 privileged LPSW(在 360/370/390 系列上)或 LPSWE(在 z/System 上)指令更改整個 PSW 的內容。非 privileged 程式可以透過執行比較指令、測試指令和 SVC 指令,或透過某些算術和比較指令,以及透過分支指令,更改 PSW 中的某些位。PSW 中具有固定值的區域在下面的表格中以綠色顯示。

注意,IBM 大型機對位編號的約定與常用的約定相反。位 0 是最高有效位;位 64(或 64 位系統上的 128 位)是最低有效位。

64 位 Func 0 R 000 T I
O
E
X
Key Type M W P AS CC Prog
Mask
00000000 A 指令地址
位 # 0 1 2-4 5 6 7 8-11 12 13 14 15 16-17 18-19 20-23 24-31 32 33-63
128 位 Func 0 R 000 T I
O
E
X
Key Type M W P A
S
CC Prog
Mask
R
I
000000 E
A
位 # 0 1 2-4 5 6 7 8-11 12 13 14 15 16-17 18-19 20-23 24 25-30 31
Func B
A
0000000000000000000000000000000 指令地址
位 # 32 33-63 (31 位) 64-127 (64 位)

以下是 PSW 中欄位的解釋。

  • (R) - 位 1:如果控制暫存器 9 中的某些 PER 事件掩碼位被設定,則設定為(值 1)以允許程式事件記錄 (PER) 中斷。
  • (T) - 位 5:如果動態地址轉換 (DAT) 已啟用,則設定為;這允許虛擬化地址;如果清除,則暫存器中使用的所有地址都是真實地址。
  • (IO) - 位 6:如果允許發生輸入/輸出 (IO) 中斷,則設定為,由控制暫存器 6 中的位控制。
  • (EX) - 位 7:如果允許發生外部中斷,則設定為。
  • (Key) - 位 8-11:包含當前正在執行任務的儲存金鑰。此金鑰對於 privileged 任務為 0。任務只能寫入標記有相同金鑰的記憶體區域,除非其金鑰為 0。某些型號可能允許或禁止讀取標記有不同金鑰的記憶體(對於沒有以 0 為金鑰執行的任務),具體取決於作業系統選擇了什麼。某些作業系統允許(只讀)訪問 X'1000' 以下的位置,以允許使用者程式讀取指向系統表的指標。(這假設使用者程式不在虛擬地址 0 處執行)。
  • (Type) - 位 12:對於 64 位 PSW 設定;如果為 128 位 PSW,則清除。
  • (M) - 位 13:如果允許在檢測到損壞的情況下發生機器檢查中斷,則設定為。受控制暫存器 14 中設定的掩碼位的影響。
  • (W) - 位 14:如果機器處於等待狀態,則設定為;如果機器正在執行,則清除。
  • (P) - 位 15:如果機器處於 supervisor 狀態,則設定為;如果機器處於 problem 狀態,則清除。
  • (AS)- 位 16 和 17:與 T 位結合使用以控制如何執行地址轉換。

5

16

17
地址處理
指令邏輯
0任何值真真實模式(但是,如果位 16-17 為 X'01',則訪問暫存器用於地址或值,而不是通用暫存器)
100
01地址暫存器
10輔助
11HomeHome
  • (CC)- 位 18 和 19:條件程式碼,用於指示算術、比較、測試或邏輯指令的結果。
條件 符號 PSW 中的條件程式碼
結果為零或相等 Z 0
結果為負數 N 1
結果為正數 P 2
結果溢位 O 3
  • (Prog Mask) - 位 20-23:指示是否遮蔽某些算術異常以防止導致中斷。這些位可以透過 SPM 指令設定或清除。這些掩碼是
    • 位 20 - 整數溢位
    • 位 21 - 十進位制溢位
    • 位 22 - 浮點下溢
    • 位 23 - 浮點溢位
  • (RI) (128 位 PSW) - 位 24:為 IBM 保留。
  • (A) (64 位 PSW) - 位 32:如果啟用了 31 位定址,則設定為;如果使用 24 位定址,則清除。
  • (指令地址) 正在執行的當前指令的地址
    • (64 位 PSW) - 位 33-63:24 位地址(或如果 A 位被設定,則為 31 位)。
    • (128 位 PSW) - 位 64-127:64 位地址。
  • {EA} 和 (BA) - 位 31 和 32 (128 位 PSW) : 控制定址模式。如果 EA 和 BA 為零;則採用 24 位定址。如果 EA 為 0,BA 為 1,則採用 31 位定址。如果兩者都為 1,則採用 64 位定址。如果 EA 為 1,BA 為 0,則會丟擲規範異常。


360 組合語言
360 系列 簡介 · 基本常見問題解答 · 360 系列 · 360 架構
360 指令集 360 指令 · 分支指令 · 資料傳輸指令 · 控制流指令 · 算術指令 · 邏輯指令 · 移位和旋轉指令 · privileged 指令 · 其他指令
語法和彙編器 360 彙編器· 偽指令
指令擴充套件 浮點 · 高階語言
華夏公益教科書