新四季網

執行對兩個操作數的操作並隨後存儲原始值的方法和系統的製作方法

2023-05-24 07:31:51

專利名稱:執行對兩個操作數的操作並隨後存儲原始值的方法和系統的製作方法
技術領域:
本發明涉及計算機系統,並且更具體地涉及計算機系統處理器指令功能性。
背景技術:
商標IBM 是U. S. A(美國)紐約阿蒙克的國際商業機器公司的註冊商標。S/390、 Z900、z990和ZlO以及其它產品名稱可能是國際商業機器公司或其它公司的註冊商標或產
品名稱。IBM從二十世紀六十年代的公知IBM 系統360的機器開始至今,通過許多非常有才能的工程師的工作,已經創建了一種特殊的架構,由於其對於計算系統的本質特性而被公知為「大型機」,其操作原理通過描述已經由IBM發明人發明的指令來陳述機器的架構,可以在「大型機」實施所述指令時執行所述指令,並且由於它們對改進「大型機」所表示的計算機器的狀態的顯著貢獻,而被選擇包含在多年陳述的IBM的操作原理(IBM,s Principles of Operation)中作為顯著貢獻。2009 年 2 月出版的IBM z/Architecture 操作原理的第八版已經成為作為SA22-7832-07的標準出版的參考文獻,並且被併入包括IBM系統zlO 企業級伺服器的IBM的zlO 大型機伺服器中。通過全文引用將 IBMZ/Architecture 操作原理(出版物SA22-7832-07)合併於此。參考圖1A,描繪了主機計算機系統迎的典型組件。在計算機系統中也可以採用本領域眾所周知的其它組件布置。典型的主機計算機迎包括一個或多個CPU1,其與主存儲器 (計算機存儲器幻通信;以及到存儲裝置11和網絡10的1/0接口,用於與其它計算機或 SAN等通信。CPUl與具有架構的(architected)指令集和架構的功能性的架構兼容。CPUl 可以具有動態地址轉換(DAT) 3,用於將程序地址(虛擬地址)變換為存儲器的真實地址。 DAT典型地包括用於高速緩存(cache)轉換的轉換後備緩衝器(TLB) 7,使得以後對計算機存儲器2的塊的訪問不需要地址轉換的延遲。典型地,在計算機存儲器2與處理器1之間採用高速緩存9。高速緩存9可以是分層級的,具有對於多於一個CPU可用的大高速緩存以及在大高速緩存與每個CPU之間的較小、較快(較低級)的高速緩存。在一些實施方式中, 較低級的高速緩存被劃分以提供用於指令取出和數據訪問的分離低級高速緩存。在實施例中,由指令取出單元4經由高速緩存9從存儲器2取出指令。在指令解碼單元(6)中解碼該指令,並且將該指令調度(dispatch)(在一些實施例中與其它指令一起)至指令執行單元8。典型地,採用幾個執行單元8,例如,算術執行單元、浮點執行單元和分支指令執行單元。由執行單元執行指令,如需要則從指令指定的寄存器或存儲器訪問操作數。如果要從存儲器2訪問(加載或存儲)操作數,則加載存儲單元5典型地在被執行的指令的控制下處理訪問。可以在硬體電路中、或在內部微代碼(固件)中、或通過這兩者的組合來執行指令。在圖IB中,提供了仿真的主機計算機系統12的示例,其仿真主機架構的主機計算機系統迎。在仿真的主機計算機系統21中,主機處理器(CPU) 1是仿真的主機處理器(或虛擬主機處理器)並包括仿真處理器27,其具有與主機計算機50的處理器1不同的本地指令集架構。仿真的主機計算機系統21具有對於仿真處理器27可訪問的存儲器22。在該示例實施例中,存儲器22被分割為主機計算機存儲器2部分和仿真例程23部分。主機計算機存儲器2對於根據主機計算機架構的仿真的主機計算機21的程序可用。仿真處理器27 執行與仿真的處理器1的架構不同的架構的架構指令集的本地指令(所述本地指令從仿真例程存儲器23獲得),並且可以通過採用在序列&訪問/解碼例程中獲得的一個或多個指令來從主機計算機存儲器2中的程序訪問用於執行的主指令,所述序列&訪問/解碼例程可以解碼所訪問的主機指令,以確定本地指令執行例程,用於仿真所訪問的主機指令的功能。可以通過架構的設施例程(Architected Facilities Routines)仿真為主機計算機系統迎的架構所定義的其它設施,例如,包括諸如通用寄存器、控制寄存器、動態地址轉換和 I/O子系統支持和處理器高速緩存的設施。仿真例程還可以利用仿真處理器27中可用的功能(諸如通用寄存器和虛擬地址的動態轉換)來增強仿真例程的性能。還可以提供特殊硬體和卸載(Off-Load)引擎來輔助處理器27仿真主機計算機迎的功能。在大型機中,程式設計師(現今通常是「C」程式設計師)通常通過編譯器應用使用架構的機器指令。可以在z/Architecture IBM伺服器中本地地執行、或者可替代地在執行其它架構的機器中執行存儲在存儲介質中的這些指令。可以在現有的和未來的IBM大型機伺服器中以及在IBM的其它機器(例如,pSeries 伺服器和xseries 伺服器)上仿真它們。可以在使用由IBM 、Intel 、AMD 、Sun Microsystem (Sun微系統)等製造的硬體的多種機器上運行Linux的機器中執行它們。除了在Z/Architecture 下的該硬體上執行之外,還可以使用 Linux 以及通過 Hercules、UMX、FSI (基礎軟體公司(Fundamental Software, Inc.)) 或平臺解決方案公司(Platform Solutions, Inc.) (PSI)使用仿真的機器,其中通常執行是在仿真模式中。在仿真模式中,通過本地處理器執行仿真軟體以仿真所仿真的處理器的架構。本地處理器27典型地執行包括固件或本地作業系統的仿真軟體巡來執行所仿真的處理器的仿真。仿真軟體益負責取出並執行所仿真的處理器架構的指令。仿真軟體益維持仿真程序計數器以跟蹤指令邊界。仿真軟體益一次可以取出一個或多個仿真機器指令,並將一個或多個仿真機器指令轉變為對應組的本地機器指令,用於由本地處理器27執行。這些經轉變的指令可以被高速緩存,使得可以實現更快的轉變。儘管如此,仿真軟體必須維持仿真的處理器架構的架構規則,以便確保為仿真的處理器所寫的作業系統和應用正確操作。此外,仿真軟體必須提供由仿真的處理器1的架構識別的資源,其包括但不限於控制寄存器、通用寄存器、浮點寄存器、動態地址轉換功能(例如,包括段表和頁表)、中斷機制、上下文切換機制、當日時間(TOD)時鐘以及至1/0子系統的架構的接口,使得設計為在仿真的處理器上運行的作業系統或應用程式可以在具有仿真軟體的本地處理器上運行。解碼被仿真的特定指令,並且調用子例程來執行各個單獨(individual)指令的功能。例如,在「C」子例程或驅動器中,或者在提供用於特定硬體的驅動器的某些其它方法中,實施仿真所仿真的處理器1的功能的仿真軟體功能型,在理解優選實施例的描述之後,其將在本領域的技術人員的技藝內。各種軟體和硬體仿真專利包括但不限於 US5551013 (Beausoleil 等人的「 Multiprocessor for hardware emulation,,)、 US6009261 (Scalzi 等人的"Preprocessing of stored target routines for emulating incompatible instructions on a target processor,,)、US5574873 (Davidian 等人的"Decoding guest instruction to directly access emulation routines that emulate the guest instructions」)、US6308255 (Gorishek等人的「Symmetrical multiprocessing bus and chipset used for coprocessor support allowing non-native code to run in a system,,)、US6463582 (Lethin 等人的 「Dynamic optimizing object code translator for architecture emulation and dynamic optimizing object code translation method,,)以及 US5790825 (Eric Traut 的「Method for emulating guest instructions on a host computer through dynamic recompilation of host instructions,,);通過全文引用將每個上述專利合併在此。這些參考文獻說明了針對本領域技術人員可用的目標機器、實現為不同機器而架構的指令格式的仿真的各種已知方式,以及上述這些參考文獻所使用的商用軟體技術。需要的是與現有架構一致的新指令功能性,其減輕對諸如通用寄存器的架構資源的依賴,增強採用新指令的軟體版本的功能性和性能。

發明內容
在實施例中,執行算術/邏輯指令,其中所述指令包括互鎖存儲器操作數,所述算術/邏輯指令包括操作碼(opcode、Opcode、op code,Op Code)欄位、指定第一寄存器中的第一操作數的第一寄存器欄位、指定第二寄存器的第二寄存器欄位、以及指定第三寄存器的第三寄存器欄位,所述第二寄存器指定第二操作數在存儲器中的位置,所述算術/邏輯指令的執行包括由處理器從由第二寄存器指定的存儲器中的位置獲得第二操作數,所述第二操作數由值組成;從第三寄存器獲得第三操作數;基於所獲得的第二操作數和所獲得的第三操作數執行操作碼定義的算術運算或邏輯運算以產生結果;將所產生的結果存儲在存儲器的所述位置中;並且將所獲得的第二操作數的值保存在第一寄存器中,其中所述值未被執行所述指令改變。在實施例中,保存條件碼,所述條件碼指示所述結果為零或者所述結果為非零。在實施例中,所述操作碼定義的算術運算是算術或邏輯ADD(加),所述操作碼定義的邏輯運算是AND(與)、E)(CLUSIVE-0R(異或)或者OR(或)中的任一個,並且所述執行包括響應於邏輯運算的結果為負,保存指示所述結果為負的條件碼;響應於邏輯運算的結果為正,保存指示所述結果為正的條件碼;並且響應於邏輯運算的結果為溢出 (overflow),保存指示所述結果為溢出的條件碼。在實施例中,操作數尺寸由操作碼指定,其中一個或多個第一操作碼指定32位操作數,並且一個或多個第二操作碼指定64位操作數。在實施例中,算術/邏輯指令還包括由兩個單獨的操作碼欄位組成的操作碼、第一位移(displacement)欄位和第二位移欄位,其中通過將第二寄存器的內容加到帶符號位移值上來確定存儲器中的所述位置,所述帶符號位移值包括連結(concatenate)到第二位移欄位的第一位移欄位的符號擴展值。在實施例中,所述執行還包括響應於所述操作碼是第一操作碼並且所述第二操作數不在32位邊界上,生成規範異常(specification exception);並且響應於所述操作碼是第二操作碼並且所述第二操作數不在64位邊界上,生成規範異常。在實施例中,所述處理器是多處理器系統中的處理器,並且所述執行還包括所述獲得第二操作數包括防止多處理器系統的其它處理器在所述獲得第二操作數與將結果存儲在存儲器中的第二位置處之間訪問存儲器中的所述位置;並且在所述存儲所產生的結果時,允許多處理器系統的其它處理器訪問存儲器中的所述位置。在下面所寫的說明中,實施例的上述以及另外的目的、特徵和優點將變得顯而易見。其它實施例和方面在這裡詳細描述並被認作所要求權利的發明的一部分。為了更好地理解優勢和特徵,參考以下描述和附圖。


在說明書的結論處的權利要求中具體提出並清楚主張認為是本發明的主題。前述和其它目的、特徵和優勢依據下面結合附圖的詳細描述而顯然,其中圖IA是描繪示例主機計算機系統的圖;圖IB是描繪示例仿真主機計算機系統的圖;圖IC是描繪示例計算機系統的圖;圖2是描繪示例計算機系統的圖;圖3是描繪計算機系統的元件的圖;圖4A-4C描繪計算機系統的詳細元件;圖5A-5F描繪計算機系統的機器指令格式;圖6A-6B描繪實施例的示例流;以及圖7描繪示例上下文切換流。
具體實施例方式可以通過軟體(有時指許可的內部代碼、固件、微代碼、毫代碼(Milli-code)、微微代碼(Pico-code)等,它們中的任何一個將與實施例一致)來實踐實施例。參考圖1A,典型地,由系統迎的處理器(還稱為CPU (中央處理單元))1從諸如⑶-ROM驅動器、磁帶驅動器或硬碟驅動器的長期存儲介質11訪問軟體程序代碼。可以在用於數據處理系統的多種已知介質(諸如,磁碟、硬碟驅動器、或⑶-ROM)的任何一種上包含軟體程序代碼。代碼可以分布在這樣的介質上,或者可以從一個計算機系統的計算機存儲器2或存儲器通過到其它計算機系統的網絡10而分布至用戶,用以由這種其它系統的用戶使用。可替代地,程序代碼可以包含在存儲器2中,並且被處理器1使用處理器總線訪問。這樣的程序代碼包括控制各種計算機組件和一個或多個應用程式的功能和交互的作業系統。通常將程序代碼從密集存儲介質11調頁面(page)至高速存儲器2,在存儲器2中, 程序代碼可用於處理器1的處理。用於將軟體程序代碼包含在存儲器中、物理介質上以及/ 或者經由網絡分布軟體代碼的技術和方法是已知的,這裡將不再討論。當在有形介質(包括但不限於電子存儲器模塊(RAM)、快閃記憶體、緊湊盤(00)、0¥0、磁帶等)上創建並存儲程序代碼時,程序代碼通常被稱為「電腦程式產品」。電腦程式產品介質典型地可由優選地在計算機系統中的處理電路讀取,用以通過該處理電路執行。圖IC圖示了典型的工作站或伺服器硬體系統。圖IC的系統100包括典型的計算機系統101,諸如個人計算機、工作站或伺服器,包括可選的外圍設備。工作站101包括一個或多個處理器106和總線,所述總線被用於根據已知技術將處理器106與系統101的其它組件連接,並使處理器106與系統101的其它組件之間能夠通信。總線將處理器106連接至存儲器105和長期存儲器107,所述長期存儲器107例如可包括硬碟驅動器(例如,包括磁介質、⑶、DVD和快閃記憶體中的任何一個)或磁帶驅動器。系統101還可以包括用戶接口適配器,其經由總線將微處理器106連接至一個或多個接口設備,諸如鍵盤104、滑鼠103、印表機/掃描儀110和/或其它接口設備,其可以是任何用戶接口設備,諸如觸摸感應屏、數位化輸入板等。總線還將顯示設備102(諸如LCD屏或監視器)經由顯示器適配器連接至微處理器106。系統101可以通過能夠與網絡109通信108的網絡適配器與其它計算機或計算機網絡通信。示例網絡適配器是通信信道、令牌環、乙太網或數據機。可替代地,工作站 101可以使用諸如⑶PD(蜂窩數字分組數據)卡的無線接口通信。工作站101可以與區域網(LAN)或廣域網(WAN)中的其它這樣的計算機相關聯,或者工作站101可以是具有另一計算機的客戶端/伺服器布置中的客戶端等。所有這些配置以及適當的通信硬體和軟體在本領域中是已知的。圖2圖示了其中可以實踐實施例的數據處理網絡200。數據處理網絡200可以包括多個單獨網絡,諸如無線網絡和有線網絡,它們中的每一個可以包括多個單獨的工作站 101、201、202、203、204。此外,如本領域技術人員將理解的,可以包括一個或多個LAN,其中, LAN可以包括耦接至主機處理器的多個智能工作站。仍然參考圖2,網絡還可以包括大型機計算機或伺服器,諸如網關計算機(客戶端伺服器206)或應用伺服器(遠程伺服器208,其可以訪問數據存儲庫(i^pository)並且還可以從工作站205直接訪問該遠程伺服器208)。網關計算機206充當進入各個網絡207 的點。當將一個網絡協議連接至另一個網絡協議時,需要網關。優選地,網關206可以通過通信鏈路耦接至另一網絡(例如,網際網路207)。網關206還可以使用通信鏈路直接耦接至一個或多個工作站101、201、202、203、204。可以利用可以從IBM公司得到的IBMekrver 、 zSeries 、z9 伺服器實施網關計算機。典型地,由系統101的處理器106從長期存儲介質107 (諸如⑶-ROM驅動器或硬碟驅動器)訪問軟體程序代碼。軟體程序代碼可以包含在各種用於數據處理系統的已知介質的任何一種上,諸如磁碟、硬碟驅動器或⑶-ROM。所述代碼可以分布在這樣的介質上,或者可以從一個計算機系統的存儲器或儲存器通過至其它計算機系統的網絡而分布至用戶 210、211,用以由這樣的其它系統的用戶使用。可替代地,程序代碼111可以包含在存儲器105中,並且由處理器106使用處理器總線訪問。這樣的程序代碼包括作業系統,其控制各種計算機組件以及一個或多個應用程式112的功能和交互。通常將程序代碼從密集存儲介質107調頁面至高速存儲器105,在存儲器105中,程序代碼可用於處理器106的處理。用於將軟體程序代碼包含在存儲器中、物理介質上以及/或者經由網絡分布軟體代碼的技術和方法是公知的,這裡將不再討論。當在有形介質(包括但不限於電子存儲器模塊(RAM)、快閃記憶體、緊湊盤(00)、0¥0、磁帶等)上創建並存儲程序代碼時,程序代碼通常被稱為「電腦程式產品」。電腦程式產品介質典型地可由優選地在計算機系統中的處理電路讀取,用以通過該處理電路執行。最易用於處理器的高速緩存(通常比處理器的其它高速緩存更快且更小)是最低(Li或等級一)高速緩存,且主儲存器(主存儲器)是最高級高速緩存(在存在3個等級的情況下為U)。最低級高速緩存通常被劃分為保持要被執行的機器指令的指令高速緩存 (I-高速緩存)和保持數據操作數的數據高速緩存(D-高速緩存)。參考圖3,描繪用於處理器106的示例性處理器實施例。典型地,採用一個或多個等級的高速緩存303來緩衝存儲器塊,以便增強處理器性能。高速緩存303是保持很可能被使用的存儲器數據的高速緩存行(line)的高速緩衝器。典型的高速緩存行是64、1 或 256位元組的存儲器數據。通常採用獨立的高速緩存用於高速緩存指令,而非用於高速緩存數據。通常通過本領域公知的各種「窺探(Snoop) 」算法提供高速緩存一致性(存儲器和高速緩存中的行的複製的同步)。處理器系統的主存儲器105通常稱為高速緩存。在具有4個等級的高速緩存303的處理器系統中,主存儲器105有時稱為等級5 (L5)高速緩存,因為其典型地更快且僅保持可用於計算機系統的非易失性存儲器(DASD、磁帶等)的一部分。主存儲器105通過作業系統「高速緩存」主存儲器105的頁面調入和頁面調出的數據的頁面。程序計數器(指令計數器)311跟蹤要被執行的當前指令的地址。z/Architecture 處理器中的程序計數器是64位並且可以被截短為31或M位,以支持現有的尋址限制。程序計數器典型地包含在計算機的PSW(程序狀態字)中,使得其在上下文切換期間持續。因此,具有程序計數器值的、進行中的程序可以被例如作業系統(從程序環境到作業系統環境的上下文切換)中斷。程序的PSW在程序未激活時維持程序計數器值,並且在作業系統正在執行時使用作業系統的(PSW中的)程序計數器。典型地,程序計數器被遞增與當前指令的字節數目相等的量。RISC(精簡指令集計算)指令典型地為固定長度,而CISC(複雜指令集計算)指令典型地為可變長度。IBMz/Architecture的指令是具有2、4或6位元組長度的CISC指令。例如,通過上下文切換操作或者分支指令的分支採取操作來修改程序計數器 311。在上下文切換操作中,當前程序計數器值與關於正被執行的程序的其它狀態信息(諸如條件碼)一起保存在程序狀態字(PSW)中,並且加載指向要被執行的新程序模塊的指令的新程序計數器值。執行分支採取操作,以便通過將分支指令的結果加載到程序計數器311 中來允許程序進行判決或在程序內循環(ΙοορΟ)。典型地,採用指令取出單元305代表處理器106取出指令。取出單元取出「下個順序(sequential)指令」、分支採取指令的目標指令、或跟隨在上下文切換之後的程序的第一指令。現代的指令取出單元通常採用預取出技術,以基於可能使用預取出的指令的可能性推測性地(speculatively)預取出指令。例如,取出單元可以取出16位元組的指令,其包括下個順序指令和其它順序指令的附加字節。隨後由處理器106執行所取出的指令。在實施例中,將所取出的指令傳遞至取出單元的調度單元306。調度單元解碼所述指令並將關於所解碼的指令的信息轉發至合適的單元307、308、310。執行單元307將典型地從指令取出單元305接收關於所解碼的算術指令的信息,並且將根據指令的操作碼執行對操作數的算術運算。優選地,從存儲器105、架構的寄存器309或者從正被執行的指令的立即(immediate)欄位,將操作數提供給執行單元307。當存儲執行的結果時,將執行的結果存儲在存儲器105、寄存器309中或其它機器硬體(諸如控制寄存器、PSW寄存器等)中。處理器106典型地具有一個或多個執行單元307、308、310,用於執行指令的功能。 參考圖4A,執行單元307可以通過接口邏輯407與架構的通用寄存器309、解碼/調度單元306、加載存儲單元310和其它401處理器單元通信。執行單元307可以採用幾個寄存器電路403、404、405來保持將被算術邏輯單元(ALU) 402操作的信息。ALU執行算術運算(諸如,加、減、乘和除)以及邏輯功能(諸如,與、異或(xor)、循環和移位)。優選地,ALU支持與設計有關的專門操作。其它電路可以提供其它架構的設施408,包括例如條件碼和恢復支持邏輯。典型地,ALU操作的結果保持在輸出寄存器電路406中,輸出寄存器電路406可以將該結果轉發至各種其它處理功能。存在許多處理器單元布置,當前描述僅意在提供對一個實施例的代表性理解。例如,ADD指令將在具有算術和邏輯功能性的執行單元307中執行,而例如浮點指令將在具有專門的浮點能力的浮點執行中執行。優選地,執行單元通過對由指令識別的操作數執行操作碼定義的功能,而對所述操作數進行操作。例如,可以由執行單元307對在由指令的寄存器欄位識別的兩個寄存器309中發現的操作數執行ADD指令。執行單元307對兩個操作數執行算術加法,並且將結果存儲在第三操作數中,其中第三操作數可以是第三寄存器或者兩個源寄存器之一。執行單元優選地使用算術邏輯單元(ALU) 402,其能夠執行各種邏輯功能(諸如,移位、循環、與、或、異或)以及各種數學功能,包括加、減、乘、除中的任何一個。某些ALU402被設計用於標量操作,而某些ALU402 被設計用於浮點。根據架構,數據可以是大端(Big EndianM其中,最低有效字節在最高字節地址處)或小端(Little Endian)(其中,最低有效字節在最低字節地址處)。IBM ζ/ Architecture是大端。根據架構,帶符號的欄位可以是符號和量值、1的補或2的補。2的補數的優勢在於ALU不需要設計減法能力,因為2的補中的負值或正值僅需要ALU內的與加法。通常用簡略的方法描述數,其中12位的欄位定義4096位元組的塊的地址,其通常被描述為例如4Kbyte (千字節)塊。參考圖4B,典型地將用於執行分支指令的分支指令信息發送至分支單元308,分支單元308通常採用諸如分支歷史表432的分支預測算法來在其它條件操作完成之前預測分支結果。將在條件操作完成之前取出並推測性地執行當前分支指令的目標。當條件操作完成時,基於條件操作的條件和所推測的結果,完成或丟棄推測性地執行的分支指令。典型的分支指令可以測試條件碼,並且如果條件碼滿足分支指令的分支要求,則分支到目標地址,例如,可以基於包括在指令的寄存器欄位或立即欄位中發現的數的幾個數,計算目標地址。分支單元308可以採用具有多個輸入寄存器電路427、428、429以及輸出寄存器電路 430的ALU426。例如,分支單元308可以與通用寄存器309、解碼調度單元306或其它電路 425通信。可以由於各種原因(例如包括由作業系統啟動的上下文切換、導致上下文切換的程序異常或錯誤、導致上下文切換的I/O中斷信號、或多個程序的多線程行為(在多線程環境中))中斷一組指令的執行。優選地,上下文切換動作保存關於當前執行的程序的狀態信息並隨後加載關於被調用的另一程序的狀態信息。例如,可以將狀態信息保存在硬體寄存器中或存儲器中。狀態信息優選地包括指向下個要被執行的指令的程序計數器值、條件碼、 存儲器轉換信息和架構的寄存器內容。上下文切換行為可以由硬體電路、應用程式、作業系統程序或固件代碼(微代碼、微微代碼或許可的內部代碼(LIC))單獨或組合地實現。處理器根據指令定義的方法訪問操作數。所述指令可以使用指令的一部分的值提供立即操作數,可以提供顯性地指向通用寄存器或專用寄存器(例如浮點寄存器)的一個或多個寄存器欄位。所述指令可以利用由操作碼欄位識別的隱含的寄存器作為操作數。所述指令可以利用存儲器位置用於操作數。操作數的存儲器位置可以由寄存器、立即欄位或者寄存器和立即欄位的組合而提供,如z/Architecture長位移設施所例示的,其中所述指令定義基址寄存器、索引寄存器和立即欄位(位移欄位),它們被加在一起例如提供存儲器中的操作數的地址。這裡,位置典型地隱含為主存儲器(主儲存器)中的位置,除非另外表示。參考圖4C,處理器使用加載/存儲單元310訪問存儲器。加載/存儲單元310可以通過獲得目標操作數在存儲器303中的地址並將該操作數加載在寄存器309或另一存儲器303位置中來執行加載操作,或者可以通過獲得目標操作數在存儲器303中的地址並將從寄存器309或另一存儲器303位置獲得的數據存儲在存儲器303中的目標操作數位置中來執行存儲操作。加載/存儲單元310可以是推測性的,並且可以以相對於指令順序無序地(out-of-order)訪問存儲器,然而,加載/存儲單元310必須向程序維持指令被按順序執行的表象。加載/存儲單元310可以與通用寄存器309、解碼/調度單元306、高速緩存 /存儲器接口 303或其它元件455通信,並且包括各種寄存器電路、ALU458和控制邏輯463 以計算存儲地址並提供流水線排序(pipeline sequencing)以保持操作有次序。某些操作可能無序,但是加載/存儲單元提供使無序的操作對程序表現為已經被按次序執行的功能性,如本領域內所公知的。優選地,應用程式「看見」的地址通常稱為虛擬地址。虛擬地址有時稱為「邏輯地址」和「有效地址」。這些虛擬地址是虛擬的原因在於它們通過各種動態地址轉換(DAT) 312 技術之一而被重新定向至物理存儲器位置,所述動態地址轉換(DAT) 312技術包括但不限於簡單地用偏移值對虛擬地址加前綴(prefixing)、經由一個或多個轉換錶轉換虛擬地址, 所述轉換表優選地至少單獨地或組合地包括段表和頁表,優選地,段表具有指向頁表的條目(entry)。在z/Architecture中,提供轉換的層級結構,其包括區域第一表、區域第二表、 區域第三表、段表和可選頁表。通常通過利用包括將虛擬地址映射到關聯的物理存儲器位置的條目的轉換後備緩衝器(TLB),來增強地址轉換的性能。當DAT 312使用轉換錶轉換虛擬地址時,創建所述條目。於是,隨後對虛擬地址的使用可以利用快速TLB的條目,而非緩慢的順序轉換表訪問。TLB內容可以由包括LRU(最久未使用)的各種替換算法來管理。在處理器是多處理器系統的處理器的情況下,每個處理器具有為了一致性而保持諸如I/O、高速緩存、TLB和存儲器的共享資源互鎖的責任。典型地,將在維持高速緩存一致性時利用「窺探」技術。在窺探環境中,每個高速緩存行(line)可以被標記為處於共享狀態、排他狀態、改變狀態、無效狀態等的任何一個中,以便促進共享。I/O單元304向處理器提供用於附接至外圍設備(例如包括磁帶、磁碟、印表機、 顯示器和網絡)的手段。通常通過軟體驅動器將I/O單元呈現給電腦程式。在諸如來自 IBM的z/kries的大型機中,信道適配器和開放系統適配器是大型機的I/O單元,其提供作業系統與外圍設備之間的通信。下面依據z/Architecture操作原理的說明描述計算機系統的架構視圖存儲器計算機系統包括主存儲器中的信息,以及尋址、保護以及引用和改變記錄。尋址的一些方面包括地址的格式、地址空間的概念、地址的各種類型、以及一種類型的地址轉換為另一種類型的地址的方式。一些主存儲器包括永久分配的存儲位置。主存儲器向系統提供對數據的直接可尋址的快速訪問存儲。數據和程序兩者都必須在它們可以被處理之前(從輸入設備)加載到主存儲器中。主存儲器可以包括一個或多個更小的、更快訪問的緩衝存儲器,有時稱為高速緩存。典型地,高速緩存在物理上與CPU或I/O處理器關聯。物理構造的效果(除了對性能的效果)以及不同存儲介質的使用通常不可被程序觀察到。可以為指令和數據操作數維持獨立的高速緩存。在被稱作高速緩存塊或高速緩存行(或者簡稱「行」)的完整邊界上以連續字節維持高速緩存內的信息。模型可以提供 EXTRACT CACHE ATTRIBUTE(提取高速緩存屬性)指令,其以字節為單位返回高速緩存行的大小。模型還可以提供PREFETCH DATA (預取出數據)和PREFETCH DATARELATIVE LONG (預取出數據相對長)指令,其導致存儲器到數據或指令高速緩存中的預取出,或者數據從高速緩存的釋放。存儲器被看作長的水平位串。對於大部分操作,對存儲器的訪問以左至右的順序進行。位串被細分為8比特單位。8比特單位被稱為字節,其是所有信息格式的基本構建塊。存儲器中的每個字節位置由唯一的非負整數標識,該非負整數是該字節位置的地址,或者簡單地是字節地址。相鄰的字節位置具有連續地址,其在左側以0開始並以左至右的順序繼續。地址是無符號二進位整數並且是對、31或64位。一次一個字節或一組字節地在存儲器與CPU或信道子系統之間傳送信息。除非另外指明,存儲器中的一組字節由該組的最左側字節尋址。該組中的字節數目由要執行的操作隱含或顯性地指定。當在CPU操作中使用時,一組字節稱為欄位。在每組字節內,以從左至右的順序對位編號。最左側位有時稱為「高階」位,而最右側位稱為「低階」位。然而,位編號不是存儲器地址。僅可以尋址字節。為了對存儲器中的字節的各個單獨位操作,必須訪問整個字節。字節中的位從左到右被編號為0至7。地址中的位對於M位地址可以被編號為8-31或40-63 ;或者對於31位地址可以被編號為1_31或33-63 ;對於64位地址它們被編號為0-63。在任何其它固定長度格式的多字節內,構成格式的位被從0開始連續編號。為了錯誤檢測的目的,並且優選地為了校正,可以利用各個字節或一組字節傳送一個或多個校驗位。這樣的校驗位由機器自動生成並且不能被程序直接控制。以字節的數目表示存儲器容量。當存儲器-操作數欄位的長度被指令的操作碼隱含時,該欄位被認為具有固定長度,其可以是一個、兩個、四個、八個或十六個字節。對於某些指令,可以隱含更大的欄位。當未隱含存儲器-操作數欄位的長度而是顯性地表述其時,該欄位被認為具有可變長度。可變長度操作數可以通過一字節的遞增而改變長度。當將信息放置在存儲器中時,儘管到存儲器的物理路徑的寬度可以大於被存儲的欄位的長度,也僅替換包括在所指派的欄位中的那些字節位置的內容。某些信息單位必須在存儲器中的完整邊界上。邊界被稱為針對單位信息完整是當其存儲地址是以字節為單位的單位長度的倍數時。將特殊名稱賦予完整邊界上的2、4、 8和16位元組的欄位。半字是兩字節邊界上的兩個連續字節的組,且是指令的基本構建塊。 字是四字節邊界上的四個連續字節的組。雙字是八字節邊界上的八個連續字節的組。四字 (quadword)是16位元組邊界上的16個連續字節的組。當存儲地址指派半字、字、雙字和四字時,地址的二進位表示分別包括一個、兩個、三個或四個最右側0位。指令必須在兩字節的完整邊界上。大部分指令的存儲器操作數不具有邊界對齊要求。在為指令和數據操作數實施單獨的高速緩存的模型上,如果程序存儲到隨後從其取出指令的高速緩存行中,則不管該存儲是否改變隨後取出的指令,都可能經歷顯著的延遲。指令典型地,CPU的操作由存儲器中的指令控制,按存儲器地址的升序從左至右一次一個地順序執行所述指令。可以通過分支、LOAD PSW、中斷、SIGNAL PROCESSOR(向處理器發信號)命令或手動幹預來導致順序操作的改變。優選地,指令包括兩個主要部分 操作碼(Op Code),其指定要執行的操作。 可選地,參與的操作數的指派(designation)。圖5A-5F中示出了 z/Architecture的指令格式。指令可以簡單地提供操作碼501、 或者操作碼和各種欄位,包括立即操作數或寄存器指定符(specifier),用於將操作數定位在寄存器或存儲器中。操作碼可以向硬體指示要使用隱含的資源(操作數等),諸如一個或多個特定的通用寄存器(GPR)。操作數可以被分組為三個類別位於寄存器中的操作數、立即操作數、以及存儲器中的操作數。操作數可以被顯性地或隱性地指派。寄存器操作數可以位於通用、浮點、訪問或控制寄存器中,其中寄存器的類型由操作碼識別。通過在指令中的四位欄位(稱為R欄位)中標識寄存器來指定包含操作數的寄存器。對於某些指令,操作數位於隱性指派的寄存器中,該寄存器被操作碼隱含。立即操作數包含在指令內,並且包含立即操作數的8位、16位或32位欄位稱為I欄位。存儲器中的操作數可以具有隱含的長度;由位掩碼指定;由指令中的四位或八位長度規範(稱為L欄位)來指定;或者具有由通用寄存器的內容指定的長度。存儲器中的操作數的地址通過使用通用寄存器的內容作為地址的一部分的格式來指定。這使得可以1.通過使用縮寫符號指定完整地址2.使用採用用於操作數的通用寄存器的指令執行地址操縱3.在不改變指令流的情況下通過程序手段修改地址4.通過直接使用從其它程序接收的地址,獨立於數據區域的位置而操作用於引用存儲器的地址包含在由指令中R欄位指派的寄存器中,或者從分別由指令中的B、X和D欄位指定的基址、索引和位移計算。當CPU在訪問-寄存器模式中時,B或 R欄位除了被用於指定地址之外,還可以指派訪問寄存器。為了描述指令的執行,優選地將操作數指派為第一和第二操作數,並且在某些情況下,為第三和第四操作數。一般而言,兩個操作數參與指令執行,並且結果取代第一操作數。指令在長度上是一個、兩個或三個半字,並且必須位於半字邊界上的存儲器中。參考描繪指令格式的圖5A-5F,每個指令是25個基本格式之一E501、I 502,RI 503 504,RIE 505 551 552 553 554、RIL 506 507、RIS 555、RR 510、RRE 511、RRF 512 513 514、RRS、 RS 516 517、RSI 520、RSL 521、RSY 522 523、RX 524、RXE 525、RXF 526、RXY 527、S 530、 SI 531、SIL556、SIY 532、SS 533 534 535 536 537、SSE 541 和 SSF 542,具有 RRF 的三個變型、RI、RIL、RS和RSY的兩個變型、RIE和SS的五個變型。格式名稱在通用術語中指示參與操作的操作數的類別和關於欄位的一些細節
· RIS表示寄存器-和-立即操作以及存儲器操作。· RRS表示寄存器-和-寄存器操作以及存儲器操作。· SIL表示存儲器-和-立即操作,具有16位立即欄位。在I、RR、RS、RSI、RX、SI和SS格式中,指令的第一個字節包含操作碼。在E、RRE、 RRF、S、SIL和SSE格式中,指令的前兩個字節包含操作碼,但以下除外對於S格式中的一些指令,操作碼僅在第一個字節中。在RI和RIL格式中,操作碼在指令的第一個字節和比特位置12-15中。在RIE、RIS、RRS、RSL、RSY、RXE、RXF、RXY和SIY格式中,操作碼在指令的第一個字節和第六個字節中。操作碼的第一個字節或唯一的字節的前兩位指定指令的長度和格式,如下在RR、RRE、RRF、RRR、RX、RXE、RXF、RXY、RS、RSY、RSI、RI、RIE 和 RIL 格式中,由 Rl
欄位指派的寄存器的內容稱為第一操作數。包含第一操作數的寄存器有時稱為「第一操作數位置」,有時稱為「寄存器Rl」。在RR、RRE、RRF和RRR格式中,R2欄位指派包含第二操作數的寄存器,並且R2欄位可以指派與Rl相同的寄存器。在RRF、RXF、RS、RSY、RSI和RIE 格式中,R3欄位的使用依賴於指令。在RS和RSY格式中,R3欄位可以替代地為指定掩碼的 M3欄位。R欄位在通用指令中指派通用或訪問寄存器,在控制指令中指派通用寄存器,並且在浮點指令中指派浮點寄存器或通用寄存器。對於通用和控制寄存器,依賴於指令,寄存器操作數在64位寄存器的比特位置32-63中,或者佔用整個寄存器。在I格式中,指令的八位立即數據欄位(I欄位)的內容被直接用作操作數。在 SI格式中,指令的八位立即數據欄位(12欄位)的內容被直接用作第二操作數。Bl和Dl 欄位指定第一操作數,其長度為一個字節。在SIY格式中,除了使用DHl和DLl欄位代替 Dl欄位之外,操作相同。在用於指令ADD HALFffORD IMMEDIATE(加半字立即)、COMPARE HALFffORD IMMEDIATE(比較半字立即)、LOAD HALFffORD IMMEDIATE(加載半字立即)和 MULTIPLYHALFffORD IMMEDIATE (乘半字立即)的RI格式中,指令的16位12欄位的內容被直接用作帶符號的二進位整數,並且Rl欄位指定第一操作數,依賴於指令,其長度為32或64 位。對於指令 TEST UNDER MASK (TMHH, TMHL, TMLH, TMLL)(掩碼下測試(TMHH,TMHL, TMLH, TMLL)),12欄位的內容被用作掩碼,並且Rl欄位指定第一操作數,其長度為64位。對於指令INSERT IMMEDIATE (插入立即)、AND IMMEDIATE (與立艮口)、OR IMMEDIATE (或立即)和LOAD LOGICAL IMMEDIATE (加載邏輯立即),12欄位的內容被用作無符號二進位整數或邏輯值,並且Rl欄位指定第一操作數,其長度為64位。對於RI和RSI 格式中的相對分支指令,16位12欄位的內容被用作指派半字的數目的帶符號二進位整數。 當該數目被加到分支指令的地址上時,其指定分支地址。對於RIL格式中的相對分支指令, 12欄位是32位並且被以相同方式使用。對於RI和RSI格式中的相對分支指令,16位12欄位的內容被用作指派半字的數目的帶符號二進位整數。當該數目被加到分支指令的地址時,其指定分支地址。對於RIL格式中的相對分支指令,12欄位是32位並且被以相同方式使用。對於RIE格式指令COMPARE IMMEDIATE AND BRANCH RELATIVE (比較立即和分支相對)和 COMPARE LOGICAL IMMEDIATE AND BRANCH RELATIVE(比較邏輯立即和分支相對),8位12欄位的內容被直接用作第二操作數。對於RIE格式指令COMPARE IMMEDIATE AND BRANCH(比較立即和分支)、COMPARE IMMEDIATE AND TRAP (比較立即和捕獲)、COMPARE LOGICAL IMMEDIATE AND BRANCH (比較邏輯立即和分支)和COMPARE LOGICAL IMMEDIATE AND TRAP (比較邏輯立即和捕獲), 16位12欄位的內容被直接用作第二操作數。對於RIE格式指令COMPARE AND BRANCH RELATIVE (比較和分支相對)、COMPARE IMMEDIATE AND BRANCH RELATIVE (比較立即和分支相對)、COMPARE LOGICAL AND BRANCH RELATIVE (比較邏輯和分支相對)和 COMPARE LOGICAL IMMEDIATE AND BRANCH RELATIVE (比較邏輯立即和分支相對),16位14欄位的內容被用作指派被加到指令的地址上形成分支地址的半字的數目的帶符號二進位整數。對於RIL 格式指令 ADD IMMEDIATE (力口立艮口)、ADD LOGICAL IMMEDIATE (加邏輯立即)、ADD LOGICAL WITH SIGNED IMMEDIATE (帶有符號的立即的加邏輯)、 COMPARE IMMEDIATE(比較立即)、COMPARE LOGICAL IMMEDIATE(比較邏輯立即)、LOAD IMMEDIATE (加載立即)和MULTIPLY SINGLE IMMEDIATE (乘單個立即),32位12欄位的內容被直接用作第二操作數。對於RIS格式指令,8位12欄位的內容被直接用作第二操作數。在SIL格式中,16 位12欄位的內容被直接用作第二操作數。Bl和Dl欄位指定第一操作數,如下文所述。在RSL、Si、SIL、SSE和大部分SS格式中,由Bl欄位指派的通用寄存器的內容被加到Dl欄位的內容上,以形成第一操作數地址。在RS、RSY、S、SIY、SS和SSE格式中,由B2 欄位指派的通用寄存器的內容被加到D2欄位或DH2和DL2欄位的內容上,以形成第二操作數地址。在RX、RXE、RXF和RXY格式中,由X2和B2欄位指派的通用寄存器的內容被加到 D2欄位或DH2和DL2欄位的內容上,以形成第二操作數地址。在RIS和RRS格式中,並在一個SS格式中,由B4欄位指派的通用寄存器的內容被加到D4欄位的內容上,以形成第四操作數地址。在具有單個八位長度欄位的SS格式中,對於指令AND(與)(NC) ,EXCLUSIVE OR(異或)(XC)、MOVE(移動)(MVC)、MOVE NUMERICS(移動數值)、MOVE ZONES(移動區域)和 OR(或)(0C),L指定附加至由第一操作數地址指派的字節的右側的操作數字節的數目。因此,第一操作數的字節長度是1-256,對應於L中的長度碼為0-255。存儲結果取代第一操作數並從不存儲在由地址和長度指定的欄位之外。在此格式中,第二操作數具有與第一操作數相同的長度。存在先前定義應用於EDIT(編輯)、EDIT AND MARK(編輯和標註)、PACK ASCII (封裝 ASCII)、PACK UNICODE (封裝 UNICODE)、TRANSLATE (轉換)、TRANSLATE AND TEST (轉換和測試)、UNPACK ASCII (解封裝 ASCII)和 UNPACK UNICODE (解封裝 UNICODE) 的變型。在具有兩個長度欄位的SS格式中,並且在RSL格式中,Ll指定附加至由第一操作數地址指派的字節的右側的操作數字節的數目。因此,第一操作數的字節長度是1-16,對應於Ll中的長度碼為0-15。類似地,L2指定附加至由第二操作數地址指派的位置的右側的操作數字節的數目。結果取代第一操作數並從不存儲在由地址和長度指定的欄位之外。如果第一操作數比第二操作數長,則第二操作數在左側用0擴展至第一操作數的長度。此擴展不修改存儲器中的第二操作數。在具有兩個R欄位的SS格式中,如由MOVE TO PRIMARY(移動到初級)、MOVE TO SECONDARY (移動到次級)和MOVE WITH KEY (帶鍵移動)指令所使用的,由Rl欄位指定的通用寄存器的內容是32位無符號值,稱為實長。所述操作數兩者均具有稱為有效長度的長度。有效長度等於實長或256中的較小者。指令設置條件碼來幫助對循環編程,以移動由實長指定的總字節數目。具有兩個R欄位的SS格式還用於指定用於LOAD MULTIPLE DISJOINT(加載多重解體)指令的寄存器和兩個存儲器操作數的範圍,以及指定用於PERFORM LOCKED OPERATION(執行鎖定的操作)指令的一個或兩個寄存器和一個或兩個存儲器操作數。B1、B2、X2或B4欄位中的任何一個中的0指示缺少對應的地址成分。對於缺少的成分,使用0告知中間和,而不管通用寄存器0的內容。0的位移沒有特殊意義。當前PSW的位31和32是尋址模式位。位31是擴展的尋址模式位,位32是基本尋址模式位。這些位控制由地址生成所產生的有效地址的尺寸。噹噹前PSW的位31和32 均為0時,CPU在M位尋址模式中,並且生成M位指令和操作數有效地址。噹噹前PSW的位31是0而位32是1時,CPU在31位尋址模式中,並且生成31位指令和操作數有效地址。 噹噹前PSW的位31和32均是1時,CPU在64位尋址模式中,並且生成64位指令和操作數有效地址。由CPU對指令的執行涉及指令和操作數的地址的生成。當從由當前PSW指派的位置取出指令時,指令地址增加指令中的字節數目,並且執行該指令。隨後通過使用指令地址的新值取出序列中的下個指令而重複相同步驟。在對位尋址模式中,指令地址迴繞(wrap around),其中,指令地址224-2處的半字之後跟著指令地址0處的半字。因此,在M位尋址模式中,作為更新指令地址的結果,從PSW比特位置 104的任何進位輸出丟失。在31位或64位尋址模式中,指令地址類似地迴繞,其中指令地址231-2或264-2處的半字之後分別跟隨指令地址0處的半字。從PSW比特位置97或64的進位輸出分別丟失。引用存儲器的操作數地址從中間值得到,該中間值包含在由指令中的R欄位指派的寄存器中或者從三個二進位數字(基址、索引和位移)的和計算。基址(B)是包含在由指令中的稱為B欄位的四位欄位中的程序指定的通用寄存器中的64位數。可以使用基址作為獨立尋址每個程序和數據區域的手段。在陣列型計算中,其可以指派陣列的位置,並且在記錄型處理中,其可以識別該記錄。基址用於尋址整個存儲器。基址還可以用於索引。索引⑴是包含在由指令中的稱為X欄位的四位欄位中的程序指派的通用寄存器中的64位數。其僅包括在由RX、RXE和RXY格式指令指定的地址中。RX、RXE、RXF和RXY 格式指令允許雙索引;即,該索引可以用於提供陣列內的元素的地址。位移(D)是在指令中的稱為D欄位的欄位中包含的12位或20位數。12位位移是無符號的,並用於在超過由基址指派的位置之外高達4095位元組的相對尋址。20位位移是帶符號的,並且用於在超過基址位置之外高達524287位元組的相對尋址,或者在基址位置之前高達524288位元組的相對尋址。在陣列型計算中,位移可以用於指定與元素關聯的許多項之一。在記錄的處理中,位移可以用於識別記錄內的項。12位位移在某些格式的指令的比特位置20-31中。在某些格式的指令中,第二個12位位移也在該指令中,在比特位置36-47 中。20位位移僅在RSY、RXY或SIY格式的指令中。在這些指令中,D欄位由比特位置 20-31中的DL(低)欄位和比特位置32-39中的DH(高)欄位組成。當長位移設施被安裝時,通過在DL欄位的內容的左側附加DH欄位的內容,而形成位移的數值。當未安裝長位移設施時,通過在DL欄位的內容的左側附加八個0比特而形成位移的數值,並且DH欄位的內容被忽略。在形成中間和時,基址和索引被處理為64位二進位整數。12位位移被處理為12位無符號二進位整數,並且52個0比特被附加在左側。20位位移被處理為20位帶符號二進位整數,並且等於符號位的44個比特被附加在左側。這三個被相加作為64位二進位數, 忽略溢出。和總是64位長,並被用作形成所生成的地址的中間值。中間值的位被編號為 0-63。在B1、B2、X2或B4欄位中的任何一個中的0指示缺少對應的地址成分。對於缺少的成分,在形成中間和時使用0,而不管通用寄存器0的內容。0的位移沒有特殊意義。當指令描述指定由R欄位指派的通用寄存器的內容用於尋址存儲器中的操作數時,寄存器內容用作64位中間值。指令可以指派相同的通用寄存器用於地址計算以及作為操作數的位置。在通過操作改變寄存器(如果存在)之前,完成地址計算。除非在各個單獨的指令定義中另外指示, 所生成的操作數地址指派存儲器中的操作數的最左側字節。所生成的操作數地址總是64位長,並且所述位被編號為0-63。從中間值獲得所生成的地址的方式依賴於當前尋址模式。在M位尋址模式中,忽略中間值的位0-39,所生成的地址的位0-39被強制為0,並且中間值的位40-63成為所生成的地址的位40-63。在31 位尋址模式中,忽略中間值的位0-32,所生成的地址的位0-32被強制為0,並且中間值的位 33-63成為所生成的地址的位33-63。在64位尋址模式中,中間值的位0_63成為所生成的地址的位0-63。負值可以用在索引和基址寄存器中。在31位尋址模式中忽略這些值的位 0-32,並且在M位尋址模式中忽略位0-39。對於分支指令,當採取分支時要執行的下個指令的地址稱為分支地址。依賴於分支指令,指令格式可以是 RR、RRE> RX、RXY、RS、RSY、RSI、RI、RIE 或 RIL。在 RS、RSY、RX 和 RXY格式中,由基址、位移指定分支地址,並且在RX和RXY格式中,由索引指定分支地址。在這些格式中,中間值的生成遵循與操作數地址中間值的生成相同的規則。在RR和RRE格式中,由R2欄位指派的通用寄存器的內容用作中間值,從該中間值形成分支地址。通用寄存器0不能被指派為包含分支地址。R2欄位中的0值使得在不進行分支的情況下執行指令。相對分支指令在RSI、RI、RIE和RIL格式中。在用於相對分支指令的RSI、RI和 RIE格式中,12欄位的內容被處理為指派半字的數目的16位帶符號二進位整數。在RIL格式中,12欄位的內容被處理為指派半字的數目的32位帶符號二進位整數。分支地址是由加到相對分支指令的地址上的12欄位指定的半字的數目。用於RSI、RI、RIE或RIL格式中的相對分支指令的64位中間值是兩個加數的和, 其中忽略從比特位置0的溢出。在RSI、RI或RIE格式中,第一加數是12欄位的內容,其中一個0比特附加在右側,並且與內容的符號位相等的47個比特附加在左側,但以下情況除外 對於 COMPARE AND BRANCH RELATIVE、COMPARE IMMEDIATE AND BRANCH RELATIVE、COMPARE LOGICAL AND BRANCH RELATIVE知COMPARE LOGICAL IMMEDIATE AND BRANCH RELATIVE,第一加數是14欄位的內容,其中如上面針對12欄位所描述地附加比特。在RIL格式中,第一加數是12欄位的內容,其中一個0比特被附加在右側,並且與內容的符號位相等的31個比特附加在左側。在所有格式中,第二加數是分支指令的64位地址。分支指令的地址是在該地址被更新來尋址下個順序指令之前在PSW中的指令地址,或者其是在使用EXE⑶TE (執行)的情況下EXE⑶TE指令的目標的地址。如果在M位或31位尋址模式中使用EXE⑶TE, 則分支指令的地址是目標地址,其中分別將40個或33個0附加在左側。分支地址總是64位長,其中所述位被編號為0-63。分支地址取代當前PSW的位64-127。從中間值獲得分支地址的方式依賴於尋址模式。對於改變尋址模式的這些分支指令,使用新的尋址模式。在對位尋址模式中,忽略中間值的位0-39,使得分支地址的位0-39 為0,並且中間值的位40-63成為分支地址的位40-63。在31位尋址模式中,忽略中間值的位0-32,使得分支地址的位0-32為0,並且中間值的位33-63成為分支地址的位33-63。在 64位尋址模式中,中間值的位0-63成為分支地址的位0-63。對於一些分支指令,分支依賴於滿足指定條件。當不滿足該條件時,不採取分支, 繼續正常的順序指令執行,並且不使用分支地址。當採取分支時,分支地址的位0-63取代當前PSW的位64-127。分支地址不被用於訪問存儲器作為分支操作的一部分。由於奇數 (odd)分支地址而導致的指定異常和由於取出在分支位置的指令而導致的訪問異常不被辨識為分支操作的一部分,而是被辨識為與分支位置處的指令的執行關聯的異常。諸如BRANCH AND SAVE的分支指令可以指派相同的通用寄存器用於分支地址計算和作為操作數的位置。在完成操作的剩餘部分之前完成分支地址計算。在第4章「控制」中描述的程序狀態字(PSW)包含合適的程序執行所需的信息。 PSW用於控制指令排序,以及保持和指示與當前被執行的程序有關的CPU的狀態。活動的或控制的PSW稱為當前PSW。分支指令執行進行判決、循環控制和子例程聯接的功能。分支指令通過將新的指令地址引入當前PSW中來影響指令排序。具有16位12欄位的相對分支指令允許分支到高達相對於分支指令的位置加64K-2個字節或減64K字節的偏移的位置,而不使用基址寄存器。具有32位12欄位的相對分支指令允許分支到高達相對於分支指令的位置加4G-2個字節或減4G字節的偏移的位置,而不使用基址寄存器。通過BRANCH ON CONDITION (條件分支)、BRANCH RELATIVE ON CONDITION (條件分支相對)和BRANCH RELATIVE ON CONDITION LONG (條件分支相對長)指令提供用於進行判決的設施。這些指令檢查反映算術、邏輯和1/0操作的大多數的結果的條件碼。由兩位組成的條件碼提供四個可能的條件碼設置0、1、2和3。任何設置的具體含義依賴於設置條件碼的操作。例如,條件碼反映諸如零、非零、 第一操作數高、相等、溢出和子信道忙的條件。一旦被設置,條件碼保持不改變直到被導致設置不同的條件碼的指令修改為止。可以通過使用BRANCH ON CONDITION、BRANCH RELATIVE ON CONDITION 禾口 BRANCH RELATIVE ON CONDITION LONG來執行循環控制,以測試地址算術和計數操作的結果。對於算術和測試的一些特別頻繁的組合,提供BRANCH ON COUNT (計數分支)、BRANCH ON INDEX HIGH (索引高分支)和BRANCH ON INDEX LOW OR EQUAL (索引低或相對分支),並且還提供這些指令的相對分支相當物。這些專門的分支對這些任務提供提高的性能。通過BRANCH AND LINK和BRANCH AND SAVE指令提供當不需要改變尋址模式時的子例程聯接。(對BRANCH AND SAVE的該討論也適用於BRANCH RELATIVE AND SAVE和 BRANCH RELATIVE AND SAVE LONG。)這兩個指令均不僅允許引入新的指令地址,而且還允許保存返回地址和關聯的信息。返回地址是跟在分支指令之後的指令在存儲器中的地址, 除以下情況外其是跟在具有分支指令作為其目標的EXECUTE指令之後的指令的地址。BRANCH AND LINK和BRANCH AND SAVE兩者具有Rl欄位。它們通過依賴於該指令的欄位形成分支地址。總結指令的操作如下 在M位尋址模式中,兩個指令均將返回地址放置在通用寄存器Rl的
比特位置40-63中,並且保持該寄存器的位0-31不變。BRANCHAND LINK將用於指令的指令長度碼、條件碼以及來自當前PSW的程序掩碼放置在通用寄存器Rl的比特位置
32-39中。BRANCHAND SAVE將0放置在這些比特位置中。 在31位尋址模式中,兩個指令均將返回地址放置在通用寄存器Rl的比特位置
33-63中,並且將1放置在通用寄存器Rl的比特位置32中,並且它們保持該寄存器的位 0-31不變。 在64位尋址模式中,兩個指令均將返回地址放置在通用寄存器Rl的比特位置 0-63 中。 在任何尋址模式中,兩個指令均在當前尋址模式的控制下生成分支地址。所述指令將分支地址的位0-63放置在PSW的比特位置64-127中。在RR格式中,如果指令的R2 欄位為0,則兩個指令均不執行分支。可以看出,在M位或31位尋址模式中,BRANCH AND SAVE將基本尋址模式位(PSW 的位32)放置在通用寄存器Rl的比特位置32中。BRANCH AND LINK在31位尋址模式中這樣做。指令BRANCHAND SAVEAND SET MODE和BRANCH AND SET MODE用於當在聯接期間需要改變尋址模式時使用。這些指令具有Rl和R2欄位。總結指令的操作如下· BRANCH AND SAVE AND SET MODE 設置通用寄存器 Rl 的內容與 BRANCH AND SAVE 相同。此外,所述指令將擴展的尋址模式位(PSW的位31)放置在寄存器的比特位置63中。 如果Rl為非零,則BRANCH AND SET MODE如下執行。在對或31位模式中,其將 PSff的位32放置在通用寄存器Rl的比特位置32中,並且其保持寄存器的位0-31和33-63 不變。注意,如果寄存器包含指令地址,則寄存器的位63應當為0。在64位模式中,所述指令將PSW的位31(1)放置在通用寄存器Rl的比特位置63中,並且其保持寄存器的位0_62 不變。 當R2為非零時,兩個指令均設置尋址模式並如下執行分支。通用寄存器R2的位63被放置在PSW的比特位置31中。如果位63為0,則將寄存器的位32放置在PSW的比特位置32中。如果位63為1,則將PSW的位32設置為1。然後,在新尋址模式的控制之下,除了寄存器的位63被處理為0之外,從寄存器的內容生成分支地址。所述指令將分支地址的位0-63放置在PSW的比特位置64-127中。通用寄存器R2的位63保持不變,從而其可以在進入被調用的程序時為1。如果R2與Rl相同,則所指派的通用寄存器中的結果與為Rl寄存器所指定的一樣。中斷(上下文切換)中斷機構允許CPU由於配置外部、配置內或CPU自身內的條件而改變其狀態。為了允許對高優先級的條件的快速響應以及對條件類型的立即識別,中斷條件被分組為六個類別外部、輸入/輸出、機器校驗、程序、重啟和管理程序調用(supervisor call)。中斷包括存儲當前PSW作為舊PSW、存儲識別中斷的原因的信息、以及取出新PSW。 處理如新PSW所指定地重新開始。中斷時,存儲的舊PSW通常包含在中斷不發生的情況下接下來將被執行的指令的地址,因此允許被中斷的程序重新開始。對於程序和管理程序調用中斷,所存儲的信息還包含識別最後執行的指令的長度的代碼,因此允許程序響應於中斷的原因。在正常響應是重新執行導致中斷的指令的某些程序條件的情況下,指令地址直接識別最後執行的指令。
除重啟之外,僅當CPU在操作狀態中時才可以發生中斷。對於在停止或操作狀態中的CPU,都可以發生重啟中斷。任何訪問異常被識別為該異常所關聯的指令的執行的一部分。訪問異常在CPU嘗試從不可用的位置進行預取出或檢測到某些其它訪問異常條件時不被辨識,而是由分支指令或中斷改變指令順序,使得不執行中斷。每個指令可以由於指令取出而使訪問異常被辨識。此外,與指令執行關聯的訪問異常可由於對存儲器中的操作數的訪問而發生。當在不遭遇異常的情況下無法取出第一個指令半字時,指示由於取出指令而導致的訪問異常。當指令的第一個半字沒有訪問異常時,可以根據由指令的前兩位指定的指令長度,為附加的半字指示訪問異常;然而,當可以在不訪問指令的第二或第三個半字的情況下執行操作時, 不可預測是否為未使用的部分指示訪問異常。因為為指令取出指示訪問異常對於所有指令是共同的,其不涵蓋在各個單獨的指令定義中。除了在各個單獨的指令描述中另外指示外,以下規則適用於與對操作數位置的訪問關聯的異常。對於取出型操作數,僅必須為完成操作所需的操作數部分指示訪問異常。不可預測是否為取出型操作數中那些完成操作所不需要的部分指示訪問異常。對於存儲型操作數,即使可以在不使用操作數的不可訪問部分的情況下完成操作,也為整個操作數辨識訪問異常。在將存儲型操作數的值定義為不可預測的情形中,不可預測是否指示訪問異常。在對操作數位置的訪問可以導致訪問異常被辨識的任何時候,在指令的描述中的程序異常的列表中都包括字「訪問」。此條目還指示哪個操作數可以導致異常被辨識以及是在對該操作數位置的取出訪問還是存儲訪問上辨識出的異常。僅針對各個特定指令所定義的操作數的部分辨識訪問異常。當CPU嘗試執行具有無效的操作碼的指令時,辨識操作異常。該操作碼可以是未分配的,或者具有該操作碼的指令不能被安裝在CPU上。該操作被抑制。指令長度碼為1、 2或3。由十六進位的0001(或者,在指示並發的PER事件的情況下為十六進位的0081)的程序中斷代碼來指示該操作異常。一些模型可以提供此公布中未描述的指令,諸如用於輔助或作為特殊或自定義特徵的一部分而提供的指令。因此,在此公布中未描述的操作碼不一定導致操作異常被辨識。 此外,這些指令可以使操作模式被設立,或者還可以改變機器以便影響後續指令的執行。為了避免導致這樣的操作,應當僅當期望與該操作碼所關聯的特定功能時才執行具有在此公布中未描述的操作碼的指令。當下列中的任何一個為真時,生成規範(specification)異常1. 1被引入PSW的未分配比特位置中(艮P,比特位置0、2-4、24_30或33-63中的任何一個)。這被處理為早先的PSW規範異常。2.1被引入PSW的比特位置12中。這被處理為早先的PSW規範異常。3. PSW在下列任何一種方式中無效a. PSff的位31為1並且位32為0。b. PSff的位31和32為0,指示M位尋址模式,並且PSW的位64-103不全為0。c. PSff的位31為0 並且位32為1,指示31位尋址模式,並且PSW的位64-96不全為0。這被處理為早先的PSW
規範異常。4. PSff包含奇數指令地址。5.操作數地址在需要完整邊界指派的指令中不指派這樣的完整邊界。
6.需要指派偶編號的寄存器的指令的R欄位指定指派奇編號的通用寄存器。7.為擴展的操作數指派除0、1、4、5、8、9、12或13之外的浮點寄存器。8.十進位算術中的乘數或除數超過15位數字和符號。9.在十進位乘法或除法中,第一操作數欄位的長度小於或等於第二操作數欄位的長度。10.嘗試 CIPHER MESSAGE(密碼消息)、CIPHER MESSAGE WITH CHAINING(具有鏈的密碼消息)、COMPUTE INTERMEDIATE MESSAGEDIGEST (計算中間消息摘要)、COMPUTE LAST MESSAGE DIGEST(計算最後的消息摘要)或COMPUTE MESSAGE AUTHENTICATION CODE(計算消息認證碼)的執行,並且通用寄存器0的位57-63中的功能碼包含未分配的或未安裝的功能碼。11.嘗試 CIPHER MESSAGE 或 CIPHER MESSAGE WITH CHAINING 的執行,並且 Rl 或 R2欄位指派奇編號的寄存器或通用寄存器0。12.嘗試 CIPHER MESSAGE、CIPHER MESSAGE WITH CHAINING、COMPUTE INTERMEDIATE MESSAGE DIGEST 或 COMPUTE MESSAGE AUTHENTICATION CODE 的執行,並且第二操作數長度不是所指派的功能的數據塊尺寸的倍數。此規範異常條件不適用於詢問功能。13.嘗試COMPARE AND FORM CODEWORD (比較和形成碼字)的執行,並且通用寄存器1、2和3並非初始地包含偶值。32.嘗試COMPARE AND SWAP AND STORE (比較和交換和存儲)的執行,並且存在下列條件中的任何一個 功能碼指定未分配的值。 存儲特性指定未分配的值。 功能碼為0,並且未在字邊界上指派第一操作數。 功能碼為1,並且未在雙字邊界上指派第一操作數。 未在與存儲值的尺寸一致的完整邊界上指派第二操作數。33.嘗試 COMPARE LOGICAL LONG UNICODE (比較邏輯長 UNICODE)或 MOVE LONG UNICODE(移動長UNICODE)的執行,並且通用寄存器Rl+1或R3+1的內容不指定偶數個字節。34.嘗試 COMPARE LOGICAL STRING(比較邏輯字符串)、MOVE STRING(移動字符串)或SEARCH STRING (搜索字符串)的執行,並且通用寄存器0的位32-55不全為0。35.嘗試COMPRESSION CALL (壓縮調用)的執行,並且通用寄存器0的位48-51具有二進位值0000和0110-1111中的任何一個。36.嘗試COMPUTE INTERMEDIATE MESSAGE DIGEST、COMPUTE LAST MESSAGE DIGEST 或COMPUTE MESSAGE AUTHENTICATION CODE的執行,並且下列中的任一個為真· R2欄位指派奇編號的寄存器或通用寄存器0。 通用寄存器0的位56不為0。37.嘗試 CONVERT HFP TO BFP (將 HFP 轉換為 BFP)、CONVERT TO FIXED (轉換為固定的)(BFP或HFP)或LOAD FP INTEGER(加載FP整數)(BFP)的執行,並且M3欄位不指派有效變址數(modifier)。
38.嘗試DIVIDE TO INTEGER(分為整數)的執行,並且M4欄位不指派有效變址數。39.嘗試EXE⑶TE的執行,並且目標地址為奇數。40.嘗試EXTRACT STACKED STATE (提取堆棧的狀態)的執行,並且通用寄存器R2 的比特位置56-63中的碼在不安裝ASN和LX重新使用(ASN-and-LX_reuse)設施時大於4, 或者在安裝該設施時大於5。41.嘗試FIND LEFTMOST ONE(發現最左一個)的執行,並且Rl欄位指派奇編號的
寄存器。42.嘗試INVALIDATE DAT TABLE ENTRY (無效DAT表條目)的執行,並且通用寄存器R2的位44-51不全為0。43.嘗試LOAD FPC的執行,並且第二操作數中與FPC寄存器中不支持的位對應的一個或多個位為1。 44.嘗試LOAD PAGE-TABLE-ENTRY ADDRESS (加載頁面-表-條目地址)的執行, 並且該指令的M4欄位包含除二進位0000-0100之外的任何值。45.嘗試LOAD PSff的執行,並且第二操作數地址處的雙字的位12是0。此異常是否被辨識到依賴於模型。46.嘗試MONITOR CALL (監視調用)的執行,並且該指令的比特位置8_11不包含 O047.嘗試MOVE PAGE (移動頁面)的執行,並且通用寄存器0的比特位置48_51不包含0,或者該寄存器的位52和53均為1。48.嘗試PACK ASCII的執行,並且L2欄位大於31。49.嘗試PACK UNICODE的執行,並且L2欄位大於63或者為偶數。50.嘗試PERFORM FLOATING POINT OPERATION(執行浮點操作)的執行,通用寄存器0的位32為0,並且位33-63中的一個或多個欄位無效或者指派未安裝的功能。51.嘗試PERFORM LOCKED OPERATION(執行鎖定的操作)的執行,並且下列中的任何一個為真 通用寄存器0的T位(位55)為0,並且該寄存器的位56-63中的功能碼無效。 通用寄存器0的位32巧4不全為0。 在訪問寄存器模式中,對於導致使用包含ALET的參數列表的功能碼,R3 欄位為 0。52.嘗試PERFORM TIMING FACILITY FUNCTION(執行定時設施功能)的執行,並且下列中的任何一個為真 通用寄存器0的位56不為0。 通用寄存器0的位57-63指定未分配或未安裝的功能碼。53.嘗試PROGRAM TRANSFER (執行轉移)或PROGRAM TRANSFER WITH INSTANCE (執行具有實例的轉移)的執行,並且下列中的全部為真· PSW中的擴展的尋址模式位為0。 由該指令的R2欄位指派的通用寄存器中的基本尋址模式位(位32)為0。
相同寄存器中的指令地址的位33-39不全為0。 54.嘗試RESUME PROGRAM (恢復程序)的執行,並且下列中的任一個為真 對於當前PSW中的布置,第二操作數中的PSW欄位的位31、32和64-127無效。 如果下列中的任何一個為真,則辨識出該異常-位31和32均為0,並且位64-103不全為0。-位31和32分別為0和1,並且位64_96不全為0。-位31和32分別為1和0。-位127 為 1。 參數列表的位0-12不全為0。55.嘗試SEARCH STRING UNICODE (搜索字符串UNICODE)的執行,並且通用寄存器 0的位32-47不全為0。56.嘗試 SET ADDRESS SPACE CONTROL (設置地址空間控制)或 SET ADDRESS SPACE CONTROL FAST (快速設置地址空間控制)的執行,並且第二操作數地址的位52和53不都為 O057.嘗試SET ADDRESSING MODE (SAM24)的執行,並且PSW中未更新的指令地址的位0-39 (PSff的位64-103)不全為0。58.嘗試SET ADDRESSING M0DE(SAM31)的執行,並且PSW中未更新的指令地址的位0-32 (PSff的位64-96)不全為0。59.嘗試SET CLOCK PROGRAMMABLE FIELD (設置時鐘可編程欄位)的執行,並且通用寄存器0的位32-47不全為0。60.嘗試SET FPC的執行,並且第一操作數中與FPC寄存器中的不支持的位對應的一個或多個位為1。61.嘗試STORE SYSTEM INFORMATION (存儲系統信息)的執行,通用寄存器0中的功能碼有效,並且下列任一項為真 通用寄存器0的位36-55以及通用寄存器1的位32_47不全為0。 第二操作數地址未在4K字節邊界上對齊(align)。62.嘗試 TRANSLATE TWO TO ONE (將 2 轉變為 1)或 TRANSLATE TWO TO TWO (將 2 轉變為2)的執行,並且通用寄存器Rl+1中的長度不指定偶數個字節。63.嘗試UNPACK ASCII的執行,並且Ll欄位大於31。64.嘗試UNPACK UNICODE的執行,並且Ll欄位大於63或者是偶數。65.嘗試UPDATE TREE (更新樹)的執行,並且通用寄存器4和5的初始內容在M 位或31位尋址模式中不是8的倍數,或者在64位尋址模式中不是16的倍數。抑制由舊PSW 識別的指令的執行。然而,對於早先的PSW規範異常(原因1-3),完成引入新PSW的操作, 但是此後立即發生中斷。優選地,指令長度碼(ILC)是1、2或3,指示導致異常的指令的長度。當指令地址是奇數時(6-33頁上的原因4),不可預測ILC是1、2還是3。當由於早先的 PSW規範異常(原因1-3)而辨識出異常,並且該異常已由LOAD PSff,LOAD PSff EXTENDED (加載PSW擴展)、PR0GRAM RETURN(程序返回)或中斷引入時,ILC是0。當由SETADDRESSING M0DE(SAM24, SAM31)引入異常時,ILC 為 1,或者如果 SET ADDRESSING MODE 是 EXECUTE 的目標,則ILC是2。當由SET SYSTEM MASK(設置系統掩碼)或由STORE THEN OR SYSTEMMASK(然後存儲或系統掩碼)引入異常時,ILC是2。使用程序中斷來報告在程序的執行期間發生的異常和事件。程序中斷使得舊PSW 被存儲在實際位置336-351處,並且使得從實際位置464-479取出新PSW。中斷的原因由中斷代碼標識。中斷碼被放置在實際位置142-143處,指令長度碼被放置在實際位置141處的字節的比特位置5和6中,其中剩餘位被設置為0,並且0被存儲在實際位置140處。對於某些原因,將標識中斷的原因的附加信息存儲在實際位置144-183處。如果安裝PER-3設施,則作為程序中斷動作的一部分,將阻斷事件地址(breaking-event-address)寄存器的內容放置在實際存儲位置272-279中。除PER事件和加密操作異常外,通過放置在中斷代碼的最右側的七個比特位置中的編碼的值來指示導致中斷的條件。一次僅可以指示一個條件。將中斷代碼的位0-7設置為0。通過將中斷代碼的位8設置為1來指示PER事件。當這是唯一條件時,位0-7和9-15也被設置為0。當與另一程序中斷條件並發地指示PER事件時,位8是1,並且對於另一條件設置位0-7和9-15。通過十六進位0119的中斷代碼指示加密操作異常,或者,如果也指示PER事件,則是十六進位0199。當存在對應的掩碼位時,程序中斷可以僅當該掩碼位為1時發生。PSW中的程序掩碼控制異常中的四個,FPC寄存器中的IEEE掩碼控制IEEE異常,控制寄存器0中的位33 控制SET SYSTEM MASK是否導致特殊操作異常,控制寄存器8中的位48-63控制由於監控事件導致的中斷,並且掩碼的層級結構控制由於PER事件導致的中斷。當任何控制掩碼位是0時,忽略該條件;該條件不保持未決。當用於程序中斷的新PSW具有PSW格式錯誤或者導致在指令取出的過程中辨識到異常時,會發生程序中斷串。被指示為程序異常的某些條件還可能被信道子系統辨識,在該情況下,在子信道狀態字或擴展的狀態字中指示異常。當數據異常導致程序中斷時,數據異常代碼(DXC)被存儲在位置147處,並且0被存儲在位置144-146處。D)(C區分各種類型的數據異常條件。當AFP寄存器(附加的浮點寄存器)控制位(控制寄存器0的位45)為1時,還將D)(C放置在浮點控制(FPC)寄存器的D)(C欄位中。當報告任何其它程序異常時,FPC寄存器中的D)(C欄位保持不變。D)(C是8 位代碼,其指示數據異常的具體原因。DXC2和3互相排斥並且具有比任何其它D)(C高的優先級。因此,例如,DXC2 (BFP 指令)優先於任何IEEE異常;並且DXC3 (DFP指令)優先於任何IEEE異常或仿真的IEEE 異常。作為另一示例,如果存在針對DXC3 (DFP指令)和DXCl (AFP寄存器)兩者的條件,則報告DXC3。當規範異常和AFP寄存器數據異常都適用時,不可預測哪一個被報告。當CPU嘗試引用在配置中不可用的主存儲器位置時,尋址異常被辨識。當主存儲器位置未安裝時,當該存儲器單元未在該配置中時,或者當該存儲器單元斷電時,該主存儲器位置在該配置中不可用。指派在配置中不可用的存儲器位置的地址被稱為無效。當指令的地址無效時,抑制操作。類似地,當EXE⑶TE的目標指令的地址無效時,抑制操作。而且,當在訪問表或表條目時遭遇尋址異常時,抑制操作單元。適用該規則的表和表條目是可調度單元控制(dispatchable-unit-control)表、主ASN第二表條目、以及訪問列表、區域第一表、區域第二表、區域第三表、段表、頁表、聯接表、聯接第一表、聯接第二表、條目表、 ASN第一表、ASN第二表、權職(authority)表、聯接棧和蹤跡表中的條目。當在用於動態地址轉換的隱性引用和與 LOAD PAGE-TABLE-ENTRY ADDRES S、LOAD REAL ADDRES S (加載實際地址)、STORE REAL ADDRESS (存儲實際地址)和TEST PROTECTION (測試保護)的執行關聯的引用兩者中,對於引用區域第一表、區域第二表、區域第三表、段表和頁表而遭遇尋址異常時,該尋址異常導致抑制。類似地,當在隱性地或作為LOAD PAGE-TABLE-ENTRY ADDRESS、LOAD REAL ADDRESS、STORE REAL ADDRESS、TEST ACCESS (測試訪問)或 TEST PROTECTION(測試保護)的一部分而完成的訪問寄存器轉換中遭遇訪問可調度單元控制表、主ASN第二表條目、訪問列表、ASN第二表或權職表的尋址異常時,它們導致抑制。除執行被抑制的一些特定指令外,終止針對可以被轉換但指派不可用位置的操作數地址的操作。對於終止,僅結果欄位會發生改變。在此上下文中,術語「結果欄位」包括條件碼、寄存器和任何所提供的且被指派為由指令改變的存儲器位置。前述內容有益於理解一個計算機系統實施例的術語和結構。實施例不限於ζ/ Architecture或所提供的對其的描述。利用這裡的教導,實施例可以有利地應用於其它計算機廠商的其它計算機架構。參考圖7,計算機系統可以運行作業系統(OS) 701和兩個或更多個應用程式702、 703。採用上下文切換以允許OS管理由應用使用的資源。在一個示例中,OS 701設置終端定時器並啟動704上下文切換動作,以便允許應用程式在由終端定時器指定的時段內運行。上下文切換動作保存(70 OS的狀態信息,包括指向要被執行的下個OS指令的OS的程序計數器。上下文切換動作接下來獲得705應用程式#1 702的狀態信息以允許706應用程式#1702開始執行在應用程式獲得的當前程序計數器處的指令。當終端定時器到時時, 啟動上下文切換704動作以將計算機系統返回至0S。不同的處理器架構提供有限數目的通用寄存器(GR),其被所架構的指令集的指令顯性地(和/或隱性地)識別。IBM z/Architecture及其前身架構(回溯至大約1964年的原始系統360)為每個中央處理單元(CPU)提供16個通用寄存器(GR)。GR可以被處理器(中央處理單元(CPU))的指令如下使用 作為算術或邏輯運算的源操作數。 作為算術或邏輯運算的目標操作數。 作為存儲器操作數的地址(基址寄存器、索引寄存器或者直接)。 作為存儲器操作數的長度。 其它使用,諸如向和從指令提供功能碼或其它信息。直到在2000年引入IBM z/Architecture大型機為止,大型機通用寄存器由32位組成;通過z/Architecture的引入,通用寄存器由64位組成,然而,為了兼容性的原因,許多z/Architecture指令繼續支持32位。類似地,其它架構(諸如,來自Intel 的χ86)例如提供兼容性模式,使得具有例如 32位寄存器的當前機器提供用於僅訪問32位GR的前8位或16位的指令模式。甚至在早期的IBM系統360環境中,16個寄存器(例如由指令中的4位寄存器欄位識別)被證實對於彙編程式設計師和編譯器設計者來說使人畏縮。適度大小的程序可能需要幾個基址寄存器來尋址代碼和數據,從而限制可用於保持活動變量的寄存器數目。某些技術已經被用於尋址有限數目的寄存器 幫助最小化基址寄存器過度利用的程序設計(與模塊化編程一樣簡單)。
編譯器已經使用諸如寄存器「染色(coloring),,的技術來管理寄存器的動態再分配。 可如下減少基址寄存器的使用 具有立即常量的較新的算術和邏輯指令(在該指令內)。 具有相對立即操作數地址的較新指令。 具有長位移的較新指令。然而,當存在比CPU中的寄存器的數目可容納的活動變量和尋址範圍更多的活動變量和尋址範圍時,保持恆定的寄存器壓力。z/Architecture提供三個程序可選尋址模式24、31和64位尋址。然而,對於既不需要64位值也不採用64位存儲器尋址的程序,具有64位GR的益處有限。下面的公開描述採用64位寄存器用於一般不使用64位尋址或變量的程序的技術。在此公開內,使用這樣的約定從左到右以升序對寄存器的比特位置進行編號 (大端)。在64位寄存器中,位0(最左側位)表示最高有效值(263),而位63 (最右側位) 表示最低有效值0°)。這樣的寄存器的最左側的32位(位0-31)稱為高字,且寄存器的最右側的32位(位32-6 稱為低字,其中字是32位。互鎖訪向設施在示例z/Architecture實施例中,互鎖訪問設施可用,互鎖訪問設施提供可以利用單個指令中的互鎖更新來執行加載、更新和存儲操作的手段(與使用比較和交換類型的更新不同)。該設施還提供指令來嘗試以互鎖取出的方式從兩個不同的存儲位置加載。該設施提供下列指令。· LOAD AND ADD (力口載禾口力口 )· LOAD AND ADD LOGICAL (加載和加邏輯)· LOAD AND AND (加載和與)· LOAD AND EXCLUSIVE OR (加載和異或)· LOAD AND 0R(加載和或)· LOAD PAIR DISJOINT (加載對解體)條件加載/存儲設施在示例z/Architecture實施例中,條件加載/存儲設施可以提供如下的手段,即, 通過該手段,可以僅當指令的條件碼掩碼欄位與PSW中的當前條件碼一致時才執行所選操作。該設施提供下列指令。· LOAD ON CONDITION (條件加載)· STORE ON CONDITION (條件存儲)不同操作數設施:在示例z/Architecture實施例中,不同操作數設施可以提供所選算術和邏輯運算的替代形式,其中,結果寄存器可以不同於任一個源寄存器。該設施提供下列指令的替代形式。· ADD (加)· ADD IMMEDIATE (加立即)· ADD LOGICAL (加邏輯)
· ADD LOGICAL WITH SIGNED IMMEDIATE· AND (與)· EXCLUSIVE 0R(異或).OR(或)· SHIFT LEFT SINGLE (左移單個)『 SHIFT LEFT SINGLE LOGICAL (左移單個邏輯)· SHIFT RIGHT SINGLE (右移單個)『 SHIFT RIGHT SINGLE LOGICAL (右移單個邏輯)· SUBTRACT (減)· SUBTRACT LOGICAL (減邏輯)總數(DODulation)計數設施在示例z/Architecture實施例中,總數計數設施可以提供POPULATION COUNT指令,其提供通用寄存器的每個字節中的1比特的計數。存儲器操作數引用(reference)對於某些特殊指令,用於多個操作數的取出引用可以表現為針對通過其它CPU 和通過信道程序所進行的某些訪問是互鎖的。這樣的取出引用稱為互鎖取出引用。與互鎖取出引用關聯的取出訪問不一定一個緊接著一個地發生,而是,在互鎖取出引用的取出訪問之間,其它CPU的存儲訪問可能不發生在與互鎖取出引用相同的位置處。LOAD PAIR DISJOINT指令的存儲器操作數取出引用可以是互鎖取出引用。由條件碼指示LOAD PAIR DISJOINT是否能夠通過互鎖取出來取出兩個操作數。對於某些特殊指令,針對其他CPU和信道程序的某些訪問而互鎖更新引用。這樣的更新引用稱為互鎖更新引用。與互鎖更新引用關聯的取出和存儲訪問不一定一個緊接著一個地發生,但在互鎖更新引用的取出和存儲訪問之間,由其它CPU和信道程序進行的所有存儲訪問與由其它CPU進行的與互鎖更新引用關聯的取出和存儲訪問被防止發生在相同位置處。多處理器系統可以合併各種手段來互鎖存儲器操作數引用。一個實施例將使處理器在引用期間獲得系統中的高速緩存行的排他所有權。另一實施例將例如通過要求從存儲器訪問的操作數在將處於高速緩存行內的完整邊界上而要求存儲器訪問被限制於相同的高速緩存行。在此情況下,如果在1 字節高速緩存行中被訪問的任何64位(8位元組)操作數在完整64位邊界上,則其確定地全部在高速緩存行中。塊並發(concurrent)引用:對於某些引用,對半字O字節)、字G字節)、雙字(8位元組)或四字(16位元組)內的所有字節(8位)的訪問被指定為當由其它CPU和信道程序觀察時表現為塊並發。半字、 字、雙字或四字在此部分中被稱為塊。當取出型引用被指定為表現為在塊內並發時,在正取出在該塊內包含的字節的期間不允許通過另一 CPU或信道程序對該塊存儲訪問。當存儲型引用被指定為表現為在塊內並發時,在正存儲在該塊內的字節期間不允許通過另一 CPU或信道程序對該塊訪問(取出或存儲)。術語「串行化(serializing)指令」是指使得執行一個或多個串行化功能的指令。 術語「串行化操作」是指指令內的操作單元,或者指諸如導致執行串行化功能的中斷的機器操作。
特定操作數串行化某些指令可以導致為指令的操作數執行特定操作數串行化。如由其它CPU以及由信道子系統觀察到的,特定操作數串行化操作包括在可能發生對指令的特定存儲器操作數的概念上的隨後訪問之前由該CPU完成所有概念上在前的存儲器訪問。在導致特定操作數串行化的指令完成時,完成該指令的存儲,如由其它CPU和信道程序所觀察到的。通過執行下列指令而執行特定操作數串行化·當安裝了互鎖訪問設施,且第一操作數在對於操作數的大小完整的邊界上對齊時,對於第一操作數,ADD IMMEDIATE(ASI,AGSI)禾口ADD LOGICAL WITH SIGNED IMMEDIATE。·對於第二操作數,LOAD AND ADD、LOAD AND ADD LOGICAL、LOAD AND AND, LOAD AND EXCLUSIVE OR、LOAD AND 0Ro互鎖更新IBM z/Architecture和其前身多處理器架構(回溯至後來的系統360s)已經實施了某些「互鎖更新」指令。互鎖更新指令確保其上執行指令的CPU從存儲器被取出到其被存儲回為止,有權對存儲器位置進行排他訪問。這保證多處理器配置中嘗試訪問相同位置的多個CPU將觀察不到錯誤結果。第一互鎖更新指令是S/360多處理系統中引入的TEST AND SET(測試和設置) (TS)。系統 370 引入 COMPARE AND SWAP (比較和交換)(CS)和 COMPARE DOUBLE AND SWAP (比較雙精度和交換)(⑶幻指令。ESA/390添加COMPARE AND SWAP AND PURGE (比較和交換和清除)(CSP)指令(在虛擬存儲器管理中使用的專用形式)。z/Architecture添加64位的 C0MAPRE AND SWAP (CSG)和 COMPARE AND SWAP AND PURGE (CSPG)、以及 128 位的 COMPARE DOUBLE AND SWAP (CDSG)指令。z/Architecture長位移設施添加COMPARE AND SWAP (CSY) 和COMPARE DOUBLE AND SWAP(CDSY)指令。z/Architecture的比較和交換和存儲設施 (compare-and-swap-and-store facility)添加 COMPARE AND SWAP AND STORE(比較和交換和存儲)指令。彙編程式設計師使用諸如用於TEST AND SET的(TS)的助記符來識別該指令。 在z/Architecture參考文獻中討論了彙編符號,而其對於本發明的教導來說意義並不大。通過使用現有技術互鎖更新指令,可以實現串行化的訪問的更多詳細形式,包括鎖定(locking)協議、對存儲器位置的互鎖算術和邏輯運算等等,但是以複雜性和附加的 CPU周期為代價。存在對作為原子(atomic)操作單元操作的更多種互鎖更新範例的持久需求。這裡,實施例陳述這些範例中的三個。此公開描述實施互鎖更新技術的兩個新的指令集、以及對第三現有指令集的增強,該現有指令被定義為當操作數被合適地對齊時使用互鎖更新操作加載和執行操作此組指令從存儲器位置(第二操作數)將值加載到通用寄存器(第一操作數)中, 在通用寄存器(第三操作數)中對該值進行算術或布爾運算,並且將運算結果放置回存儲器位置中。第二操作數的取出和存儲表現為對其它CPU的塊並發互鎖更新。加載對解體(LoadPair Disjoint)此組指令嘗試從不同的、單獨的存儲器位置(第一和第二操作數)加載兩個值到通用寄存器的偶/奇對(被指派為第三操作數)中。由條件碼指示是否以互鎖的方式(即, 沒有一個值被另一 CPU改變)訪問兩個不同的存儲器位置。
ADDrLOGICALffITH SIGNEDl IMMEDIATE 增強現有技術系統ZlO引入使用指令中的立即常數執行對存儲器位置的加法的幾個指令ADD IMMEDIATE (AS I, AGS I) ^PADD LOGICAL WITH SIGNED IMMEDIATE (ALSI,ALGSI)。 如原始定義的,這些指令的存儲器訪問不是互鎖更新。當安裝了互鎖更新設施且用於這些指令的存儲器操作數在完整邊界上對齊時,操作數的取出/相加/存儲現在被定義為塊並發互鎖更新。其它架構實施對此問題的替代解決方案。例如,Intel Pentium(奔騰)架構定義 LOCK前綴指令,其影響某些後續指令的互鎖更新。然而,鎖定前綴技術對架構增加了不必要的複雜性。這裡描述的解決方案在原子操作單元中實現互鎖更新-無需前綴指令。互鎖存儲器訪向指令下面是互鎖存儲器訪問指令的示例。
LOAD AND ADD (RSY 格式) 當由計算機系統執行該指令時,將第二操作數加到第三操作數,並且將和放置在第二操作數位置。隨後,將第二操作數的原始內容(在加法之前)未改變地放置在第一操作數位置。對於LAA操作碼(OpCode),操作數被處理為32位帶符號二進位整數。對於LAAG 操作碼,操作數被處理為64位帶符號二進位整數。為了加載的目的而對第二操作數的取出以及向第二操作數位置中的存儲表現為塊並發互鎖更新引用,如被其它CPU所觀察到的。 執行特定操作數串行化操作。位移被處理為20位帶符號二進位整數。必須在字邊界上指派LAA的第二操作數。必須在雙字邊界上指派LAAG的第二操作數。否則,生成規範異常。結果條件碼
0結果零;無溢出
1結果小於零;無溢出
2結果大於零;無溢出
3溢出
程序異常
訪問(取出和存儲,操作數2)
定點溢出
操作(如果未安裝互鎖訪問設施)
規範
編程說明
1.除了 Rl和R3欄位指派相同寄存器的情況之外,通用寄存器R3未變化。
2. LOAD AND ADD、LOAD AND ADD LOGICAL、LOAD AND AND、L0ADAND EXCLUSIVE OR
和L0ADAND OR的操作可以如下表示。temp (臨時)—operand_2 (操作數 2) ;operand_2 — operand_20Poperand_3 (操作數幻;operand_l(操作數1) — temp (臨時);OP表示通過該指令執行的算術或邏輯運
笪弁。LOAD AND ADD LOGICAL (RSY 格式)當由計算機系統執行該指令時,將第二操作數加到第三操作數,並且將和放置在第二操作數位置。隨後,將第二操作數的原始內容(在加法之前)未改變地放置在第一操作數位置。對於LAAL操作碼,操作數被處理為32位無符號二進位整數。對於LAALG操作碼, 操作數被處理為64位無符號二進位整數。為了加載的目的而對第二操作數的取出以及向第二操作數位置中的存儲表現為塊並發互鎖更新引用,如被其它CPU所觀察到的。執行特定操作數串行化操作。位移被處理為20位帶符號二進位整數。必須在字邊界上指派LAAL 的第二操作數。必須在雙字邊界上指派LAALG的第二操作數。否則,生成規範異常。結果條件碼0結果零;無進位1結果非零;無進位2結果零;進位3結果非零;進位程序異常·訪問(取出和存儲,操作數2)·操作(如果未安裝互鎖訪問設施)·規範編程說明見LOAD AND ADD的編程說明。LOAD AND AND (RSY 格式)當由計算機系統執行該指令時,將第二操作數和第三操作數的AND (和)放置在第二操作數位置。隨後,將第二操作數的原始內容(在AND操作之前)未改變地放置在第一操作數位置。對於LAN操作碼,操作數為32位。對於LANG操作碼,操作數為64位。將連接的(connective) AND逐位地施加至操作數。如果兩個操作數中的對應比特位置包含1, 則將結果中的比特位置的內容設置為1 ;否則,該結果位被設置為0。為了加載的目的而對第二操作數的取出以及向第二操作數位置中的存儲表現為塊並發互鎖更新引用,如被其它 CPU所觀察到的。執行特定操作數串行化操作。位移被處理為20位帶符號二進位整數。必須在字邊界上指派LAN的第二操作數。必須在雙字邊界上指派LANG的第二操作數。否則, 生成規範異常。結果條件碼0結果零1結果非零2—3—程序異常·訪問(取出和存儲,操作數2)·操作(如果未安裝互鎖訪問設施)·規範編程說明見LOAD AND ADD的編程說明。LOAD AND EXCLUSIVE OR (RSY 格式)當由計算機系統執行該指令時,將第二操作數和第三操作數的E)(CLUSIVE OR(異或)放置在第二操作數位置。隨後,將第二操作數的原始內容(在EXCLUSIVE OR操作之前)未改變地放置在第一操作數位置。對於LAX操作碼,操作數為32位。對於LAXG操作
3碼,操作數為64位。將連接的EXCLUSIVE OR逐位地施加至操作數。如果兩個操作數中的對應比特位置中的位不同,則將結果中的比特位置的內容設置為1 ;否則,該結果位被設置為0。為了加載的目的而對第二操作數的取出以及向第二操作數位置中的存儲表現為塊並發互鎖更新引用,如被其它CPU所觀察到的。執行特定操作數串行化操作。位移被處理為 20位帶符號二進位整數。必須在字邊界上指派LAX的第二操作數。必須在雙字邊界上指派 LAXG的第二操作數。否則,生成規範異常。結果條件碼0結果零1結果非零2—3—程序異常·訪問(取出和存儲,操作數2)·操作(如果未安裝互鎖訪問設施)·規範編程說明見LOAD AND ADD的編程說明。LOAD AND 0R(RSY 格式)當由計算機系統執行該指令時,將第二操作數和第三操作數的0R(或)放置在第二操作數位置。隨後,將第二操作數的原始內容(在OR操作之前)未改變地放置在第一操作數位置。對於LAO操作碼,操作數為32位。對於LAOG操作碼,操作數為64位。將連接的OR逐位地施加至操作數。如果一個或兩個操作數中的對應比特位置包含1,則將結果中的比特位置的內容設置為1 ;否則,該結果位被設置為0。為了加載的目的而對第二操作數的取出以及向第二操作數位置中的存儲表現為塊並發互鎖更新引用,如被其它CPU所觀察到的。執行特定操作數串行化操作。位移被處理為20位帶符號二進位整數。必須在字邊界上指派LAO的第二操作數。必須在雙字邊界上指派LAOG的第二操作數。否則,生成規範異常。得到的條件碼0結果零1結果非零2—3—程序異常·訪問(取出和存儲,操作數2)·操作(如果未安裝互鎖訪問設施)·規範編程說明見LOAD AND ADD的編程說明。LOAD PAIR DlSJOINT(SSFl^i)當由計算機系統執行該指令時,通用寄存器R3指派偶/奇寄存器對的偶編號的寄存器。將第一操作數未改變地放置到第三操作數的偶編號的寄存器中,並且將第二操作數未改變地放置到第三操作數的奇編號的寄存器中。條件碼指示第一和第二操作數是否表現為通過塊並發互鎖取出而被取出。對於LPD操作碼,第一和第二操作數是存儲器中的字,並且第三操作數在通用寄存器R3和R3+1的位32-63中;該寄存器的位0-31不改變。對於LPDG 操作碼,第一和第二操作數是存儲器中的雙字,並且第三操作數在通用寄存器R3和R3+1的位0-63中。當如被其它CPU所觀察到的,第一和第二操作數表現為通過塊並發互鎖取出而被取出時,設置條件碼為0。當第一和第二操作數不表現為通過塊並發互鎖取出而被取出時,設置條件碼為3。不管條件碼為何值都加載第三操作數。第一和第二操作數的位移被處理為12位無符號二進位整數。必須在字邊界上指派LPD的第一和第二操作數。必須在雙字邊界上指派LPDG的第一和第二操作數。通用寄存器R3必須指派該偶編號的寄存器。否則,生成規範異常。結果條件碼0通過互鎖取出來加載寄存器對1 —2—3不通過互鎖取出來加載寄存器對程序異常·訪問(取出,操作數1和2)·操作(如果未安裝互鎖訪問設施)·規範編程說明1.在該配置中,條件碼的設置依賴於其它CPU對存儲器的訪問。2.當結果條件碼為3時,程序可以分支回來重新執行LOAD PAIR DISJOINT指令。 然而,在對實現互鎖取出的重複的未成功嘗試之後,程序應當使用將對存儲器操作數的訪問串行化的替代手段。推薦在分支到替代路徑之前,程序將LOAD PAIR DISJOINT重新執行不超過10次。3.程序應當能夠容納永不設置條件碼0的情形。條件加載/ 存儲(L0AD/ST0RE-0N-C0NDITI0N)指令下面是示例條件加載/存儲指令LOAD ON CONDITION (條件加載)(RRF, RSY 格式)當由計算機系統執行該指令時,如果條件碼具有由M3指定的值之一,則將第二操作數未改變地放置在第一操作數位置;否則,第一操作數保持不變。對於LOC和LR0C,第一和第二操作數為32位,而對於LGOC操作碼和LGROC操作碼,第一和第二操作數為64位。M3 欄位用作四位掩碼。四個條件碼(0、1、2和幻從左到右與掩碼的四位一致,如下當前條件碼用於選擇對應的掩碼位。如果由條件碼選擇的掩碼位為1,則執行加載。如果所選擇的掩碼位是0,則不執行加載。用於LOC和LGOC的位移被處理為20位帶符號二進位整數。對於LOC和LG0C,當不滿足由M3欄位指定的條件(即,不執行加載操作) 時,對於第二操作數是生成訪問異常還是PER零地址檢測是模型相關的。條件碼該碼保持不變。程序異常
·訪問(取出,LOC和LGOC的操作數2)·操作(如果未安裝條件加載/存儲設施)編程說明1.當M3欄位包含0時,該指令充當NOP。當M3欄位包含全1且不存在異常條件時,總是執行加載操作。然而,這些不是分別實施NOP或無條件加載的優選手段。2.對於LOC和LG0C,當不滿足由M3欄位指定的條件時,是否將第二操作數引入高速緩存是模型相關的。3. LOAD ON CONDITION提供與其後跟隨了 LOAD指令的單獨BRANCH ON CONDITION(條件分支)指令的功能類似的功能,除了 LOAD ON CONDITION不提供索引寄存器之外。例如,下面兩個指令序列是等效的。在實施預測性分支的模型上,當CPU能夠成功預測分支條件時,BRANCH ON CONDITION和LOAD指令的組合可以執行得略優於LOAD ON CONDITION指令。然而,在CPU無法成功預測分支條件的模型上,諸如當條件更隨機時,LOAD ON CONDITION指令可以提供顯著的性能改善。STORE ON CONDITION (條件存儲)(RSY 格式)當由計算機系統執行該指令時,如果條件碼具有由M3指定的值之一,則將第一操作數未改變地放置在第二操作數位置;否則,第二操作數保持不變。對於STOC操作碼,第一和第二操作數為32位,而對於STGOC操作碼,第一和第二操作數為64位。M3欄位用作四位掩碼。四個條件碼(0、1、2和幻從左到右與掩碼的四個位一致,如下當前條件碼用於選擇對應的掩碼位。如果由條件碼選擇的掩碼位為1,則執行存儲。如果所選擇的掩碼位是0, 則不執行存儲。以常規指令排序繼續下個順序指令。位移被處理為20位帶符號二進位整數。當不滿足由M3欄位指定的條件(即,不執行存儲操作)時,對於第二操作數是否發生下列中的任何一個或全部是模型相關的(a)生成訪問異常,(b)生成PER存儲器改變事件, (c)生成PER零地址檢測事件,或者(d)設置改變位。條件碼該代碼保持不變。程序異常 訪問(存儲,操作數2)·操作(如果未安裝加載/存儲條件設施)編程說明1.當M3欄位包含0時,該指令充當NOP。當M3欄位包含全1且不存在異常條件時,總是執行存儲操作。然而,這些不是分別實施NOP或無條件存儲的優選手段。2.當不滿足由M3欄位指定的條件時,是否將第二操作數引入高速緩存是模型相關的。3. STORE ON CONDITION 提供與其後跟隨 STORE 指令的單獨 BRANCH ON CONDITION 指令的功能類似的功能,除了 STORE ON CONDITION不提供索引寄存器之外。例如,下面兩個指令序列是等效的。在實施預測性分支的模型上,當CPU能夠成功預測分支條件時,BRANCH ON CONDITION和STORE指令的組合可以執行得略優於STORE ON CONDITION指令。然而,在 CPU無法成功預測分支條件的模型上,諸如當條件較隨機時,STORE ON CONDITION指令可以提供顯著的性能改善。不同操作數設施指令
下面是示例性的不同操作數設施指令ADD (RR、RRE、RRF、RX、RXY 格式)、ADD IMMEDIATE (RIL、RIE、SIY 格式)當由計算機系統執行該指令時,對於ADD (A、AG、AGF, AGFR、AGR、AR和AY操作碼) 以及對於ADD IMMEDIATE (AFI、AGFI、AGSI和ASI操作碼),將第二操作數加至第一操作數, 並且將和放置在第一操作數位置。對於ADD (AGRK和ARK)以及對於ADD IMMEDIATE (AGHIK 和AHIK操作碼),將第二操作數加至第三操作數,並且將和放置在第一操作數位置。對於ADD (A、AR、ARK和AY操作碼)以及對於ADD IMMEDIATE (AFI操作碼),操作數以及和被處理為32位帶符號二進位整數。對於ADD (AG、AGR和AGRK操作碼),它們被處理為64位帶符號二進位整數。對於ADD (AGFR、AGF操作碼)以及對於ADD IMMEDIATE (AGFI操作碼),第二操作數被處理為32位帶符號二進位整數,並且第一操作數以及和被處理為64位帶符號二進位整數。對於ADD IMMEDIATE (ASI操作碼),第二操作數被處理為8位帶符號二進位整數,並且第一操作數以及和被處理為32位帶符號二進位整數。對於ADD IMMEDIATE (AGSI操作碼),第二操作數被處理為8位帶符號二進位整數,並且第一操作數以及和被處理為64位帶符號二進位整數。對於ADD IMMEDIATE (AHIK操作碼),第一和第三操作數被處理為32位帶符號二進位整數,並且第二操作數被處理為16位帶符號二進位整數。對於ADD IMMEDIATE (AGHIK 操作碼),第一和第三操作數被處理為64位帶符號二進位整數,並且第二操作數被處理為 16位帶符號二進位整數。當存在溢出時,通過允許任何向符號比特位置的進位輸入並忽略從符號比特位置的任何進位輸出而獲得結果,並且設置條件碼為3。如果定點溢出掩碼為1,則發生針對定點溢出的程序中斷。當安裝互鎖訪問設施並且ADD IMMEDIATE(ASI、AGSI)的第一操作數在與其尺寸一致的完整邊界上對齊時,執行第一操作數的取出和存儲作為互鎖更新(如被其它CPU 所觀察到的),並且執行特定操作數串行化操作。當未安裝互鎖訪問設施時,或者當ADD IMMEDIATE (ASI、AGSI)的第一操作數未在與其尺寸一致的完整邊界上對齊時,不執行第一操作數的取出和存儲作為互鎖更新。針對A的位移被處理為12位無符號二進位整數。針對AY、AG、AGF、AGSI和ASI的位移被處理為20位帶符號二進位整數。結果條件碼0結果零;無溢出1結果小於零;無溢出2結果大於零;無溢出3 溢出程序異常·訪問(取出和存儲,僅AGSI和ASI的操作數1 ;取出,僅A、AY、AG和AGF的操作數2)·定點溢出·操作(AY,如果未安裝長位移設施;AFI和AGFI,如果未安裝擴展的立即設施; AGSI和ASI,如果未安裝通用指令擴展設施;ARK、AGRK, AHIK和AGHIK,如果未安裝不同操作數設施)。編程說明1.對ADD IMMEDIATE (AGSI和ASI)的第一操作數的訪問包括從存儲器取出第一操作數並隨後存儲經更新的值時。當未安裝互鎖訪問設施時,或者當第一操作數未在與其尺寸一致的完整邊界上對齊時,對第一操作數的取出和存儲訪問不一定一個緊接著一個地發生。在這種情形下,如果存在另一 CPU或信道子系統也可能正在更新存儲器中的位置的可能性,則ADD IMMEDIATE (AGSI和ASI)無法被安全地用於更新該位置。當互鎖訪問設施被安裝並且第一操作數在與其尺寸一致的完整邊界上對齊時,使用塊並發互鎖更新訪問該操作數。2.對於忽略關於算術運算的溢出條件的某些程式語言,條件碼3的設置模糊了結果的符號。然而,對於ADD IMMEDIATE,12欄位的符號(在代碼生成時已知)可以被用在設置將準確地確定結果符號的分支掩碼中。ADD LOGICAL (RR、RRE, RX、RXY 格式)、ADD LOGICAL IMMEDIATE (RIL 格式)當由計算機系統執行該指令時,對於ADD LOGICAL (AL、ALG、ALGF、ALGFR、ALGR、ALR 和ALY操作碼)以及對於ADD LOGICAL IMMEDIATE (ALGFI和ALFI操作碼),將第二操作數
加至第一操作數,並將和放置在第一操作數位置。對於ADD LOGICAL (ALGRK和ALRK操作碼),將第二操作數加至第三操作數,並且將和放置在第一操作數位置。對於ADD LOGICAL(AL、ALR、ALRK和ALY操作碼)以及對於ADD LOGICAL IMMEDIATE (ALFI操作碼),將操作數以及和處理為32位無符號二進位整數。對於 ADD LOGICAL (ALG、ALGR和ALGRK操作碼),它們被處理為64位無符號二進位整數。對於 ADD LOGICAL (ALGFR、ALGF 操作碼)以及對於 ADD LOGICAL IMMEDIATE (ALGFI 操作碼),將第二操作數處理為32位無符號二進位整數,並且將第一操作數以及和處理為64位無符號二進位整數。AL的位移被處理為12位無符號二進位整數。ALY、ALG和ALGF的位移被處理為20 位帶符號二進位整數。結果條件碼0結果零;無進位1結果非零;無進位2結果零;進位3結果非零;進位程序異常·訪問(取出,僅AL、ALY、ALG和ALGF的操作數2) 操作(ALY,如果未安裝長位移設施;ALFI和ALGFI,如果未安裝擴展的立即設施; ALRK和ALGRK,如果未安裝不同操作數設施)。ADD LOGICAL WITH SIGNED IMMEDIATE (SIY、RIE 格式)當由計算機系統執行該指令時,對於ALGSI操作碼和ALSI操作碼,將第二操作數加至第一操作數,並且將和放置在第一操作數位置。對於ALGHSIK和ALHSIK操作碼,將第二操作數加至第三操作數,並且將和放置在第一操作數位置。對於ALSI操作碼,將第一操作數以及和處理為32位無符號二進位整數。對於ALGSI操作碼,將第一操作數以及和處理為64位無符號二進位整數。對於ALSI和ALGSI兩者,將第二操作數處理為8位帶符號二進位整數。對於ALHSIK操作碼,將第一和第三操作數處理為32位無符號二進位整數。對於ALGHSIK操作碼,將第一和第三操作數處理為64位無符號二進位整數。對於ALGHSIK和 ALHSIK兩者,將第二操作數處理為16位帶符號二進位整數。當互鎖訪問設施被安裝並且第一操作數在與其尺寸一致的完整邊界上對齊時,使用塊並發互鎖更新來訪問該操作數。對於ALGSI和ALSI,將第二操作數加至第一操作數,並且將和放置在第一操作數位置。對於ALGHSIK和ALHSIK,將第二操作數加至第三操作數,並且將和放置在第一操作數位置。對於ALSI,將第一操作數以及和處理為32位無符號二進位整數。對於ALGSI,將第一操作數以及和處理為64位無符號二進位整數。對於ALSI和ALGSI 兩者,將第二操作數處理為8位帶符號二進位整數。對於ALHSIK,將第一和第三操作數處理為32位無符號二進位整數。對於ALGHSIK,將第一和第三操作數處理為64位無符號二進位整數。對於ALGHSIK和ALHSIK兩者,將第二操作數處理為16位帶符號二進位整數。當互鎖訪問設施被安裝並且第一操作數在與其尺寸一致的積分邊界上對齊時,則執行第一操作數的取出和存儲作為互鎖更新(如被其它CPU所觀察到的),並且執行特定操作數串行化操作。當未安裝互鎖訪問設施時,或者當ADD LOGICAL WITHSIGNED IMMEDIATE (ALSI、ALGSI) 的第一操作數未在與其尺寸一致的積分邊界上對齊時,不執行第一操作數的取出和存儲作為互鎖更新。當第二操作數包含負值時,將條件碼設置為仿佛執行了 SUBTRACTLOGICAL操作。當第二操作數為負時,永不設置條件碼為0。位移被處理為20位帶符號二進位整數。結果條件碼0結果零;無進位1結果非零;無進位2結果零;進位3結果非零;進位AND (RR、RRE、RRF、RX、RXY、Si、SIY、SS 格式)當由計算機系統執行該指令時,對於N、NC、NG、NGR、NI、NIY、NR和NY操作碼,將第一和第二操作數的AND放置在第一操作數位置。對於NGRK和NRK,將第二和第三操作數的 AND放置在第一操作數位置。連接的AND被逐位地施加至操作數。如果兩個操作數中的對應的比特位置均包含1,則結果中的比特位置的內容被設置為1 ;否則,將結果位設置為0。 對於AND (NC操作碼),從左到右處理每個操作數。當操作數重疊時,如下獲得結果仿佛一次一個字節地處理操作數並且在取出必要的操作數字節之後立即存儲每個結果字節。對於 AND (Ni和NIY操作碼),第一操作數的長度為一個字節,並且僅存儲一個字節。對於AND (N、 NR、NRK和NY),操作數為32位,而對於AND (NG, NGR和NGRK操作碼),操作數為64位。N、 NI的位移以及NC的兩個操作數被處理為12位無符號二進位整數。NY、NIY和NG的位移被處理為20位帶符號二進位整數。結果條件碼0結果零1結果非零2—3—
程序異常·訪問(取出,操作數2,N、NY、NG和NC ;取出和存儲,操作數1,Ni、NIY和NC) 操作(NIY和NY,如果未安裝長位移設施;NGRK和NRK,如果未安裝不同操作數設施)EXCLUSIVE OR(RR、RRE、RRF、RX、RXY、Si、SIY、SS 格式)當由計算機系統執行該指令時,對於X、XC、XG、XGR、XI、XIY、)(R* XY操作碼,將第一和第二操作數的E)(CLUSIVE OR放置在第一操作數位置。對於XGRK和XRK操作碼,將第二和第三操作數的EXCLUSIVE OR放置在第一操作數位置。連接的EXCLUSIVE OR被逐位地施加至操作數。如果兩個操作數中的對應的比特位置中的比特不同,則結果中的比特位置的內容被設置為1 ;否則,將結果位設置為0。對於EXCLUSIVE 0R(C操作碼),從左到右處理每個操作數。當操作數重疊時,如下獲得結果仿佛一次一個字節地處理操作數並且在取出必要的操作數字節之後立即存儲每個結果字節。對於EXCLUSIVE OR(XI、XIY操作碼), 第一操作數的長度為一個字節,並且僅存儲一個字節。對於EXCLUSIVE 0R(X、)(R、XRK和XY 操作碼),操作數為32位,而對於E)(CLUSIVE 0R(XG、XGR和XGRK操作碼),操作數為64位。 X、XI的位移以及)(C的兩個操作數被處理為12位無符號二進位整數。XY、XIY和XG的位移被處理為20位帶符號二進位整數。結果條件碼0結果零1結果非零2—3—程序異常·訪問(取出,操作數2,X、XY、XG和)(C;取出和存儲,操作數1,XI、XIY和XC) 操作(XIY和XY,如果未安裝長位移設施;XGRK和XRK,如果未安裝不同操作數設施)編程說明1.-2. EXCLUSIVE OR可以用於反轉位,在測試和設置所編程的二進位切換中特別有用的操作。3.與其自己進行EXCLUSIVE OR的欄位變為全零。4.對於 EXCLUSIVE OR(XR 或 XGI ),序列 AESXUSIVE-0R B、BEXCLUSIVE-ORA, AEXCLUSIVE-0R B在不使用額外通用寄存器的情況下導致A和B的內容交換。5.對EXCLUSIVE OR(XI)和EXCLUSIVE OR(XC)的第一操作數的訪問包括從存儲器取出第一操作數字節並隨後存儲經更新的值時。這些對特定字節的取出和存儲訪問不一定一個緊接著一個地發生。因此,如果存在另一 CPU或信道程序也可能正在更新存儲器中的位置的可能性,則E)(CLUSIVE OR無法被安全地用於更新該位置。OR (RR、RRE、RRF、RX、RXY、Si、SIY、SS 格式)當由計算機系統執行該指令時,對於0、0C、0G、0GR、0I、0IY、0R和OY操作碼,將第
一和第二操作數的OR放置在第一操作數位置。對於OGRK和0RK,將第二和第三操作數的OR放置在第一操作數位置。連接的OR被逐位地施加至操作數。如果一個或兩個操作數中的對應的比特位置包含1,則結果中的比特位置的內容被設置為1 ;否則,將結果位設置為 0。對於OR(0C操作碼),從左到右處理每個操作數。當操作數重疊時,如下獲得結果仿佛一次一個字節地處理操作數並且在取出必要的操作數字節之後立即存儲每個結果字節。對於0R(0I、OIY操作碼),第一操作數的長度為一個字節,並且僅存儲一個字節。對於0R(0、 OR、ORK和OY操作碼),操作數為32位,而對於OR (0G、OGR和OGRK操作碼),操作數為64 位。0、01的位移以及OC的兩個操作數被處理為12位無符號二進位整數。0Υ、0ΙΥ和OG的位移被處理為20位帶符號二進位整數。結果條件碼0結果零1結果非零2—3—SHIFT LEFT SINGLE (RS、RSY 格式)當由計算機系統執行該指令時,對於SLA操作碼,將帶符號的第一操作數的31位數字部分向左移位由第二操作數地址指定的位數,並且將結果放置在第一操作數位置。通用寄存器Rl的位0-31保持不變。對於SLAK操作碼,將帶符號的第三操作數的31位數字部分向左移位由第二操作數地址指定的位數,並且將結果與附加在其左側的第三操作數的符號位一起放置在第一操作數位置。通用寄存器Rl的位0-31保持不變,並且在通用寄存器 R3中,第三操作數保持不變。對於SLAG操作碼,將帶符號的第三操作數的63位數字部分向左移位由第二操作數地址指定的位數,並且將結果與附加在其左側的第三操作數的符號位一起放置在第一操作數位置。在通用寄存器R3中,第三操作數保持不變。第二操作數地址不用於尋址數據;其最右側的六個位指示要被移位的比特位置的數目。忽略該地址的其餘部分。對於SLA操作碼,第一操作數被處理為通用寄存器Rl的比特位置32-63中的32位帶符號二進位整數。第一操作數的符號保持不變。該操作數的全部31個數字位參與向左移位。對於SLAK,第一和第三操作數分別被處理為通用寄存器Rl和R3的比特位置32-63 中的32位帶符號二進位整數。將第一操作數的符號設置為與第三操作數的符號相同。第三操作數的全部31個數字位參與向左移位。對於SLAG,第一和第三操作數分別被處理為通用寄存器Rl和R3的比特位置0-63中的64位帶符號二進位整數。將第一操作數的符號設置為與第三操作數的符號相同。第三操作數的全部63個數字位參與向左移位。對於SLA、 SLAG或SLAK,將零提供給在右側的空出的比特位置。如果與符號位不同的一個或多個位被移出比特位置33 (對於SLA或SLAK)或者比特位置1 (對於SLAG),則發生溢出,並且設置條件碼為3。如果定點溢出掩碼位為1,則發生針對定點溢出的程序中斷。結果條件碼0結果零;無溢出1結果小於零;無溢出2結果大於零;無溢出3 溢出·定點溢出
·操作(SLAK,如果未安裝不同操作數設施)SHIFT LEFT SINGLE LOGICAL (RS、RSY 格式)當由計算機系統執行該指令時,對於SLL操作碼,將32位第一操作數向左移位由第二操作數地址指定的位數,並且將結果放置在第一操作數位置。通用寄存器Rl的位0-31 保持不變。對於SLLK,將32位第三操作數向左移位由第二操作數地址指定的位數,並且將結果放置在第一操作數位置。通用寄存器Rl的位0-31保持不變,並且在通用寄存器R3中, 第三操作數保持不變。對於SLLG操作碼,將64位第三操作數向左移位由第二操作數地址指定的位數,並且將結果放置在第一操作數位置。在通用寄存器R3中,第三操作數保持不變。第二操作數地址不用於尋址數據;其最右側的六個位指示要被移位的比特位置的數目。 忽略該地址的其餘部分。對於SLL,第一操作數在通用寄存器Rl的比特位置32-63中。該操作數的全部32位參與向左移位。對於SLLK,第一和第三操作數分別在通用寄存器Rl和 R3的比特位置32-63中。第三操作數的全部32位參與向左移位。對於SLLG,第一和第三操作數分別在通用寄存器Rl和R3的比特位置0-63中。第三操作數的全部64位參與向左移位。對於SLL、SLLG或SLLK操作碼,將零提供給右側空出的比特位置。條件碼該碼保持不變。程序異常·操作(SLLK,如果未安裝不同操作數設施)SHIFT RIGHT SINGLE (RS、RSY 格式)當由計算機系統執行該指令時,對於SRA操作碼,帶符號的第一操作數的31位數字部分向右移位由第二操作數地址指定的位數,並且將結果放置在第一操作數位置。通用寄存器Rl的位0-32保持不變。對於SRAK操作碼,將帶符號的第三操作數的31位數字部分向右移位由第二操作數地址指定的位數,並且將結果與附加在其左側的第三操作數的符號位一起放置在第一操作數位置。通用寄存器Rl的位0-32保持不變。對於SHIFT RIGHT SINGLE (SRAG操作碼),將帶符號的第三操作數的63位數字部分向右移位由第二操作數地址指定的位數,並且將結果與附加在其左側的第三操作數的符號位一起放置在第一操作數位置。在通用寄存器R3中,第三操作數保持不變。第二操作數地址不用於尋址數據;其最右側的六個位指示要被移位的比特位置的數目。忽略該地址的其餘部分。對於SRA,第一操作數被處理為通用寄存器Rl的比特位置32-63中的32位帶符號二進位整數。第一操作數的符號保持不變。該操作數的全部31個數字位參與向右移位。對於SRAK,第一和第三操作數分別被處理為通用寄存器Rl和R3的比特位置32-63中的32位帶符號二進位整數。 將第一操作數的符號設置為與第三操作數的符號相同。第三操作數的全部31個數字位參與向右移位。對於SRAG,第一和第三操作數分別被處理為通用寄存器Rl和R3的比特位置 0-63中的64位帶符號二進位整數。將第一操作數的符號設置為與第三操作數的符號相同。 第三操作數的全部63個數字位參與向右移位。對於SRA、SRAG或SRAK,不檢查從比特位置 63移出的位並將其丟失。將與該符號相同的比特提供給左側空出的比特位置。結果條件碼0結果零1結果小於零2結果大於零
3—程序異常·操作(SRAK,如果未安裝不同操作數設施)編程說明1. 一個比特位置的右移等效於除以2並向下取整。當偶數被右移一個位置時,結果等效於將該數除以2。當奇數被右移一個位置時,結果等效於將相鄰較低數除以2。例如, +5向右移位一個位置產生+2,其中-5產生-3。2.對於SHIFT RIGHT SINGLE (SRA和SRAK),從31到63的移位量使得整個數字部分被移出寄存器,留下-1或0的結果(取決於初始內容是否為負)。對於SHIFT RIGHT SINGLE(SRAG),63的移位量導致相同的效果。SHIFT RIGHT SINGLE LOGICAL (RS、RSY 格式)當由計算機系統執行該指令時,對於SRL操作碼,將32位第一操作數向右移位由第二操作數地址指定的位數,並且將結果放置在第一操作數位置。通用寄存器Rl的位0-31 保持不變。對於SRLK操作碼,將32位第三操作數向右移位由第二操作數地址指定的位數, 並且將結果放置在第一操作數位置。通用寄存器Rl的位0-31保持不變,並且在通用寄存器 R3中,第三操作數保持不變。對於SRLG操作碼,將64位第三操作數向右移位由第二操作數地址指定的位數,並且將結果放置在第一操作數位置。在通用寄存器R3中,第三操作數保持不變。第二操作數地址不用於尋址數據;其最右側的六個位指示要被移位的比特位置的數目。忽略該地址的其餘部分。對於SRL,第一操作數在通用寄存器Rl的比特位置32-63 中。該操作數的全部32位參與向右移位。對於SRLK,第一和第三操作數分別在通用寄存器 Rl和R3的比特位置32-63中。第三操作數的全部32位參與向右移位。對於SRLG,第一和第三操作數分別在通用寄存器Rl和R3的比特位置0-63中。第三操作數的全部64位參與向右移位。對於SRL、SRLG或SRLK,不檢查從比特位置63移出的位並將其丟失。將零提供給右側空出的比特位置。條件碼該碼保持不變。程序異常·操作(SRLK,如果未安裝不同操作數設施)SUBTRACT (RR、RRE、RRF、RX、RXY 格式)當由計算機系統執行該指令時,對於S、SG、SGF、SGFR、SGR、SR和SY,從第一操作數中減去第二操作數,並且將差放置在第一操作數位置。對於SGRK和SRK,從第二操作數中減去第三操作數,並且將差放置在第一操作數位置。對於S、SR、SRK和SY,操作數以及差被處理為32位帶符號二進位整數。對於SG、SGR和SGRK,它們被處理為64位帶符號二進位整數。對於SGFR和SGF,第二操作數被處理為32位帶符號二進位整數,並且第一操作數以及差被處理為64位帶符號二進位整數。當存在溢出時,通過允許任何對符號比特位置的進位輸入以及忽略從符號比特位置的任何進位輸出而獲得結果,並且設置條件碼為3。如果定點溢出掩碼為1,則發生針對定點溢出的程序中斷。針對S的位移被處理為12位無符號二進位整數。針對SY、SG和SGF的位移被處理為20位帶符號二進位整數。結果條件碼0結果零;無溢出
1結果小於零;無溢出2結果大於零;無溢出3 溢出程序異常·訪問(取出,僅S、SY、SG和SGF的操作數2)·定點溢出·操作(SY,如果未安裝長位移設施;SRK、SGRK,如果未安裝不同操作數設施)編程說明1.對於SR和SGR,當Rl和R2指派相同寄存器時,相減等效於清空(clear)寄存
ο2.從其自身減去最大負數給出0結果且無溢出。SUBTRACT LOGICAL (RR、RRE、RRF、RX、RXY 格式)、SUBTRACT LOGICAL IMMEDIATE (RIL 格式)當由計算機系統執行該指令時,對於SUBTRACT LOGICAL(SL, SLG, SLGF, SLGFR、 SLGR、SLR禾口 SLY)以及對於SUBTRACT LOGICAL IMMEDIATE,從第一操作數中減去第二操作數,並且將差放置在第一操作數位置。對於SUBTRACT L0GICAL(SLGRK和SLRK),從第二操作數中減去第三操作數,並且將差放置在第一操作數位置。對於SUBTRACT LOGICAL(SL, SLR、SLRK 和 SLY)以及對於 SUBTRACT LOGICAL IMMEDIATE (SLFI),操作數和差被處理為 32 位無符號二進位整數。對於SUBTRACT LOGICAL (SLG, SLGR和SLGRK),它們被處理為64位無符號二進位整數。對於 SUBTRACT LOGICAL (SLGFR、SLGF)以及對於 SUBTRACT LOGICAL IMMEDIATE (SLGFI),第二操作數被處理為32位無符號二進位整數,並且第一操作數以及差被處理為64位無符號二進位整數。針對SL的位移被處理為12位無符號二進位整數。針對SLY、SLG和SLGF的位移被處理為20位帶符號二進位整數。結果條件碼0—1結果非零;借位2結果零;無借位3結果非零;無借位程序異常·訪問(取出,僅SL、SLY、SLG和SLGF的操作數2)·操作(SLY,如果未安裝長位移設施;SLFI、SLGFI,如果未安裝擴展的立即設施; SLRK和SLGRK,如果未安裝不同操作數設施)編程說明1.通過將第二操作數的1的補和值1加至第一操作數而執行邏輯減法。當第二操作數為零時,使用1的補和值1代替第二操作數的2的補產生進位。2. SUBTRACT LOGICAL與SUBTRACT的不同點僅在於條件碼的含義以及缺少用於溢出的中斷。3. 0差總是伴隨著從比特位置0 (對於SLGR、SLGFR、SLG和SLGF)或者比特位置 32 (對於SLR、SL和SLY)的進位輸出,因此無借位。
4.用於SUBTRACT LOGICAL的條件碼設置還可以被解釋為指示進位的存在或不存在。總數計數指令下面是示例總數計數指令POPULATION COUNT (RRE 格式)當由計算機系統執行該指令時,將通用寄存器R2的八字節中的每一個中的「1」比特的數目的計數放置到通用寄存器Rl的對應字節中。通用寄存器Rl的每個字節是0-8範圍中的8位二進位整數。結果條件碼0結果零1結果非零2—3—·操作(如果未安裝總數計數設施)編程說明1.基於通用寄存器R1、R2的全部64位來設置條件碼。可以計算通用寄存器中的 「1」位的總數目,如下所示。在此示例中,通用寄存器15包含要被計數的位的數目;將包含通用寄存器15中「1」比特的總數目的結果放置在通用寄存器8中。(通用寄存器9用作工作寄存器並包含完成時的剩餘值。)2.如果存在POPCNT指令的結果為零的高概率,則程序可以基於由POPCNT設置的條件碼,插入條件分支指令以跳過相加和移位操作。3.使用與編程說明2中所示的技術類似的技術,可以確定第二操作數的字、半字、 或非連續字節中的「1」位的數目。在實施例中,參考圖6A和6B,執行算術/邏輯指令608,其中該指令包括互鎖存儲器操作數,算術/邏輯指令包括操作碼欄位(OP)、指定第一寄存器中的第一操作數的第一寄存器欄位(Rl)、指定第二寄存器的第二寄存器欄位(B2)、以及指定第三寄存器的第三寄存器欄位(R3),所述第二寄存器指定第二操作數在存儲器中的位置,所述算術/邏輯指令的執行包括由處理器從由第二寄存器指定的存儲器中的位置獲得601第二操作數,所述第二操作數由值組成(在實施例中,該值可以保存607在臨時存儲器中);從第三寄存器獲得602第三操作數;基於所獲得的第二操作數和所獲得的第三操作數執行603操作碼定義的算術運算或邏輯運算以產生結果;將所產生的結果存儲604在存儲器中的所述位置中; 並且將所獲得的第二操作數的值保存605在第一寄存器中,其中所述值不被執行所述指令而改變。在實施例中,保存606條件碼,所述條件碼指示所述結果為零或者所述結果為非零。在實施例中,所述操作碼定義的算術運算652是算術或邏輯ADD (加),而所述操作碼定義的邏輯運算是AND(與)、E)(CLUSIVE-0R(異或)或者OR(或)中的任一個,並且所述執行包括響應於邏輯運算的結果為負,保存指示所述結果為負的條件碼;響應於邏輯運算的結果為正,保存指示所述結果為正的條件碼;並且響應於邏輯運算的結果為溢出,保存指示所述結果為溢出的條件碼。在實施例中,操作數大小由操作碼指定,其中一個或多個第一操作碼指定32位操作數,並且一個或多個第二操作碼指定64位操作數。在實施例中,算術/邏輯指令608還包括由兩個單獨的操作碼欄位(OP、0P)組成的操作碼、第一位移欄位(DH2)和第二位移欄位(DL2),其中通過將第二寄存器的內容加到帶符號位移值而確定存儲器中的所述位置,所述帶符號位移值包括連結至第二位移欄位的第一位移欄位的符號擴展值。在實施例中,所述執行還包括響應於所述操作碼是第一操作碼並且所述第二操作數不在32位邊界上,生成653規範異常;並且響應於所述操作碼是第二操作碼並且所述第二操作數不在64位邊界上,生成規範異常。在實施例中,所述處理器是多處理器系統中的處理器,並且所述執行還包括所述獲得第二操作數包括防止多處理器系統的其它處理器在所述獲得第二操作數與將結果存儲在存儲器中的第二位置之間訪問存儲器中的所述位置;並且在所述存儲所產生的結果時,允許多處理器系統的其它處理器訪問存儲器中的所述位置。雖然這裡已經圖示並描述了優選實施例,但是應當理解,所述實施例不限於這裡公開的精確構造,並且保留對所附權利要求限定的本發明的範圍內的所有改變和修改的權利。
權利要求
1.一種計算機實施的方法,用於執行具有互鎖存儲器操作數的算術/邏輯指令,所述算術/邏輯指令包括操作碼欄位、指定第一寄存器中的第一操作數的第一寄存器欄位、指定第二寄存器的第二寄存器欄位、以及指定第三寄存器的第三寄存器欄位,所述第二寄存器指定第二操作數在存儲器中的位置,所述算術/邏輯指令的執行包括由處理器從由所述第二寄存器指定的存儲器中的位置獲得第二操作數,所述第二操作數由值組成;從所述第三寄存器獲得第三操作數;基於所獲得的第二操作數和所獲得的第三操作數執行操作碼定義的算術運算或邏輯運算以產生結果;將所產生的結果存儲在存儲器中的所述位置中;以及將所獲得的第二操作數的值保存在所述第一寄存器中。
2.如權利要求1所述的方法,還包括保存條件碼,所述條件碼指示所述結果為零或者所述結果為非零。
3.如權利要求2所述的方法,其中所述操作碼定義的算術運算是算術或邏輯ADD,並且其中所述操作碼定義的邏輯運算是「與」、「異或」或者「或」中的任一個,所述方法還包括響應於所述邏輯運算的結果為負,保存指示所述結果為負的條件碼; 響應於所述邏輯運算的結果為正,保存指示所述結果為正的條件碼;以及響應於所述邏輯運算的結果為溢出,保存指示所述結果為溢出的條件碼。
4.如權利要求3所述的方法,其中操作數大小由操作碼指定,其中一個或多個第一操作碼指定32位操作數,並且一個或多個第二操作碼指定64位操作數。
5.如權利要求4所述的方法,其中所述算術/邏輯指令還包括由兩個單獨的操作碼欄位組成的操作碼、第一位移欄位和第二位移欄位,其中通過將所述第二寄存器的內容加至帶符號的位移值而確定存儲器中的所述位置,所述帶符號的位移值包括連結至所述第二位移欄位的第一位移欄位的符號擴展值。
6.如權利要求5所述的方法,還包括響應於所述操作碼是第一操作碼並且所述第二操作數不在32位邊界上,生成規範異常;以及響應於所述操作碼是第二操作碼並且所述第二操作數不在64位邊界上,生成規範異常。
7.如權利要求6所述的方法,其中所述處理器是多處理器系統中的處理器,所述方法還包括所述獲得第二操作數包括防止所述多處理器系統的其它處理器在所述獲得第二操作數與將結果存儲在存儲器中的第二位置處之間訪問存儲器中的所述位置;以及在所述存儲所產生的結果時,允許所述多處理器系統的其它處理器訪問存儲器中的所述位置。
8.一種計算機系統,用於執行具有互鎖存儲器操作數的算術/邏輯指令,所述算術/邏輯指令包括操作碼欄位、指定第一寄存器中的第一操作數的第一寄存器欄位、指定第二寄存器的第二寄存器欄位、以及指定第三寄存器的第三寄存器欄位,所述第二寄存器指定第二操作數在存儲器中的位置,所述計算機系統包括存儲器;以及與所述存儲器通信的處理器,所述處理器包括用於從存儲器取出指令的指令取出單元以及用於執行所取出的指令的一個或多個執行單元,其中所述計算機系統被配置為執行用於執行所述算術/邏輯運算的方法,所述方法包括由處理器從由所述第二寄存器指定的存儲器中的位置獲得第二操作數,所述第二操作數由值組成;從所述第三寄存器獲得第三操作數;基於所獲得的第二操作數和所獲得的第三操作數執行操作碼定義的算術運算或邏輯運算以產生結果;將所產生的結果存儲在存儲器中的所述位置中;以及將所獲得的第二操作數的值保存在所述第一寄存器中。
9.如權利要求8所述的計算機系統,還包括保存條件碼,所述條件碼指示所述結果為零或者所述結果為非零。
10.如權利要求9所述的計算機系統,其中所述操作碼定義的算術運算是算術或邏輯 「加」,其中所述操作碼定義的邏輯運算是「與」、「異或」或者「或」中的任一個,所述計算機系統還包括響應於所述邏輯運算的結果為負,保存指示所述結果為負的條件碼; 響應於所述邏輯運算的結果為正,保存指示所述結果為正的條件碼;以及響應於所述邏輯運算的結果為溢出,保存指示所述結果為溢出的條件碼。
11.如權利要求10所述的計算機系統,其中操作數大小由操作碼指定,其中一個或多個第一操作碼指定32位操作數,並且一個或多個第二操作碼指定64位操作數。
12.如權利要求11所述的計算機系統,其中所述算術/邏輯指令還包括由兩個單獨的操作碼欄位組成的操作碼、第一位移欄位和第二位移欄位,其中通過將所述第二寄存器的內容加至帶符號的位移值而確定存儲器中的所述位置,所述帶符號的位移值包括連結至所述第二位移欄位的第一位移欄位的符號擴展值。
13.如權利要求12所述的計算機系統,還包括響應於所述操作碼是第一操作碼並且所述第二操作數不在32位邊界上,生成規範異常;以及響應於所述操作碼是第二操作碼並且所述第二操作數不在64位邊界上,生成規範異 常
14.如權利要求13所述的計算機系統,其中所述處理器是多處理器系統中的處理器, 所述計算機系統還包括所述獲得第二操作數包括防止所述多處理器系統的其它處理器在所述獲得第二操作數與將結果存儲在存儲器中的第二位置之間訪問存儲器中的所述位置;以及在所述存儲所產生的結果時,允許所述多處理器系統的其它處理器訪問存儲器中的所述位置。
全文摘要
執行具有互鎖存儲器操作數的算術/邏輯指令,當執行時,從存儲器中的位置獲得第二操作數並且保存第二操作數的臨時拷貝,所述執行基於第二操作數和第三操作數執行算術或邏輯運算,並且將結果存儲在第二操作數的存儲器位置中,並隨後將臨時拷貝存儲在第一寄存器中。
文檔編號G06F9/34GK102298515SQ20111016874
公開日2011年12月28日 申請日期2011年6月22日 優先權日2010年6月22日
發明者丹.F.格雷納, 蒂莫西.J.斯萊格爾, 馬塞爾.米特蘭 申請人:國際商業機器公司

同类文章

一種新型多功能組合攝影箱的製作方法

一種新型多功能組合攝影箱的製作方法【專利摘要】本實用新型公開了一種新型多功能組合攝影箱,包括敞開式箱體和前攝影蓋,在箱體頂部設有移動式光源盒,在箱體底部設有LED脫影板,LED脫影板放置在底板上;移動式光源盒包括上蓋,上蓋內設有光源,上蓋部設有磨沙透光片,磨沙透光片將光源封閉在上蓋內;所述LED脫影

壓縮模式圖樣重疊檢測方法與裝置與流程

本發明涉及通信領域,特別涉及一種壓縮模式圖樣重疊檢測方法與裝置。背景技術:在寬帶碼分多址(WCDMA,WidebandCodeDivisionMultipleAccess)系統頻分復用(FDD,FrequencyDivisionDuplex)模式下,為了進行異頻硬切換、FDD到時分復用(TDD,Ti

個性化檯曆的製作方法

專利名稱::個性化檯曆的製作方法技術領域::本實用新型涉及一種檯曆,尤其涉及一種既顯示月曆、又能插入照片的個性化檯曆,屬於生活文化藝術用品領域。背景技術::公知的立式檯曆每頁皆由月曆和畫面兩部分構成,這兩部分都是事先印刷好,固定而不能更換的。畫面或為風景,或為模特、明星。功能單一局限性較大。特別是畫

一種實現縮放的視頻解碼方法

專利名稱:一種實現縮放的視頻解碼方法技術領域:本發明涉及視頻信號處理領域,特別是一種實現縮放的視頻解碼方法。背景技術: Mpeg標準是由運動圖像專家組(Moving Picture Expert Group,MPEG)開發的用於視頻和音頻壓縮的一系列演進的標準。按照Mpeg標準,視頻圖像壓縮編碼後包

基於加熱模壓的纖維增強PBT複合材料成型工藝的製作方法

本發明涉及一種基於加熱模壓的纖維增強pbt複合材料成型工藝。背景技術:熱塑性複合材料與傳統熱固性複合材料相比其具有較好的韌性和抗衝擊性能,此外其還具有可回收利用等優點。熱塑性塑料在液態時流動能力差,使得其與纖維結合浸潤困難。環狀對苯二甲酸丁二醇酯(cbt)是一種環狀預聚物,該材料力學性能差不適合做纖

一種pe滾塑儲槽的製作方法

專利名稱:一種pe滾塑儲槽的製作方法技術領域:一種PE滾塑儲槽一、 技術領域 本實用新型涉及一種PE滾塑儲槽,主要用於化工、染料、醫藥、農藥、冶金、稀土、機械、電子、電力、環保、紡織、釀造、釀造、食品、給水、排水等行業儲存液體使用。二、 背景技術 目前,化工液體耐腐蝕貯運設備,普遍使用傳統的玻璃鋼容

釘的製作方法

專利名稱:釘的製作方法技術領域:本實用新型涉及一種釘,尤其涉及一種可提供方便拔除的鐵(鋼)釘。背景技術:考慮到廢木材回收後再加工利用作業的方便性與安全性,根據環保規定,廢木材的回收是必須將釘於廢木材上的鐵(鋼)釘拔除。如圖1、圖2所示,目前用以釘入木材的鐵(鋼)釘10主要是在一釘體11的一端形成一尖

直流氧噴裝置的製作方法

專利名稱:直流氧噴裝置的製作方法技術領域:本實用新型涉及ー種醫療器械,具體地說是ー種直流氧噴裝置。背景技術:臨床上的放療過程極易造成患者的局部皮膚損傷和炎症,被稱為「放射性皮炎」。目前對於放射性皮炎的主要治療措施是塗抹藥膏,而放射性皮炎患者多伴有局部疼痛,對於止痛,多是通過ロ服或靜脈注射進行止痛治療

新型熱網閥門操作手輪的製作方法

專利名稱:新型熱網閥門操作手輪的製作方法技術領域:新型熱網閥門操作手輪技術領域:本實用新型涉及一種新型熱網閥門操作手輪,屬於機械領域。背景技術::閥門作為流體控制裝置應用廣泛,手輪傳動的閥門使用比例佔90%以上。國家標準中提及手輪所起作用為傳動功能,不作為閥門的運輸、起吊裝置,不承受軸向力。現有閥門

用來自動讀取管狀容器所載識別碼的裝置的製作方法

專利名稱:用來自動讀取管狀容器所載識別碼的裝置的製作方法背景技術:1-本發明所屬領域本發明涉及一種用來自動讀取管狀容器所載識別碼的裝置,其中的管狀容器被放在循環於配送鏈上的文檔匣或託架裝置中。本發明特別適用於,然而並非僅僅專用於,對引入自動分析系統的血液樣本試管之類的自動識別。本發明還涉及專為實現讀