專(zhuān)利名稱(chēng):旋轉(zhuǎn)然后插入所選比特的工具以及由此的指令的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及計(jì)算機(jī)系統(tǒng),更具體而言,涉及計(jì)算機(jī)系統(tǒng)處理器指令功能。
背景技術(shù):
商標(biāo)IBM 是美國(guó)紐約Armonk的國(guó)際商業(yè)機(jī)器公司的注冊(cè)商標(biāo),S/390, Z900 和Z990以及其他產(chǎn)品名稱(chēng)可以是國(guó)際商業(yè)機(jī)器公司或其他公司的注冊(cè)商標(biāo)或產(chǎn)品名稱(chēng)。以在二十世紀(jì)六十年代已知的IBM 系統(tǒng)360的機(jī)器開(kāi)始到現(xiàn)在,IBM已經(jīng)開(kāi) 發(fā)出特定架構(gòu),其因?yàn)橛?jì)算系統(tǒng)的本質(zhì)屬性而已知為“大型機(jī)”(mainframe),其操作原 理通過(guò)描述指令來(lái)描述機(jī)器的架構(gòu),當(dāng)該指令的“大型機(jī)”實(shí)施時(shí)可以執(zhí)行該指令,由于 對(duì)改進(jìn)由“大型機(jī)”表示的計(jì)算機(jī)器的狀態(tài)的顯著貢獻(xiàn)而由IBM發(fā)明人發(fā)明并采用該指 令,正如許多年來(lái)描述的在IBM操作原理中得到的結(jié)論的顯著貢獻(xiàn)。2007年4月公布的 IBM z/Architecture 操作原理第六版已經(jīng)成為標(biāo)準(zhǔn)公布的參考SA22-7832-05,并 結(jié)合至IBMz9 主機(jī)服務(wù)器。SA22-7832-05的公開(kāi)、IBM Z/Architecture 操作原 理的全部?jī)?nèi)容通過(guò)引用合并于此。參考圖1A,描述了現(xiàn)有技術(shù)中的主機(jī)計(jì)算機(jī)系統(tǒng)50的代表性組件。組件的其他 配置也可以使用在計(jì)算機(jī)系統(tǒng)中,其在現(xiàn)有技術(shù)中是公知的。代表性主機(jī)計(jì)算機(jī)50包括一 個(gè)或多個(gè)CPU 1,其與主存儲(chǔ)器(計(jì)算機(jī)存儲(chǔ)器2)以及到存儲(chǔ)設(shè)備11和網(wǎng)絡(luò)10的I/O接 口進(jìn)行通信,以用于與其他計(jì)算機(jī)或SAN等進(jìn)行通信。CPU 1兼容于具有架構(gòu)指令集和架 構(gòu)功能性的架構(gòu)。CPU 1可以具有動(dòng)態(tài)地址轉(zhuǎn)換(DAT) 3,以將程序地址(虛擬地址)改變 為存儲(chǔ)器的真實(shí)地址。DAT典型地包括轉(zhuǎn)換后備緩沖器(TLB) 7,用于緩存轉(zhuǎn)換從而之后對(duì) 計(jì)算機(jī)存儲(chǔ)器2的塊的訪問(wèn)無(wú)需地址轉(zhuǎn)換的延遲。典型地緩存9在計(jì)算機(jī)存儲(chǔ)器2和處理 器1之間使用。緩存9可以是分層級(jí)的,其具有對(duì)多于一個(gè)CPU可用的大緩存以及在該大 緩存和每個(gè)CPU之間的較小的、較快的(較低層級(jí))緩存。在一些實(shí)施例中,該較低層級(jí)的 緩存被劃分以提供用于指令提取和數(shù)據(jù)訪問(wèn)的各個(gè)低層級(jí)緩存。在一個(gè)實(shí)施例中,通過(guò)指 令提取單元經(jīng)由緩存9從存儲(chǔ)器2提取指令。該指令在指令解碼單元(6)進(jìn)行解碼并被派 發(fā)(在一些實(shí)施例中使用其他指令)到指令執(zhí)行單元8。典型地,使用幾個(gè)執(zhí)行單元8,例 如算術(shù)執(zhí)行單元、浮點(diǎn)執(zhí)行單元和分支指令執(zhí)行單元。該指令通過(guò)執(zhí)行單元來(lái)執(zhí)行,來(lái)自指 令的訪問(wèn)操作數(shù)指定所需的寄存器和存儲(chǔ)器。如果要從存儲(chǔ)器2訪問(wèn)(加載或存儲(chǔ))操作 數(shù),則加載存儲(chǔ)器單元5典型地在正在執(zhí)行的指令的控制下處理該訪問(wèn)??梢栽谟布娐贰?內(nèi)部微碼(固件)或兩者的結(jié)合中執(zhí)行指令。在圖IB中,提供了現(xiàn)有技術(shù)的仿真主機(jī)計(jì)算機(jī)系統(tǒng)21的實(shí)例,其仿真主機(jī)架構(gòu)的 主機(jī)計(jì)算機(jī)系統(tǒng)50。在仿真的主機(jī)計(jì)算機(jī)系統(tǒng)21中,主機(jī)處理器(CPU)2是仿真的主機(jī)處 理器(或虛擬主機(jī)處理器),包括仿真處理器27,其具有與主機(jī)計(jì)算機(jī)50的處理器1的不 同的原生指令集架構(gòu)。仿真的主機(jī)計(jì)算機(jī)21具有仿真處理器27可訪問(wèn)的存儲(chǔ)器22。在 示例性實(shí)施例中,存儲(chǔ)器27分為主機(jī)計(jì)算機(jī)存儲(chǔ)器2部分和仿真例程23部分。根據(jù)主機(jī) 計(jì)算機(jī)架構(gòu),對(duì)于仿真的主機(jī)計(jì)算機(jī)21的程序,主機(jī)計(jì)算機(jī)存儲(chǔ)器2是可用的。仿真處理
4器27執(zhí)行并非仿真的處理器1的架構(gòu)的架構(gòu)指令集的原生指令,所述原生指令是從仿真例 程存儲(chǔ)器23獲得的,以及可通過(guò)采用在Sequence&Access/Decode例程(其可解碼被訪問(wèn) 的主機(jī)指令,以確定用于仿真所訪問(wèn)的主機(jī)指令的功能的原生指令執(zhí)行例程)獲得的一個(gè) 或多個(gè)指令來(lái)訪問(wèn)來(lái)自主機(jī)計(jì)算機(jī)存儲(chǔ)器2中的程序的、用于執(zhí)行的主機(jī)指令??梢酝ㄟ^(guò) 架構(gòu)化的工具例程來(lái)仿真針對(duì)主機(jī)計(jì)算機(jī)系統(tǒng)50的架構(gòu)而定義的其他工具,包括例如通 用寄存器、控制寄存器、動(dòng)態(tài)地址轉(zhuǎn)換和I/O子系統(tǒng)支持和處理器緩存的功能。仿真例程還 可使用仿真處理器27中可用的功能(例如通用寄存器和虛擬地址動(dòng)態(tài)轉(zhuǎn)換)以改進(jìn)仿真 例程的性能。還可以提供專(zhuān)用硬件以及卸載引擎以幫助處理器27仿真主機(jī)計(jì)算機(jī)50的功 能。在大型機(jī)中,架構(gòu)機(jī)器指令由程序員使用,通?,F(xiàn)在“C”程序員經(jīng)常利用編輯器 應(yīng)用。存儲(chǔ)在存儲(chǔ)器介質(zhì)中的這些指令可在z/ArchitecturelBM服務(wù)器中,或者可選擇 地,在執(zhí)行其他架構(gòu)的機(jī)器中原生地執(zhí)行。可在現(xiàn)有的和將來(lái)的IBM大型機(jī)服務(wù)器以及 其他IBM的機(jī)器(例如,pSeries 服務(wù)器和xSeries 服務(wù)器)中仿真它們??墒褂糜?IBM 、Intel 、AMD 、太陽(yáng)微系統(tǒng)和其它制造的硬件在各種機(jī)器中運(yùn)行Linux的的機(jī) 器中執(zhí)行它們。除了在Z/Architecture 下執(zhí)行該硬件,也可使用Linux以及使用由 Hercules, UMX、FSI (基礎(chǔ)軟件公司)或平臺(tái)解決方案公司(PSI)提供的仿真的機(jī)器,其中 一般而言,以仿真模式來(lái)進(jìn)行執(zhí)行。在仿真模式中,仿真軟件由原生處理器來(lái)執(zhí)行以對(duì)仿真 處理器的架構(gòu)進(jìn)行仿真。原生處理器27典型地執(zhí)行仿真軟件23,包括固件或原生操作系統(tǒng)以執(zhí)行仿真處 理器的仿真。仿真軟件23負(fù)責(zé)提取以及執(zhí)行仿真處理器架構(gòu)的指令。仿真軟件23維持仿 真程序計(jì)數(shù)器以跟蹤指令邊界。仿真軟件23可以一次提取一個(gè)或多個(gè)仿真機(jī)器指令,并通 過(guò)原生處理器27將所述一個(gè)或多個(gè)仿真機(jī)器指令轉(zhuǎn)換為用于執(zhí)行的相應(yīng)的原生機(jī)器指令 組。這些轉(zhuǎn)換的指令可被緩存,從而可實(shí)現(xiàn)更快速的轉(zhuǎn)換。然而,仿真軟件必須維持仿真處 理器架構(gòu)的架構(gòu)規(guī)則,以便確保對(duì)于仿真處理器而寫(xiě)入的操作系統(tǒng)和應(yīng)用正確操作。此外, 仿真軟件必須提供由仿真處理器1架構(gòu)識(shí)別的資源,該架構(gòu)包括但不限于控制寄存器、通 用寄存器、浮點(diǎn)寄存器、動(dòng)態(tài)地址轉(zhuǎn)換功能(包括分段表格和頁(yè)面表格)、例如中斷機(jī)制、上 下文轉(zhuǎn)換機(jī)器、時(shí)間日期(TOD)時(shí)鐘和到I/O子系統(tǒng)的架構(gòu)接口,從而指定運(yùn)行在仿真處理 器上的操作系統(tǒng)或應(yīng)用程序可以運(yùn)行在具有仿真軟件的原生處理器上。解碼被仿真的特定指令,調(diào)用來(lái)執(zhí)行各個(gè)指令的功能的子例程。在理解了優(yōu)選 實(shí)施例的描述后本領(lǐng)域技術(shù)人員將理解,例如,在“C”子例程、或驅(qū)動(dòng)器、或某些其他針對(duì) 特定硬件提供驅(qū)動(dòng)器的方法中實(shí)現(xiàn)對(duì)于仿真處理器1的功能進(jìn)行仿真的仿真軟件功能 23。各種軟件和硬件仿真專(zhuān)利包括但不限于Beausoleil等的題為“Multiprocessor for hardware emulation “的 US5551013 ;以及 Scalzi 等的題為"Preprocessing of stored target routines for emulating incompatible instructions on a target processor,, 的 US6009261 ;以及 Davidian 等的題為 “Decoding guest instruction to directly access emulation routines that emulate the guest instructions,,的 US55574873 ; 以及 Gorishek 等的題為"Symmetrical multiprocessing bus and chipset used for coprocessor support allowing normative code to run in a system,,的US6308255 ;以 及 Lethin 等白勺題為 “Dynamic optimizing object code translator for architectureemulation and dynantic optimizing object code translation method,,的 US6463582 ; 以及 Eric Traut 的題為“Method for emulating guest instructions on a host computer through dynantic recompilation of host instructions,,的 US5790825 以及 許多其他專(zhuān)利例示各種已知方法來(lái)實(shí)現(xiàn)對(duì)設(shè)計(jì)來(lái)用于對(duì)于本領(lǐng)域技術(shù)人員是可用的目標(biāo) 機(jī)器的不同機(jī)器的指令格式的仿真,以及由上述人員使用的財(cái)務(wù)軟件技術(shù)。
發(fā)明內(nèi)容
提取并執(zhí)行具有Z比特的旋轉(zhuǎn)然后插入(rotate-then-insert)指令,其中第一寄 存器中的第一操作數(shù)被旋轉(zhuǎn)一定量。如果Z比特為“0”,將布爾操作的結(jié)果的所選部分插入 到第二寄存器的第二操作數(shù)的相應(yīng)比特。如果Z比特為“1”,那么除了所插入比特之外,將 除了第二操作數(shù)的所插入比特之外的比特設(shè)定為零。如同所保存的結(jié)果是有符號(hào)的值并表示結(jié)果為零,小于零或大于零一樣,設(shè)定條 件代碼。本發(fā)明旨在提供與現(xiàn)有架構(gòu)一致的新的指令功能,其解除了對(duì)諸如通用寄存器之 類(lèi)的架構(gòu)資源的依賴(lài),改善了采用該新指令的軟件版本的功能性和性能。
在總結(jié)說(shuō)明書(shū)的權(quán)利要求中具體指出并清楚聲明了本發(fā)明的主題。通過(guò)以下結(jié)合 附圖進(jìn)行的詳細(xì)描述可以顯見(jiàn)本發(fā)明的前述和其他目的,特征和優(yōu)勢(shì),圖中圖IA是示出現(xiàn)有技術(shù)的主機(jī)計(jì)算機(jī)系統(tǒng)的實(shí)例的圖;圖IB是示出現(xiàn)有技術(shù)的仿真主機(jī)計(jì)算機(jī)系統(tǒng)的實(shí)例的圖;圖IC是示出現(xiàn)有技術(shù)的計(jì)算機(jī)系統(tǒng)的實(shí)例的圖;圖2是示出現(xiàn)有技術(shù)的計(jì)算機(jī)網(wǎng)絡(luò)的實(shí)例的圖;圖3是示出現(xiàn)有技術(shù)的計(jì)算機(jī)系統(tǒng)的元件的圖;圖4A-4C示出現(xiàn)有技術(shù)的計(jì)算機(jī)系統(tǒng)的元件;圖5A-5F示出計(jì)算機(jī)系統(tǒng)的機(jī)器指令格式;圖6A-6B示出根據(jù)本發(fā)明實(shí)施例的示例性指令格式;以及
圖7示出本發(fā)明實(shí)施例的示例性流程。
具體實(shí)施例方式在實(shí)施例中,本發(fā)明可以通過(guò)軟件(有時(shí)稱(chēng)為許可的內(nèi)部代碼、固件、微碼、毫碼 (Milli-code)、微微碼(Pico-code)等,任何一個(gè)將兼容本發(fā)明)來(lái)實(shí)施。參照?qǐng)D1A,實(shí)施 本發(fā)明的軟件程序代碼典型地由也稱(chēng)為系統(tǒng)50的CPU(中央處理單元)1的處理器從長(zhǎng)時(shí) 存儲(chǔ)介質(zhì)(例如CD-ROM驅(qū)動(dòng)器、盒帶驅(qū)動(dòng)器或硬盤(pán)驅(qū)動(dòng)器)7來(lái)存取。軟件程序代碼可包 括在與數(shù)據(jù)處理系統(tǒng)一起使用的任何各種已知介質(zhì)上,例如盒帶、硬盤(pán)驅(qū)動(dòng)器或CD-ROM。該 代碼可以分布在這樣的介質(zhì)上,或從計(jì)算機(jī)存儲(chǔ)器2或網(wǎng)絡(luò)10上的一個(gè)計(jì)算機(jī)系統(tǒng)的存儲(chǔ) 器分發(fā)給用戶(hù),到其他計(jì)算機(jī)系統(tǒng)以由這樣的其他系統(tǒng)的用戶(hù)使用??商鎿Q地,程序代碼可以包括在存儲(chǔ)器2中,并由處理器1使用處理器總線來(lái)存 取。這樣的程序代碼包括控制各種計(jì)算機(jī)組件以及一個(gè)或多個(gè)應(yīng)用程序的功能和交互的操
6作系統(tǒng)。程序代碼通常從密集存儲(chǔ)介質(zhì)11到高速存儲(chǔ)器2進(jìn)行分頁(yè),其中由處理器1處理 是可用的。用于將軟件程序代碼包括在存儲(chǔ)器中或物理介質(zhì)的技術(shù)和方法、和/或?qū)④浖?代碼經(jīng)由網(wǎng)絡(luò)進(jìn)行分發(fā)的技術(shù)和方法是已知的,將不在這里進(jìn)一步討論。程序代碼當(dāng)在可 見(jiàn)介質(zhì)(包括但不限于電子存儲(chǔ)器模塊(RAM)、閃速存儲(chǔ)器、壓縮盤(pán)(00)、0¥0、磁帶等)上 創(chuàng)建并存儲(chǔ)時(shí),通常稱(chēng)之為“計(jì)算機(jī)程序產(chǎn)品”。計(jì)算機(jī)程序產(chǎn)品介質(zhì)典型地通過(guò)優(yōu)選在計(jì) 算機(jī)系統(tǒng)中的處理電路可讀以由該處理電路執(zhí)行。圖IC例示了在其中實(shí)現(xiàn)本發(fā)明的代表性工作站或服務(wù)器硬件系統(tǒng)。圖IC的系統(tǒng) 100包括代表性的計(jì)算機(jī)系統(tǒng)101 (例如個(gè)人計(jì)算機(jī)、工作站或服務(wù)器),包括可選外圍設(shè) 備。根據(jù)已知技術(shù),工作站101包括一個(gè)或多個(gè)處理器106和采用來(lái)連接和支持處理器106 和系統(tǒng)101的其他組件之間的通信的總線??偩€將處理器連接到存儲(chǔ)器105和長(zhǎng)時(shí)存儲(chǔ)器 107,其例如可包括硬盤(pán)驅(qū)動(dòng)器(例如包括磁介質(zhì)、⑶、DVD和閃速存儲(chǔ)器中的任何一個(gè))或 盒帶驅(qū)動(dòng)器。系統(tǒng)101還可包括用戶(hù)接口適配器,其經(jīng)由總線將微處理器106連接至一個(gè) 或多個(gè)接口設(shè)備,例如鍵盤(pán)104、鼠標(biāo)103、打印機(jī)/掃描儀110和/或其他接口設(shè)備,其可 以是任何接口設(shè)備,例如觸摸屏、數(shù)字化輸入板等??偩€還將顯示器設(shè)備102(例如LCD屏 幕或監(jiān)視器)經(jīng)由顯示器適配器連接至微處理器106。系統(tǒng)101可通過(guò)能夠與網(wǎng)絡(luò)109通信的網(wǎng)絡(luò)適配器與其他計(jì)算機(jī)或計(jì)算機(jī)的網(wǎng)絡(luò) 通信。實(shí)例性網(wǎng)絡(luò)適配器是通信信道,令牌環(huán)、以太網(wǎng)或調(diào)制解調(diào)器??蛇x擇地,工作站101 可使用無(wú)線接口(例如⑶PD(蜂窩數(shù)字分組數(shù)據(jù)))進(jìn)行通信。工作站可與局域網(wǎng)(LAN) 或廣域網(wǎng)(WAN)中的這樣的其他計(jì)算機(jī)關(guān)聯(lián),或者工作站可以是與另外的計(jì)算機(jī)中的客戶(hù) /服務(wù)器配置中的客戶(hù)等。所有這些配置以及適當(dāng)?shù)耐ㄐ庞布蛙浖际且阎夹g(shù)。圖2例示了其中可實(shí)現(xiàn)本發(fā)明的數(shù)據(jù)處理網(wǎng)絡(luò)200。數(shù)據(jù)處理網(wǎng)絡(luò)200可包括多個(gè) 單獨(dú)的網(wǎng)絡(luò)(例如無(wú)線網(wǎng)絡(luò)和有線網(wǎng)絡(luò)),其每個(gè)可包括多個(gè)單獨(dú)的工作站101、201、202、 203和204。另外,本領(lǐng)域技術(shù)人員將理解,可以包括一個(gè)或多個(gè)LAN,其中LAN可包括多個(gè) 與主機(jī)處理器耦接的智能工作站。仍然參考圖2,網(wǎng)絡(luò)還可包括大型機(jī)或大型服務(wù)器(例如網(wǎng)關(guān)計(jì)算機(jī)(客戶(hù)服務(wù)器 206)或應(yīng)用服務(wù)器(遠(yuǎn)程服務(wù)器208,其可訪問(wèn)數(shù)據(jù)庫(kù)以及也可由工作站205直接訪問(wèn)))。 網(wǎng)關(guān)計(jì)算機(jī)206服務(wù)為進(jìn)入每個(gè)網(wǎng)絡(luò)207的點(diǎn)。當(dāng)一個(gè)組網(wǎng)協(xié)議與另一連接個(gè)時(shí)需要網(wǎng)關(guān)。 網(wǎng)關(guān)206可優(yōu)選地通過(guò)通信鏈路耦接至另一網(wǎng)絡(luò)(例如因特網(wǎng)207)。網(wǎng)關(guān)206還可以使 用通信鏈路直接耦接至一個(gè)或多個(gè)工作站101、201、202、203和204。網(wǎng)關(guān)計(jì)算機(jī)可使用從 IBM 公司可獲得的 IBM eServer zSericS z9 Server 來(lái)實(shí)施。實(shí)施本發(fā)明的軟件編程代碼典型地由系統(tǒng)101的處理器106從長(zhǎng)時(shí)存儲(chǔ)介質(zhì) 107 (例如⑶-ROM驅(qū)動(dòng)器或硬盤(pán)驅(qū)動(dòng)器)存取。軟件編程代碼可包括在任何各種已知介質(zhì) (例如盤(pán)、硬盤(pán)驅(qū)動(dòng)器或CD-ROM)上以與數(shù)據(jù)處理系統(tǒng)一起使用。代碼可分布在這樣的介質(zhì) 上,或者可從網(wǎng)絡(luò)上的一個(gè)計(jì)算機(jī)系統(tǒng)的存儲(chǔ)器或存儲(chǔ)設(shè)備分發(fā)給用戶(hù)210、211,到其他計(jì) 算機(jī)系統(tǒng)以由這樣的其他系統(tǒng)的用戶(hù)使用??蛇x地,編程代碼111可包括在存儲(chǔ)器105中并由處理器106使用處理器總線存 取。這樣的編程代碼包括控制各種計(jì)算機(jī)組件以及一個(gè)或多個(gè)應(yīng)用程序112的功能和交互 的操作系統(tǒng)。程序代碼通常從密集存儲(chǔ)介質(zhì)107到高速存儲(chǔ)器105進(jìn)行分頁(yè),其中由處理 器1處理是可用的。用于將軟件程序代碼包括在存儲(chǔ)器中或物理介質(zhì)的技術(shù)和方法、和/或?qū)④浖a經(jīng)由網(wǎng)絡(luò)進(jìn)行分發(fā)的技術(shù)和方法是已知的,將不在這里進(jìn)一步討論。程序代 碼當(dāng)在可見(jiàn)介質(zhì)(包括但不限于電子存儲(chǔ)器模塊(RAM)、閃速存儲(chǔ)器、壓縮盤(pán)(CD)、DVD、磁 帶等)上創(chuàng)建并存儲(chǔ)時(shí),通常稱(chēng)之為“計(jì)算機(jī)程序產(chǎn)品”。計(jì)算機(jī)程序產(chǎn)品介質(zhì)典型地通過(guò) 優(yōu)選在計(jì)算機(jī)系統(tǒng)中的處理電路可讀以由該處理電路執(zhí)行。最容易由處理器(通常比處理器的其他緩存更快更小)獲得的緩存是最低的緩存 (Li或級(jí)1),主存儲(chǔ)器是最高級(jí)別的緩存(如果有3級(jí)則是L3)。最低級(jí)別的緩存通常劃 分為保持要執(zhí)行的機(jī)器指令的指令緩存(I-緩存)以及保持?jǐn)?shù)據(jù)操作數(shù)的數(shù)據(jù)緩存(D-緩 存)。參照?qǐng)D3,對(duì)于處理器106描述了示例性處理器實(shí)施例。典型地,使用緩存303的 一個(gè)或多個(gè)級(jí)別來(lái)緩沖存儲(chǔ)器塊以便改進(jìn)處理器性能。緩沖303是保持最可能使用的存儲(chǔ) 器數(shù)據(jù)的緩存線路的高速緩沖器。典型的緩存線路是64、128或256字節(jié)的存儲(chǔ)器數(shù)據(jù)。各 個(gè)緩存通常被使用來(lái)緩存指令而不是數(shù)據(jù)。通常通過(guò)本領(lǐng)域已知的各種“監(jiān)聽(tīng)”算法來(lái)提供 緩存一致性(存儲(chǔ)器和緩存中的線路的副本的同步)。處理器系統(tǒng)的主存儲(chǔ)器105通常稱(chēng) 為緩存。在具有4級(jí)緩存303的處理器系統(tǒng)中,主存儲(chǔ)器105有時(shí)稱(chēng)為第5級(jí)(L5)緩存, 既然通常其更快并僅保持計(jì)算機(jī)系統(tǒng)可用的非易失性存儲(chǔ)器(DASD、盒帶等)的一部分。主 存儲(chǔ)器105 “緩存”由操作系統(tǒng)從主存儲(chǔ)器頁(yè)入的和頁(yè)出的數(shù)據(jù)頁(yè)面。程序計(jì)數(shù)器(指令計(jì)數(shù)器)311跟蹤要執(zhí)行的當(dāng)前指令的地址。在z/Architecture 處理器中的程序計(jì)數(shù)器是64位,并可以截?cái)酁?1或24位以支持先前的尋址局限。程序計(jì) 數(shù)器典型地包括在計(jì)算機(jī)的PSW(程序狀態(tài)字)中,以便其在上下文切換期間持續(xù)。因此, 處理中的程序(具有程序計(jì)數(shù)器值)可例如由操作系統(tǒng)(從程序環(huán)境到操作系統(tǒng)環(huán)境的上 下文切換)來(lái)中斷。程序的PSW在程序不激活時(shí)維持程序計(jì)數(shù)器值,在操作系統(tǒng)執(zhí)行時(shí)使 用操作系統(tǒng)的程序計(jì)數(shù)器(在PSW中)。典型地,程序計(jì)數(shù)器增加等于當(dāng)前指令的字節(jié)數(shù) 的量。RISC(縮減的指令集計(jì)算)指令典型地是固定長(zhǎng)度,而CISC(復(fù)雜指令集計(jì)算)指 令典型地是可變長(zhǎng)度。IBMz/Architecture的指令是具有長(zhǎng)度為2、4、6字節(jié)的CISC指令。 程序計(jì)數(shù)器311通過(guò)例如上下文切換操作或分支指令的分支選擇操作來(lái)修改。在上下文切 換操作中,當(dāng)前程序計(jì)數(shù)器值與其他關(guān)于執(zhí)行的程序的狀態(tài)信息(例如條件碼)一起存儲(chǔ) 在程序狀態(tài)字(PSW)中,加載新的程序計(jì)數(shù)器值來(lái)指向要執(zhí)行的新的程序模塊的指令。通 過(guò)將分支指令的結(jié)果加載入程序計(jì)數(shù)器311,執(zhí)行分支選擇操作以便允許程序進(jìn)行判斷或 在程序中進(jìn)行循環(huán)。典型地,使用指令提取單元305來(lái)代表處理器106提取指令。提取單元提取“下一 順序指令”、分支選擇指令的目標(biāo)指令、或上下文切換后的程序的第一指令?,F(xiàn)代的指令提 取單元通?;诳赡苁褂妙A(yù)提取指令的概率使用預(yù)提取技術(shù)來(lái)推測(cè)性預(yù)提取指令。例如, 提取單元可提取16字節(jié)的指令,其包括下一順序指令和附加的字節(jié)的另外順序指令。提取的指令于是由處理器106來(lái)執(zhí)行。在實(shí)施例中,提取的指令傳輸至提取單元 的派發(fā)單元306。該派發(fā)單元解碼該指令并將關(guān)于解碼的指令的信息轉(zhuǎn)發(fā)至適當(dāng)?shù)膯卧?307、308、310。執(zhí)行單元307典型地從指令提取單元305接收關(guān)于解碼的算術(shù)指令的信息, 并基于該指令的操作碼來(lái)執(zhí)行操作數(shù)的算術(shù)操作。優(yōu)選地從存儲(chǔ)器105、結(jié)構(gòu)寄存器309或 從要執(zhí)行的指令的即時(shí)字段(immediate field)將操作數(shù)提供給執(zhí)行單元307。當(dāng)存儲(chǔ)執(zhí) 行的結(jié)果時(shí),可存儲(chǔ)在存儲(chǔ)器105、或寄存器309、或其他機(jī)器硬件(例如控制寄存器、PSW寄
8存器等)中。處理器106典型地具有用于執(zhí)行指令的功能的一個(gè)或多個(gè)執(zhí)行單元307、308、 310。參照?qǐng)D4A,執(zhí)行單元307可利用接口邏輯407與結(jié)構(gòu)通用寄存器309、解碼/派發(fā)單元 306、負(fù)載存儲(chǔ)單元310和其它處理器單元401通信。執(zhí)行單元307可使用若干寄存器電路 403,404,405以保持關(guān)于算術(shù)邏輯單元(ALU) 402將操作的信息。ALU執(zhí)行諸如加、減、乘、 除以及邏輯函數(shù)(例如與、或、異或、旋轉(zhuǎn)和移位)的算術(shù)操作。優(yōu)選地,ALU支持設(shè)計(jì)相關(guān) 的專(zhuān)用操作。其他電路可提供其他結(jié)構(gòu)功能408,例如包括條件碼和恢復(fù)支持邏輯。典型 地ALU操作的結(jié)果保持在輸出寄存器電路406中,其可將該結(jié)果轉(zhuǎn)發(fā)至各種其他處理功能。 存在許多處理器單元的設(shè)置,本說(shuō)明書(shū)僅旨在提供一個(gè)實(shí)施例的代表性理解。例如,ADD加指令將在具有算術(shù)和邏輯功能的執(zhí)行單元307中執(zhí)行,而浮點(diǎn)指令將 在具有專(zhuān)用浮點(diǎn)性能的例如浮點(diǎn)執(zhí)行單元中執(zhí)行。優(yōu)選地,執(zhí)行單元對(duì)由指令通過(guò)執(zhí)行操 作數(shù)的操作碼定義功能識(shí)別的操作數(shù)進(jìn)行操作。例如,可以通過(guò)執(zhí)行單元307對(duì)由指令的 寄存器字段識(shí)別的兩個(gè)寄存器309中發(fā)現(xiàn)的操作數(shù)進(jìn)行操作而執(zhí)行ADD指令。執(zhí)行單元307執(zhí)行對(duì)于兩個(gè)操作數(shù)的算術(shù)加法,并將結(jié)果存儲(chǔ)在第三操作數(shù)中, 第三操作數(shù)可以是第三寄存器或兩個(gè)源寄存器中的一個(gè)。執(zhí)行單元優(yōu)選地使用算術(shù)邏輯單 元(ALU)402,其能夠執(zhí)行各種邏輯功能(例如移位、旋轉(zhuǎn)、與、或和異或)以及各種算術(shù)功能 (包括任意加、減、乘和除)。一些ALU 402被設(shè)計(jì)用于縮放操作,一些用于浮點(diǎn)。數(shù)據(jù)可取 決于架構(gòu)是大尾(其中在最高字節(jié)地址處是最低有效字節(jié))或小尾(在最低字節(jié)地址處是 最高有效字節(jié))。IBM z/Architecture是大尾。符號(hào)字段可以是符號(hào)和量級(jí),1的補(bǔ)碼或2 的補(bǔ)碼取決于架構(gòu)。既然2的補(bǔ)碼中的負(fù)數(shù)值或正數(shù)值僅需要在ALU中進(jìn)行加法,所以ALU 不需要設(shè)計(jì)減法性能,因此2的補(bǔ)碼數(shù)是有利的,。數(shù)通常以速記來(lái)描述,其中12位字段定 義4096字節(jié)塊的地址,并通常描述為例如4K字節(jié)(千字節(jié))塊。參照?qǐng)D4B,用于執(zhí)行分支指令的分支指令信息通常發(fā)送到分支單元308,其經(jīng)常 在其他條件操作完成之前使用分支預(yù)測(cè)算法(例如分支歷史表432)來(lái)預(yù)測(cè)該分支的結(jié)果。 在條件操作完成之前將提取當(dāng)前分支指令的目標(biāo)并推測(cè)地執(zhí)行。當(dāng)條件操作完成時(shí),推測(cè) 執(zhí)行的分支指令基于條件操作的條件以及推測(cè)的結(jié)果或完成或丟棄。如果條件代碼滿足分 支指令的要求,則典型的分支指令可以檢測(cè)條件代碼和到目標(biāo)地址的分支,可基于包括在 寄存器字段發(fā)現(xiàn)的數(shù)的一些數(shù)或例如該指令的即時(shí)字段來(lái)計(jì)算目標(biāo)地址。分支單元308可 使用具有多個(gè)輸入寄存器電路427、428、429和輸出寄存器電路430的ALU 426。分支單元 308可與例如通用寄存器309、解碼派發(fā)單元306或其他電路425進(jìn)行通信。一組指令的執(zhí)行可因?yàn)楦鞣N原因而中斷,例如包括由操作系統(tǒng)發(fā)起的上下文切 換、導(dǎo)致上下文切換的程序異常或故障、導(dǎo)致上下文切換的I/O中斷信號(hào)或多個(gè)程序(在 多線程環(huán)境下)的多線程活動(dòng)。優(yōu)選地上下文切換行為存儲(chǔ)關(guān)于當(dāng)前執(zhí)行的程序的狀態(tài)信 息,然后加載關(guān)于調(diào)用的其他程序的狀態(tài)信息。狀態(tài)信息可存儲(chǔ)在例如硬件寄存器或存儲(chǔ) 器中。狀態(tài)信息優(yōu)選地包括指向要執(zhí)行的下一指令的程序計(jì)數(shù)器值、條件代碼、存儲(chǔ)器轉(zhuǎn)換 信息和架構(gòu)寄存器內(nèi)容。上下文切換活動(dòng)可通過(guò)硬件電路、應(yīng)用程序、操作系統(tǒng)程序或固件 代碼(微碼、微微碼或許可的內(nèi)部代碼(LIC))單獨(dú)或組合來(lái)執(zhí)行。處理器根據(jù)指令定義方法訪問(wèn)操作數(shù)。該指令可使用指令的一部分的值來(lái)提供即 時(shí)操作數(shù),可提供明確指向通用寄存器或?qū)S眉拇嫫?例如浮點(diǎn)寄存器)的一個(gè)或多個(gè)寄存器字段。該指令可使用由作為操作數(shù)的操作碼字段識(shí)別的隱含寄存器。該指令可使用操 作數(shù)的存儲(chǔ)器位置。如z/Architecture長(zhǎng)位移功能所例示的那樣,操作數(shù)的存儲(chǔ)器位置可 由寄存器、即時(shí)字段、或寄存器和即時(shí)字段的組合來(lái)提供,其中指令定義基寄存器、索引寄 存器和即時(shí)字段(位移字段),他們被加到一起以提供例如存儲(chǔ)器中的操作數(shù)的地址。如果 沒(méi)有指定,則在此位置典型地意味著在主存儲(chǔ)器(主存儲(chǔ)設(shè)備)中的位置。參考圖4C,處理器使用加載/存儲(chǔ)單元310訪問(wèn)存儲(chǔ)器。該加載/存儲(chǔ)器單元310 可通過(guò)獲得存儲(chǔ)器303中的目標(biāo)操作數(shù)的地址以及在寄存器309中或其他存儲(chǔ)器303位置 中加載操作數(shù)來(lái)執(zhí)行加載操作,或可通過(guò)獲得存儲(chǔ)器303中的目標(biāo)操作數(shù)的地址以及將從 寄存器309或另外的存儲(chǔ)器303位置中獲得的數(shù)據(jù)存儲(chǔ)在存儲(chǔ)器303中的目標(biāo)操作數(shù)位置 來(lái)執(zhí)行存儲(chǔ)操作。加載/存儲(chǔ)單元310可以是推測(cè)的并可以相對(duì)于指令序列是無(wú)序的順序 訪問(wèn)存儲(chǔ)器,然而,加載/存儲(chǔ)單元310必須對(duì)順序執(zhí)行的程序維持指令的顯現(xiàn)。加載/存 儲(chǔ)單元310可與通用寄存器309、解碼/派發(fā)單元306、緩存/存儲(chǔ)器接口 303或其他元件 455通信,并包括各種寄存器電路、ALU 458和控制邏輯463以計(jì)算存儲(chǔ)地址并提供流水線 以保持有序操作。一些操作可以是無(wú)序的,但是加載/存儲(chǔ)單元提供正如在本領(lǐng)域已知的 那樣的使無(wú)序操作對(duì)于程序顯現(xiàn)為有序執(zhí)行。優(yōu)選地,應(yīng)用程序“看到”的地址經(jīng)常稱(chēng)為虛擬地址。虛擬地址有時(shí)稱(chēng)為“邏輯地 址”或“有效地址”。這些虛擬地址是虛擬的,因?yàn)槠渫ㄟ^(guò)各種動(dòng)態(tài)地址轉(zhuǎn)換(DAT) 312技術(shù) 轉(zhuǎn)換中的一個(gè)重定向到物理存儲(chǔ)器位置,該技術(shù)包括但不限于僅使用偏移值對(duì)虛擬地址加 前綴、通過(guò)一個(gè)或多個(gè)轉(zhuǎn)換表轉(zhuǎn)換虛擬地址,該轉(zhuǎn)換表優(yōu)選地包括至少一個(gè)單獨(dú)的段表和 頁(yè)面表或其組合,優(yōu)選地,段表具有指向該頁(yè)面表的入口。在z/Architecure中,提供轉(zhuǎn)換 的層級(jí),其包括區(qū)域第一表格、區(qū)域第二表格、區(qū)域第三表格、段表和可選頁(yè)面表。通常通過(guò) 使用轉(zhuǎn)換后備緩沖器(TLB)來(lái)改進(jìn)地址轉(zhuǎn)換的性能,該TLB包括將虛擬地址映射至關(guān)聯(lián)的 物理存儲(chǔ)器位置的表項(xiàng)。當(dāng)DAT 312使用轉(zhuǎn)換表格轉(zhuǎn)換虛擬地址時(shí)創(chuàng)建表項(xiàng)。于是之后使 用虛擬地址可使用快速TLB的表項(xiàng)而非慢順序轉(zhuǎn)換表格訪問(wèn)??捎砂↙RU(近來(lái)最少使 用)的各種替代算法來(lái)管理TLB內(nèi)容。在處理器是多處理器系統(tǒng)中的處理器的情況下,每個(gè)處理器負(fù)責(zé)為了一致性而保 持共享的資源(例如I/O、緩存、TLB和存儲(chǔ)器)互鎖。典型地,在維持緩存一致性中將使用 “監(jiān)聽(tīng)”技術(shù)。在監(jiān)聽(tīng)環(huán)境中,每個(gè)緩存線路可被標(biāo)記為共享狀態(tài)、專(zhuān)用狀態(tài)、改變狀態(tài)、無(wú)效 狀態(tài)等中的任一狀態(tài)以便于共享。I/O單元304向處理器提供附到外圍設(shè)備(例如包括盒帶、盤(pán)、打印機(jī)、顯示器和網(wǎng) 絡(luò))的裝置。I/O單元經(jīng)常由軟件驅(qū)動(dòng)器提供給計(jì)算機(jī)程序。在諸如來(lái)自IBM的z/Series 的大型機(jī)中,信道適配器和開(kāi)放系統(tǒng)適配器是提供操作系統(tǒng)和外圍設(shè)備之間的通信的大型 機(jī)的I/O單元。如下來(lái)自z/Architeetudre操作原理的以下描述說(shuō)明了計(jì)算機(jī)系統(tǒng)的架構(gòu)圖存儲(chǔ)器計(jì)算機(jī)系統(tǒng)包括主存儲(chǔ)器中的信息,以及尋址、保護(hù)、引用和更改記錄。一些尋址 的特征包括地址的格式,地址空間的概念,地址的各種類(lèi)型,以及將地址的一種類(lèi)型轉(zhuǎn)換為 地址的另一類(lèi)型的方式。一些主存儲(chǔ)器包括固定分配的存儲(chǔ)位置。主存儲(chǔ)器給系統(tǒng)提供直 接可尋址的數(shù)據(jù)快速訪問(wèn)的系統(tǒng)。在處理數(shù)據(jù)和程序前都必須將它們加載(從輸入設(shè)備)到主存儲(chǔ)器中。主存儲(chǔ)器可包括一個(gè)或者多個(gè)更小、更快速訪問(wèn)的緩沖存儲(chǔ)器,有時(shí)也稱(chēng)為緩存。 緩存典型地在物理上與CPU或者I/O處理器相關(guān)聯(lián)。除了性能之外,物理結(jié)構(gòu)的效果和不 同存儲(chǔ)介質(zhì)的使用對(duì)程序來(lái)說(shuō)一般是不可觀察的??蔀橹噶詈蛿?shù)據(jù)操作數(shù)保持分離的緩存。將緩存中的信息保持在被稱(chēng)為緩存塊 或者緩存行(或簡(jiǎn)稱(chēng)為行)的整數(shù)邊界上的連續(xù)字節(jié)中。一個(gè)模型可提供EXTRACT CACHE ATTRIBUTE指令,其返回字節(jié)的緩存行的大小。一個(gè)模型還可提供PREFETCH DATA和 PREFETCH DATA RELATIVE LONG指令,其影響將存儲(chǔ)器的預(yù)取到數(shù)據(jù)或者指令緩存中或者 從緩存中釋放數(shù)據(jù)。存儲(chǔ)器可視為長(zhǎng)的水平的比特串。對(duì)于大部分操作,按照從左向右的順序訪問(wèn)存 儲(chǔ)器。將比特串再分為8個(gè)比特的單元。8個(gè)比特的單元稱(chēng)為字節(jié),其中該字節(jié)是所有信息 格式的基本結(jié)構(gòu)單元。存儲(chǔ)器中每個(gè)比特的位置由唯一的非負(fù)整數(shù)來(lái)標(biāo)識(shí),其中該非負(fù)整 數(shù)為比特位置的地址或者,簡(jiǎn)單地說(shuō),比特地址。相鄰比特位置具有連續(xù)的地址,在左側(cè)從 0開(kāi)始并按照從左向右的順序進(jìn)行處理。地址是無(wú)符號(hào)的二進(jìn)制整數(shù),為24、31或者64比 特。每次在存儲(chǔ)器和CPU或者信道子系統(tǒng)之間傳送一個(gè)比特、或者一組比特的信息。 除非特別規(guī)定,存儲(chǔ)器中的一組比特是由該組最左側(cè)的字節(jié)尋址。該組中字節(jié)的數(shù)量被執(zhí) 行的操作暗示或者明確的規(guī)定。當(dāng)用于CPU操作中時(shí),一組比特稱(chēng)為字段。在每一組比特 中,按照從左向右的順序?qū)Ρ忍剡M(jìn)行編號(hào)。有時(shí)將最左側(cè)的比特稱(chēng)為“高位”比特,將最右 側(cè)比特稱(chēng)為“低位”比特。然而,比特?cái)?shù)量不是存儲(chǔ)器地址。只有字節(jié)能夠被尋址。為了操 作存儲(chǔ)器中字節(jié)的各比特,需要訪問(wèn)全部字節(jié)。從左到右,字節(jié)中的比特的編號(hào)從0到7。 對(duì)于24比特地址,地址中的比特可編號(hào)為8-31或者40-63,對(duì)于31比特地址,地址中的比 特可編號(hào)為1-31或者33-63 ;對(duì)于64比特地址它們編號(hào)為0_63。在多個(gè)字節(jié)的任意固定 長(zhǎng)度格式中,構(gòu)成格式的比特從0開(kāi)始順序編號(hào)。為了錯(cuò)誤檢測(cè)的目的,更優(yōu)選地為了糾錯(cuò) 的目的,隨同每個(gè)字節(jié)或者一組字節(jié)發(fā)送一個(gè)或者多個(gè)檢測(cè)比特。這樣的檢測(cè)比特通過(guò)機(jī) 器自動(dòng)產(chǎn)生并不能直接被程序控制。存儲(chǔ)器容量用字節(jié)數(shù)量來(lái)表示。當(dāng)存儲(chǔ)器操作數(shù)字段 的長(zhǎng)度由指令的操作碼來(lái)暗示時(shí),該字段具有固定長(zhǎng)度,其可以是1、2、4、8或者16個(gè)字節(jié)。 較大的字段意味著一些指令。當(dāng)存儲(chǔ)器操作數(shù)字段的長(zhǎng)度不是暗示的而是明確確定的,則 字段具有可變長(zhǎng)度??勺冮L(zhǎng)度操作符可通過(guò)一個(gè)字節(jié)的增加來(lái)改變長(zhǎng)度。當(dāng)信息放置在存 儲(chǔ)器中時(shí),即使到存儲(chǔ)器的物理路徑的寬度大于存儲(chǔ)字段的長(zhǎng)度,僅僅這些字節(jié)位置的內(nèi) 容被替換為包括在指定字段中的內(nèi)容。特定信息單元必須放置在存儲(chǔ)器的整數(shù)邊界上。當(dāng)信息單元的存儲(chǔ)地址是字節(jié)單 元的長(zhǎng)度的倍數(shù)時(shí),邊界被稱(chēng)為信息單元的整數(shù)。在整數(shù)邊界上給2、4、8和16字節(jié)的字段 特定的命名。半字是在兩字節(jié)邊界上兩個(gè)連續(xù)字節(jié)的組,并且是指令的基本構(gòu)成塊。字是 四字節(jié)邊界上四個(gè)連續(xù)字節(jié)的組。雙字是在八字節(jié)邊界上八個(gè)連續(xù)字節(jié)的組。四字是在16 字邊界上16個(gè)連續(xù)字節(jié)的組。當(dāng)存儲(chǔ)器地址指定半字、字、雙字和四字時(shí),地址的二進(jìn)制表 示分別包括一個(gè)、兩個(gè)、三個(gè)或者四個(gè)最右側(cè)的0比特。指令必須是兩字節(jié)的整數(shù)邊界。大 部分指令的存儲(chǔ)器操作數(shù)不具有邊界對(duì)齊要求。在執(zhí)行用于指令和數(shù)據(jù)操作數(shù)的分離的高速緩沖存儲(chǔ)器的模型中,如果將程序存儲(chǔ)到隨后從中提取指令的高速緩沖存儲(chǔ)器行中,無(wú)論所述存儲(chǔ)是否改變隨后提取的指令, 可能會(huì)經(jīng)歷明顯的延遲。指令典型地,CPU的操作通過(guò)存儲(chǔ)器中的指令控制,所述指令每次按照存儲(chǔ)器地址上升 的順序從左到右進(jìn)行執(zhí)行。順序操作可由分支、加載PSW、中斷、SIGNAL PR0CESS0R(信號(hào)處 理器)命令或者人工干預(yù)而發(fā)生變化。優(yōu)選地,指令包括兩個(gè)主要部分·操作碼(opcode),其指定要執(zhí)行的操作·可選的,參與的操作數(shù)的指定。z/Architecture的指令格式如圖5A-5F所示。指令可僅提供操作碼501,或者提 供操作碼和各種字段,后者包括用于對(duì)寄存器或者存儲(chǔ)器中的操作數(shù)進(jìn)行定位的即時(shí)操作 數(shù)或者寄存器區(qū)分符。操作碼能夠向硬件指示可使用的默認(rèn)資源(操作數(shù)等),諸如一個(gè)或 者多個(gè)通用寄存器(GPR)。操作數(shù)可分為3類(lèi)位于寄存器中的操作數(shù),即時(shí)操作數(shù),和存 儲(chǔ)器中的操作數(shù)。操作數(shù)可明確或者暗示地指定。寄存器操作數(shù)可位于通用的、浮點(diǎn)的、訪 問(wèn)或控制寄存器中,其具有由操作碼標(biāo)識(shí)寄存器的類(lèi)型。包括操作數(shù)的寄存器通過(guò)識(shí)別指 令中被稱(chēng)為R字段的4比特字段的寄存器來(lái)進(jìn)行指定。對(duì)于一些指令,操作數(shù)位于默認(rèn)指 定的寄存器中,寄存器由操作碼來(lái)暗示。即時(shí)操作數(shù)包括在指令中,并且包括即時(shí)操作數(shù)的 8比特、16比特、32比特字段被稱(chēng)為I字段。存儲(chǔ)器中的操作數(shù)可具有暗示的長(zhǎng)度;可被比 特掩碼所指定;可被指令中被稱(chēng)為L(zhǎng)字段的4比特或者8比特長(zhǎng)度的說(shuō)明所指定;或者具有 由通用寄存器的內(nèi)容所指定的長(zhǎng)度。存儲(chǔ)器中操作數(shù)的地址通過(guò)將通用寄存器的內(nèi)容用作 地址的一部分的格式來(lái)指定。這樣能夠通過(guò)使用縮寫(xiě)的記號(hào)來(lái)指定完整的地址;通過(guò)使用指令來(lái)進(jìn)行地址操作,其中所述指令使用用于操作數(shù)的通用寄存器;通過(guò)程序方式修改地址而不改變指令流;通過(guò)直接使用從其它程序接收的地址來(lái)獨(dú)立于數(shù)據(jù)區(qū)域的位置進(jìn)行操作。用來(lái)引用存儲(chǔ)器的地址可包括在由指令中的R字段指定的寄存器中,也可分別從 指令中的B、X和D字段指定的基本地址、索引和位移進(jìn)行計(jì)算。當(dāng)CPU為訪問(wèn)寄存器模式 時(shí),除了用于指定地址,B字段或者R字段還可指定訪問(wèn)寄存器。為了描述指令的執(zhí)行,優(yōu) 選地將操作數(shù)指定為第一和第二操作數(shù),并且在一些情況下包括第三和第四操作數(shù)。一般 來(lái)說(shuō),兩個(gè)操作數(shù)參與指令執(zhí)行,并且結(jié)果替換第一操作數(shù)。指令在長(zhǎng)度上為1個(gè)、2個(gè)或者3個(gè)半字,并且必然位于存儲(chǔ)器中半字邊界上。參 照?qǐng)D5A-5F所描述的指令格式,每個(gè)指令是25個(gè)基本格式中的一個(gè)E 501,I 502, RI 503 504,RIE 505 551 552 553 554,RIL 506507,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,SIL 556,SIY 532,SS 533 534 535 536 537,SSE 541 和 SSF 542,其 具有RRF的3個(gè)變型,RI,RIL, RS和RSY的2個(gè)變型,RIE和SS的5個(gè)變型。一般說(shuō)來(lái),格式名稱(chēng)指示了參與操作的操作數(shù)的分類(lèi)以及字段的一些細(xì)節(jié)· RIS指示寄存器和即時(shí)操作以及存儲(chǔ)器操作?!?RRS指示寄存器和寄存器操作以及存儲(chǔ)器操作。
12
· SIL指示利用16比特的即時(shí)字段的存儲(chǔ)器和即時(shí)操作。在I、RR、RS、RSI、RX、SI和SS格式中,指令的第一字節(jié)包括操作碼。在E、RRE、 RRF、S、SIL和SSE格式中,指令的頭兩個(gè)字節(jié)包括操作碼,除了在S格式的一些指令中,操作 碼僅在第一字節(jié)中。在RI和RIL格式中,操作碼在指令的第一字節(jié)和比特位置12-15中。 在1 記、1 13、1 、1 1^、1 ¥、1 、!》^、!》^和SIY格式中,操作碼在指令的第一字節(jié)和第6字 節(jié)中。操作碼的第一字節(jié)或者僅有字節(jié)的頭兩個(gè)比特指定指令的長(zhǎng)度和格式,如下所述在RR、RRE、RRF、RRR、RX、RXE、RXF、RXY、RS、RSY、RSI、RI、RIE 和 RIL 格式中,由 Rl 字段指定的寄存器內(nèi)容被稱(chēng)為第一操作數(shù)。有時(shí)將包括第一操作數(shù)的寄存器稱(chēng)為“第一操 作數(shù)位置”,有時(shí)稱(chēng)為“寄存器R1”。在RR、RRE、RRF和RRR格式中,R2字段指定包括第二操 作數(shù)的寄存器,并且R2字段可指定與Rl字段相同的寄存器。在RRF、RXF、RS、RSY、RSI和 RIE格式中,R3字段的使用依賴(lài)于指令。在RS和RSY格式中,R3字段替換為指定掩碼的M3 字段。R字段指定通用指令中的通用寄存器或者訪問(wèn)寄存器,控制指令中的通用寄存器,以 及浮點(diǎn)指令中的浮點(diǎn)寄存器或者通用寄存器。對(duì)于通用寄存器和控制寄存器,根據(jù)指令,寄 存器操作數(shù)位于64比特寄存器的比特位置32-63或者占用全部寄存器。在I格式中,8比特即時(shí)數(shù)據(jù)字段的內(nèi)容,指令的I字段直接用作操作數(shù)。在SI格 式中,8比特即時(shí)數(shù)據(jù)字段的內(nèi)容,指令的12字段直接用作第二操作數(shù)。Bl和Dl字段指定 長(zhǎng)度為1個(gè)字節(jié)的第一操作數(shù)。在SIY格式中,操作是相同的,除了使用DHl和DLl字段而 并非是Dl字段之外。在RI格式中對(duì)于指令A(yù)DD HALFffORD IMMEDIATE,COMPARE HALFffORD IMMEDIATE、LOAD HALFffORD IMMEDIATE、和 MULTIPLY HALFffORD IMMEDIATE,根據(jù)指令,指令 的16比特的12字段內(nèi)容直接用作有符號(hào)的二進(jìn)制整數(shù),并且Rl字段指定長(zhǎng)度為32或者 64比特的第一操作數(shù)。對(duì)于指令TEST UNDER MASK(TMHH, TMHL, TMLH, TMLL),將12字段的 內(nèi)容用作掩碼,并且Rl字段指定長(zhǎng)度為64比特的第一操作符。對(duì)于指令I(lǐng)NSERT IMMEDIATE, AND IMMEDIATE, OR IMMEDIATE,禾口 LOAD LOGICAL IMMEDIATE, 12字段的內(nèi)容用作無(wú)符號(hào)的二進(jìn)制整數(shù)或者邏輯值,并且Rl字段指定長(zhǎng)度為 64比特的第一操作數(shù)。對(duì)于RI和RSI格式中的相對(duì)分支指令,16比特12字段的內(nèi)容用作 指定半字?jǐn)?shù)量的有符號(hào)的二進(jìn)制整數(shù)。當(dāng)增加到分支指令的地址中時(shí),該數(shù)量指定分支地 址。對(duì)于RIL格式中的相對(duì)分支指令,12字段為32比特并以相同的方式使用。對(duì)于RI和RSI格式中的相對(duì)分支指令,16比特12字段的內(nèi)容用作指定半字?jǐn)?shù)量 的有符號(hào)的二進(jìn)制整數(shù)。當(dāng)增加到分支指令的地址中時(shí),該數(shù)量指定分支地址。對(duì)于RIL格 式中的相對(duì)分支指令,12字段為32比特并以相同的方式使用。對(duì)于RIE格式指令COMPARE IMMEDIATE AND BRANCH RELATIVE 和 COMPARE LOGICA IMMEDIATE AND BRANCH RELATIVE, 8比特12字段的內(nèi)容直接用作第二操作符。對(duì)于RIE格式指令COMPARE IMMEDIATE AND BRANCH, COMPARE IMMEDIATE AND TRAP, COMPARE LOGICAL IMMEDIATE AND BRANCH,和 COMPARE LOGICAL IMMEDIATE AND TRAP,16比特12字段的內(nèi)容直接用作第二操作數(shù)。對(duì)于 RIE格式指令COMPARE AND BRANCH RELATIVE, COMPARE IMMEDIATE AND BRANCH RELATIVE, COMPARE LOGICAL AND BRANCH RELATIVE,禾口 COMPARE LOGICALIMMEDIATE AND BRANCH RELATIVE, 16比特14字段的內(nèi)容直接用作指定半字?jǐn)?shù)量的有符號(hào)的二進(jìn)制整數(shù),其中將多 個(gè)半字增加到指令的地址中以形成分支地址。對(duì)于RIL 格式指令 ADD IMMEDIATE, ADD LOGICAL IMMEDIATE, ADD LOGICAL WITHSIGNED IMMEDIATE, COMPARE IMMEDAITE, COMPARE LOGICAL IMMEDIATE, LOAD IMMEDIATE, 和MULTIPLY SINGLE IMMEDIATE, 32比特12字段的內(nèi)容直接用作第二操作數(shù)。對(duì)于RIS格式指令,8比特12字段的內(nèi)容直接用作第二操作數(shù)。在SIL格式中,16 比特12字段的內(nèi)容直接用作第二操作數(shù)。如下所述,Bl和Dl字段指定第一操作數(shù)。在RSL、SI、SIL、SSE和大部分SS格式中,將由Bl字段指定的通用寄存器的內(nèi)容增 加到Dl字段的內(nèi)容以形成第一操作數(shù)地址。在RS、RSY、S、SIY和SSE格式中,將由B2字段 指定的通用寄存器的內(nèi)容增加到D2字段或者DH2和DL2字段的內(nèi)容以形成第二操作數(shù)地 址。在RX、RXE、RXF和RXY格式中,將由X2和B2字段指定的通用寄存器的內(nèi)容增加到D2 字段或者DH2和DL2字段的內(nèi)容以形成第二操作數(shù)地址。在RIS和RRS格式中,并在一個(gè) SS格式中,將由B4字段指定的通用寄存器的內(nèi)容增加到D4字段的內(nèi)容以形成第四操作數(shù) 地址。在具有單一的,8比特長(zhǎng)度字段的SS格式中,對(duì)于指令A(yù)ND(NC),EXCLUSIVE OR (XC),MOVE (MVC),MOVE NUMRICS, MOVE ZONES 和 OR (OC),L 指定到由第一操作數(shù)地址指定 的字節(jié)右側(cè)的附加操作數(shù)字節(jié)的數(shù)量。因此,對(duì)應(yīng)于L的0-255的長(zhǎng)度代碼,第一操作數(shù)的 字節(jié)長(zhǎng)度為1-256。存儲(chǔ)器結(jié)果替換第一操作數(shù)并且決不存儲(chǔ)在由地址和長(zhǎng)度指定的字段 外部。在該格式中,第二操作數(shù)與第一操作數(shù)具有相同的長(zhǎng)度。前面定義的多個(gè)變量可應(yīng) 用于 EDIT,EDIT AND MARK, PACK ASCII, PACK UNICODE, TRANSLATE, TRANSLATE AND TEST, UNPACK ASCII,和 UNPACK UNICODE。在具有兩個(gè)長(zhǎng)度字段的SS格式中,并在RSL格式中,Ll指定到由第一操作數(shù)地址 指定的字節(jié)右側(cè)的附加操作數(shù)字節(jié)的數(shù)量。因此,對(duì)應(yīng)于Ll的0-15的長(zhǎng)度代碼,第一操作 數(shù)的字節(jié)長(zhǎng)度為1-16。相似地,L2指定到由第二操作數(shù)地址指定的位置右側(cè)的附加操作數(shù) 字節(jié)的數(shù)量。結(jié)果替換第一操作數(shù),并且決不存儲(chǔ)在由地址和長(zhǎng)度指定的字段外部。如果第 一操作數(shù)長(zhǎng)于第二操作數(shù),第二操作數(shù)在左側(cè)延伸并用0補(bǔ)齊到第一操作數(shù)的長(zhǎng)度。該延 伸不修改存儲(chǔ)器中的第二操作數(shù)。在MOVE TO PRIMARY,MOVE TO SECONDARY,禾口 MOVE WITH KEY指令使用的具有兩個(gè)R字段的SS格式中,由Rl字段指定的通用寄存器的內(nèi)容是被稱(chēng)為 真實(shí)長(zhǎng)度的32比特?zé)o符號(hào)的值。操作數(shù)均具有被稱(chēng)為有效長(zhǎng)度的長(zhǎng)度。有效長(zhǎng)度等于真 實(shí)長(zhǎng)度或者256,以較小者為準(zhǔn)。指令設(shè)置條件代碼以便于程序設(shè)計(jì)循環(huán)以移動(dòng)由真實(shí)長(zhǎng)度 所指定的字節(jié)的全部數(shù)量。具有兩個(gè)R字段的SS格式還可用于指定寄存器的范圍和用于 LOAD MULTIPLE DISJOINT指令的兩個(gè)存儲(chǔ)器操作數(shù),還用于指定一個(gè)或者兩個(gè)寄存器和用 于PERFORM LOCKED OPERATION指令的一個(gè)或者兩個(gè)存儲(chǔ)器操作數(shù)。任何一個(gè)Bi,B2, Xl或者B4字段中的0指示缺少相應(yīng)的地址成分,對(duì)于缺少的成 分,0用于通知中間的總和,而不考慮通用寄存器0的內(nèi)容。0的替換不具有特別的意義。當(dāng)前PSW的比特31和32是尋址模式比特。比特31是擴(kuò)展尋址模式比特,比特32 是基本尋址模式比特。這些比特控制由地址產(chǎn)生的有效地址的大小。在當(dāng)前PSW的比特31 和32都為0時(shí),CPU處于24比特尋址模式,并且產(chǎn)生24比特指令和操作數(shù)有效地址。在 當(dāng)前PSW的比特31為0并且比特32為1時(shí),CPU為31比特尋址模式,并產(chǎn)生31比特指令 和操作數(shù)有效地址。在當(dāng)前PSW的比特31和32都是1時(shí),CPU為64比特尋址模式,并產(chǎn) 生64比特指令和操作數(shù)有效地址。由CPU執(zhí)行的指令包括指令和操作數(shù)的地址的產(chǎn)生。當(dāng)從由當(dāng)前PSW指定的位置中提取指令時(shí),使得指令地址增加指令中字節(jié)的數(shù)量,并執(zhí)行指令。然后,通過(guò)使用指令地址的新值重復(fù)相同的步驟以提取序列中的下一指 令。在24比特尋址模式中,指令地址回繞,其中在指令地址224_2的半字被指令地址0的半 字所跟隨。因此,在24比特尋址模式中,作為更新指令地址的結(jié)果,PSW比特位置104的任 何執(zhí)行都會(huì)丟失。在31比特和64比特尋址模式中,指令地址相似地回繞,其中在指令地址 231-2或者264-2的半字分別被指令地址0的半字所跟隨。PSW比特位置97或者64的執(zhí)行 會(huì)丟失。從中間值導(dǎo)出引用存儲(chǔ)器的操作數(shù)地址,其中中間值包括在由指令中的R字段指 定的寄存器中,也可由三個(gè)二進(jìn)制數(shù)(基礎(chǔ)地址,索引和位移)的總和進(jìn)行計(jì)算。基礎(chǔ)地址 (B)是包括在由指令中被稱(chēng)為B字段的四比特字段中的程序所指定的通用寄存器的64比特 數(shù)?;A(chǔ)地址可用作獨(dú)立地給每個(gè)程序和數(shù)據(jù)區(qū)尋址的方式。在陣列類(lèi)型的計(jì)算中,可指 定陣列的位置,并在記錄類(lèi)型的處理中,其可識(shí)別記錄?;A(chǔ)地址為整個(gè)存儲(chǔ)器提供尋址。 基礎(chǔ)地址還可用作索引。索引⑴是包括在由指令中被稱(chēng)為X字段的4比特字段中的程序所指定的通用寄 存器的64比特?cái)?shù)。其僅包括在由RX-,RXE-,和RXY-格式指令指定的地址中。RX-,RXE-, RXF-和RXY-格式指令允許雙索引也就是說(shuō),索引可用于在陣列中提供元素的地址。位移⑶是包括在指令中被稱(chēng)為D字段的字段中的12比特或者20比特?cái)?shù)。12比 特位移是無(wú)符號(hào)的,并提供多達(dá)4,095字節(jié)的相對(duì)尋址,超出了由基礎(chǔ)地址指定的位置。20 比特的位移是有符號(hào)的,并提供超出了基礎(chǔ)地址位置的多達(dá)524,287字節(jié)的相對(duì)尋址,或 者提供在此之前的524,288字節(jié)。在陣列類(lèi)型的計(jì)算中,位移可用于指定與元素相關(guān)的多 個(gè)條目的一個(gè)。在處理記錄中,位移可用于標(biāo)識(shí)記錄中的條目。12比特位移在特定格式的 指令的比特位置20-31中。在一些格式的指令中,第二個(gè)12比特位移也在該指令的比特位 置36-47中。20比特位移僅位于RSY,RXY或者SIY格式的指令中。在這些指令中,D字段包括 比特位置20-31中的DL(低)字段和比特位置32-39中的DH(高)字段。當(dāng)安裝長(zhǎng)位移工 具時(shí),通過(guò)將DH字段添加到DL字段內(nèi)容的左側(cè)來(lái)形成位移的數(shù)值。當(dāng)沒(méi)有安裝長(zhǎng)位移工 具時(shí)通過(guò)將8個(gè)0比特添加到DL字段內(nèi)容的左側(cè)來(lái)形成位移的數(shù)值,并忽略DH字段的內(nèi)容。在形成中間總和的過(guò)程中,將基礎(chǔ)地址和索引看作為64比特的二進(jìn)制整數(shù)。將12 比特位移看作為12比特?zé)o符號(hào)的二進(jìn)制整數(shù),并將52個(gè)0添加在左側(cè)。將20比特位移看 作為20比特有符號(hào)的二進(jìn)制整數(shù),并且在左側(cè)添加等于有符號(hào)的比特的44比特。這三個(gè) 相加為64比特的二進(jìn)制數(shù),并忽略溢出。該和總是64比特長(zhǎng),并用作中間值以形成所產(chǎn)生 的地址。中間值的比特編號(hào)為0-63。在任何Bi,B2, X2或者B4字段中的0指示相應(yīng)地址 元素的缺失。對(duì)于缺失的元素,使用0來(lái)形成中間和,而不考慮通用寄存器0的內(nèi)容。0的 位移沒(méi)有特別的意義。當(dāng)指令說(shuō)明指定由R字段所指定的通用寄存器的內(nèi)容為存儲(chǔ)器中的操作數(shù)進(jìn)行 尋址時(shí),寄存器內(nèi)容用作64比特中間值。指令能同時(shí)將同一個(gè)通用寄存器指定用于地址計(jì)算,并作為操作數(shù)的位置。地址 計(jì)算在寄存器被操作而改變(如果存在)之前完成。除非在各自指令定義中有其它指示, 通用操作數(shù)地址指示存儲(chǔ)器中操作數(shù)最左側(cè)的字節(jié)。
所產(chǎn)生的操作數(shù)地址通常是64比特長(zhǎng),比特編號(hào)為0-63。所產(chǎn)生地址從中間值 獲取的方式取決于當(dāng)前的尋址模式。在24比特尋址模式中,中間值的比特0-39被忽略,強(qiáng) 制將所產(chǎn)生地址的比特0-39設(shè)為0,中間值的比特40-63變成所產(chǎn)生地址的比特40-63。 在31比特尋址模式中,中間值的比特0-32被忽略,強(qiáng)制將所產(chǎn)生地址的比特0-32設(shè)為0, 中間值的比特33-63變成所產(chǎn)生地址的比特33-63。在64比特尋址模式中,中間值的比特 0-63變成所產(chǎn)生地址的比特0-63。負(fù)值可用在索引和基礎(chǔ)地址寄存器中。在31比特尋址 模式中這些值的比特0-32被忽略,在24比特尋址模式中比特0-39被忽略。對(duì)于分支指令,在使用分支時(shí)要被執(zhí)行的下一個(gè)指令的地址被稱(chēng)為分支地址。根 據(jù)分支指令,指令格式可以是RR, RRE, RX, RXY,RS, RSY,RSI,RI, RIE,或者RIL0在RS, RSY, RX和RXY格式中,分支地址被基礎(chǔ)地址、位移所指定,在RX和RXY格式中,分支地址被索引 所指定。在這些格式中,中間值的產(chǎn)生與操作數(shù)地址中間值的產(chǎn)生使用相同的規(guī)則。在RR 和RRE格式中,由R2字段指定的通用寄存器的內(nèi)容用作從中形成分支地址的中間值。通用 寄存器0不能被指定為包括分支地址。R2字段中的值0促使指令不分支的執(zhí)行。相對(duì)分支指令為RSI,RI,RIE和RIL格式。在用于相對(duì)分支指令的RSI,RI和RIE 格式中,將12字段的內(nèi)容看作為指定半字?jǐn)?shù)量的16比特的有符號(hào)的二進(jìn)制整數(shù)。在RIL 格式中,將12字段的內(nèi)容看作為指定半字?jǐn)?shù)量的32比特的有符號(hào)的二進(jìn)制整數(shù)。分支地 址是由增加到相對(duì)分支指令地址的12字段指定的半字的數(shù)量。用于RSI,RI, RIE,或者RIL格式的相對(duì)分支指令的64比特中間值是兩個(gè)加數(shù)的 和,并忽略比特位置0的溢出。在RSI,RI或者RIE格式中,第一加數(shù)是12字段的內(nèi)容, 其具有附加到右側(cè)的一個(gè)0比特,和等于附加在左側(cè)的內(nèi)容的符號(hào)比特的47比特,除了用 于 COMPARE AND BRANCH RELATIVE, COMPARE IMMEDIATE AND BRANCH RELATIVE, COMPARE LOGICAL AND BRANCH RELATIVE 和 COMPARE LOGICAL IMMEDIATE AND BRANCH RELATIVE 之 外,第一加數(shù)是14字段的內(nèi)容,其具有上面描述的添加到12字段中的比特。在RIL格式 中,第一加數(shù)是12字段的內(nèi)容,其具有附加在右側(cè)的一個(gè)0比特,以及等于附加在左側(cè)的 內(nèi)容的符號(hào)比特的31比特。在所有格式中,第二加數(shù)是分支指令的64比特地址。在將更 新分支指令的地址以尋址下一連續(xù)指令之前,該地址是PSW中的指令地址,或者如果使用 EXE⑶TE,則它是EXE⑶TE指令的目標(biāo)的地址。如果在24比特或者34比特尋址模式中使用 EXE⑶TE,分支指令的地址是分別具有40或者33個(gè)0,并添加在左側(cè)。分支地址總是為64比特長(zhǎng),其中比特編號(hào)為0-63。分支地址替換當(dāng)前PSW的比特 64-127。從中間值獲得分支地址的方式取決于尋址模式。對(duì)于那些改變尋址模式的分支指 令,使用新的尋址模式。在24比特尋址模式中,忽略中間值的比特0-39,將分支地址的比特 0-39設(shè)為0,將中間值的比特40-63變成分支地址的比特40-63。在31比特尋址模式中,忽 略中間值的比特0-32,將分支地址的比特0-32設(shè)為0,將中間值的比特33-63變成分支地 址的比特33-63。在64比特尋址模式中,中間值的比特0-63變成分支地址的比特0_63。對(duì)于幾個(gè)分支指令,分支取決于滿足指定的條件。當(dāng)條件不滿足時(shí),不采用分支, 繼續(xù)執(zhí)行正常的連續(xù)指令,并不使用分支地址。當(dāng)采用分支時(shí),分支地址的比特0-63替換 當(dāng)前PSW的比特64-127。分支地址不用于作為分支操作部分訪問(wèn)存儲(chǔ)器。雖然奇數(shù)的分支 地址的說(shuō)明異常和由于提取分支位置處的指令的訪問(wèn)異常不被視為分支操作的一部分,但 是可將其視為與執(zhí)行分支位置處指令相關(guān)的異常。
諸如BRANCH AND SAVE的分支指令能夠指定用于分支地址計(jì)算的相同的通用寄存 器并作為操作數(shù)的位置。在執(zhí)行剩余的操作之前完成分支地址的計(jì)算。在第4章“控制”中描述的程序狀態(tài)字(PSW)包括請(qǐng)求正確的程序執(zhí)行的信息。 PSW用于控制指令順序,并用于保持和指示CPU與當(dāng)前被執(zhí)行程序相關(guān)的狀態(tài)。激活的或者 控制PSW被稱(chēng)為當(dāng)前PSW。分支指令執(zhí)行進(jìn)行確定、循環(huán)控制和子程序鏈接的功能。分支指 令通過(guò)將新的指令地址引入到當(dāng)前的PSW中以影響指令順序。16比特12字段的相對(duì)分支 指令允許分支到與分支指令的位置相關(guān)的偏移量最大為正64K-2字節(jié)或者負(fù)64K字節(jié)的位 置,而不使用基礎(chǔ)寄存器。32比特12字段的相對(duì)分支指令允許分支到與分支指令的位置相 關(guān)的偏移量最大為正4G-2字節(jié)或者負(fù)4G字節(jié)的位置,而不使用基礎(chǔ)寄存器。用于進(jìn)行確定的工具由BRANCH ON CONDITION, BRANCH RELATIVE ON CONDITION, 和BRANCH RELATIVE ON CONDITION LONG指令提供。這些指令檢測(cè)反映主要算法,邏輯和 1/0操作結(jié)果的條件碼。包括兩個(gè)比特的條件碼提供4個(gè)可能的條件碼設(shè)置0,1,2和3。任意設(shè)置的特定含義取決于設(shè)置條件碼的操作。例如,條件碼反映諸如0,非0,第 一操作數(shù)高,相同,溢出和子信道忙的條件。一旦設(shè)置,條件碼保持不變,直到由指令進(jìn)行修 改以導(dǎo)致設(shè)置另一條件碼。循環(huán)控制可通過(guò)使用BRANCH ON CONDITION, BRANCH RELATIVE ON CONDITION, 和BRANCH RELATIVE ON CONDITION LONG來(lái)執(zhí)行,以測(cè)試地址算術(shù)和計(jì)數(shù)操作的輸出。對(duì) 于算術(shù)和測(cè)試的一些特別頻繁的組合,提供BRANCH ON COUNT, BRANCH ON INDEX HIGH,和 BRANCH ON INDEX LOW OR EQUAL,并提供這些指令的相關(guān)分支等同物。這些專(zhuān)門(mén)的分支為 這些工作提供了增強(qiáng)的性能。BRANCH AND LINK和BRANCH AND SAVE指令提供當(dāng)不需要改變尋址模式時(shí)的子程 序鏈接。(BRANCH AND SAVE 的討論也適于 BRANCH RELATIVE AND SAVE 禾口 BRANCH RELATIVE AND SAVE LONG。)這些指令不僅允許引入新指令地址,而且保留返回地址和相應(yīng)信息。 返回地址是跟隨存儲(chǔ)器中分支指令的指令地址,除了它是跟隨將分支指令作為其目的的 EXE⑶TE指令的指令地址。BRANCH AND LINK和BRANCH AND SAVE均具有Rl字段。他們利用依賴(lài)于指令的字 段形成分支地址。該指令的操作總結(jié)如下 在24比特尋址模式中,這兩種指令將返回地 址放置在通用寄存器Rl的40-63比特位置中,并保持該寄存器的比特0-31不變。BRANCH AND LINK從當(dāng)前PSW將用于指令的指令長(zhǎng)度代碼以及條件代碼和程序掩碼放置在通用寄 存器Rl的比特位置32-39中,BRANCH AND SAVE在這些比特位置中放入0。 在31比特尋址模式中,這兩種指令均將返回地址放入通用寄存器Rl的比特位置 33-63以及一個(gè)比特位置32中,他們保持該寄存器的比特0-31不變。 在64比特尋址模式中,這兩種指令均將返回地址放入通用寄存器Rl的比特位置 0-63 中。 在任何尋址模式中,這兩種指令在當(dāng)前尋址模式的控制下均生成分支地址。指令 將分支地址的比特0-63放入PSW的比特位置64-127中。在RR格式中,如果指令的R2字 段為0,則這兩種指令均不執(zhí)行分支操作。可以看出,在24比特或31比特尋址模式中,BRANCH AND SAVE將基本尋址模式比 特、PSW的比特32放入通用寄存器Rl的比特位置32中。BRANCH AND LINK在31比特尋址模式中也這樣操作。指令BRANCH AND SAVE AND SET MODE以及BRANCH AND SET MODE用于 當(dāng)在鏈接期間需要尋址模式的改變時(shí)。這些指令具有Rl和R2字段。這些操作總結(jié)如下· BRANCH AND SAVE AND SET MODE 將通用寄存器 Rl 的內(nèi)容與 BRANCH AND SAVE 設(shè)置的相同。此外,指令將擴(kuò)展的尋址模式比特、PSff的比特31放入該寄存器的比特位置 63中。 如果Rl非零,則BRANCH AND SET MODE執(zhí)行如下。在24比特或31比特模式中, 其將PSW的比特32放入通用寄存器Rl的比特位置32中,并保持該寄存器的比特0_31和 33-63不變。注意到,如果該寄存器包含指令地址,則該寄存器的比特63應(yīng)該為0。在64 比特模式中,指令將PSW的比特31 (1)放入通用寄存器Rl的比特位置63中,并保持該寄存 器的比特0-62不變。 當(dāng)R2非零時(shí),這兩種指令設(shè)置尋址模式并如下執(zhí)行分支操作。通用寄存器R2的 比特63放入PSW的比特位置31中。如果比特63為0,則該寄存器的比特32放入PSW的比 特位置32中。如果比特63為1,則PSW的比特32設(shè)置為1。于是在新的尋址模式的控制 下,根據(jù)該寄存器的內(nèi)容生成分支地址,除了該寄存器的比特63看作為0。指令將分支地址 的比特0-63放入PSW的比特位置64-127中。通用寄存器R2的比特63仍保持不變,因此 在進(jìn)入所調(diào)用的程序中可以為1。如果R2與Rl相同,則在指定的通用寄存器中的結(jié)果正如 Rl寄存器所指示的那樣。中斷(上下文切換)中斷機(jī)制允許CPU作為配置之外的、配置中的或在CPU自身中的條件的結(jié)果改變 其狀態(tài)。為了允許快速響應(yīng)高優(yōu)先權(quán)的條件和該類(lèi)型的條件的即時(shí)識(shí)別,將中斷條件分為 6組外部、輸入/輸入、機(jī)器核查、程序、重啟以及監(jiān)視呼叫。中斷包括將當(dāng)前PSW存儲(chǔ)為舊的PSW、存儲(chǔ)識(shí)別中斷原因的信息、以及提取新的 PSW。如新的PSW所指示的那樣來(lái)恢復(fù)處理。存儲(chǔ)在中斷中的舊的PSW通常包括如果不發(fā) 生中斷接下來(lái)執(zhí)行的指令的地址,因此允許恢復(fù)中斷的程序。對(duì)于程序和監(jiān)視呼叫中斷,存 儲(chǔ)的信息還包括識(shí)別最后執(zhí)行的指令的長(zhǎng)度的代碼,因此允許程序響應(yīng)中斷的原因。在用 于正常響應(yīng)是重新執(zhí)行導(dǎo)致中斷的指令的一些程序條件的情況中,指令地址直接識(shí)別最后 執(zhí)行的指令。除了重啟,僅當(dāng)CPU在操作狀態(tài)下可以發(fā)生中斷。重啟中斷可通過(guò)在停止?fàn)顟B(tài)或 操作狀態(tài)中的CPU —起發(fā)生。訪問(wèn)異常被識(shí)別為執(zhí)行與異常關(guān)聯(lián)的指令的一部分。當(dāng)CPU嘗試從不可用位置預(yù) 提取或檢測(cè)一些其他訪問(wèn)異常條件時(shí),沒(méi)有識(shí)別出訪問(wèn)異常,但是分支指令或中斷改變指 令順序,以便不執(zhí)行該指令。因?yàn)橹噶钐崛。總€(gè)指令可導(dǎo)致將被識(shí)別的訪問(wèn)異常。此外, 因?yàn)樵L問(wèn)存儲(chǔ)器中的操作數(shù),可發(fā)生與指令執(zhí)行關(guān)聯(lián)的訪問(wèn)異常。當(dāng)沒(méi)有遭遇異常而不能 提取第一指令半字時(shí)指示由于提取指令而造成的訪問(wèn)異常。當(dāng)指令的第一半字沒(méi)有訪問(wèn)異 常時(shí),可以根據(jù)由指令的頭兩比特指定的指令長(zhǎng)度來(lái)指示對(duì)于另外半字的訪問(wèn)異常;然而, 當(dāng)沒(méi)有訪問(wèn)指令的第二或第三半字就可執(zhí)行操作時(shí),對(duì)未使用的部分是否指示訪問(wèn)異常是 不可預(yù)測(cè)的。既然對(duì)于指令提取的訪問(wèn)異常的指示對(duì)所有指令都是公共的,在單個(gè)指令定 義中就不包含它。除了在指令描述中指示相反的情況,下述的規(guī)則應(yīng)用于與訪問(wèn)操作數(shù)位置關(guān)聯(lián)的
18異常。對(duì)于提取類(lèi)型的操作數(shù),僅對(duì)于需要來(lái)完成操作的操作數(shù)的部分必須指示訪問(wèn)異常。 對(duì)于不需要來(lái)完成操作的提取型操作數(shù)的那些部分是否指示訪問(wèn)異常是不可預(yù)測(cè)的。對(duì)于存儲(chǔ)型操作數(shù),即使能夠完成操作而沒(méi)有使用操作數(shù)的不可用部分,也對(duì)于 整個(gè)操作數(shù)識(shí)別訪問(wèn)異常。在存儲(chǔ)型操作數(shù)的值定義為不可預(yù)測(cè)的情況中,是否指示訪問(wèn) 異常是不可預(yù)測(cè)的。每當(dāng)訪問(wèn)操作數(shù)位置可導(dǎo)致訪問(wèn)異常被識(shí)別時(shí),詞“訪問(wèn)”都包括在指 令說(shuō)明中的程序異常的列表中。該表項(xiàng)還指示哪個(gè)操作數(shù)可導(dǎo)致要識(shí)別的異常以及關(guān)于提 取或存儲(chǔ)訪問(wèn)該操作數(shù)位置的異常是否被識(shí)別。僅對(duì)于為每個(gè)特定指令定義的操作數(shù)的部 分識(shí)別訪問(wèn)異常。當(dāng)CPU嘗試使用無(wú)效操作碼來(lái)執(zhí)行指令時(shí),識(shí)別操作異常。該操作碼可以是無(wú)符 號(hào)的,或具有該操作碼的指令可以不安裝在該CPU上。禁止該操作。指令長(zhǎng)度碼是1、2或 3。由程序中斷代碼OOOlhex (十六進(jìn)制)來(lái)指示操作異常(如果指示同時(shí)發(fā)生的PER事件 則為 0081hex)。一些模型可提供在該公開(kāi)中沒(méi)有描述的指令,例如被提供來(lái)幫助,或作為特定或 共同特性的一部分的指令。因此,在該公開(kāi)中沒(méi)有描述的操作碼不一定導(dǎo)致操作異常被識(shí) 別。此外,這些指令可以導(dǎo)致將建立的操作模式,或可以改變機(jī)器以便影響隨后指令的執(zhí) 行。為了避免導(dǎo)致這樣的操作,僅當(dāng)與操作碼關(guān)聯(lián)的特定功能是期望的時(shí),才應(yīng)該執(zhí)行具有 在該公開(kāi)中沒(méi)有描述的操作碼的指令。當(dāng)以下為真時(shí)識(shí)別說(shuō)明異常1.將1引入PSff的無(wú)符號(hào)比特位置(即,比特位置0、2-4、24_30或33-63中的任 一個(gè))。這作為早期PSW說(shuō)明異常來(lái)處理。2.將1引入PSW的比特位置12。這作為早期PSW說(shuō)明異常來(lái)處理。3.處于下述任何方式的PSW是無(wú)效的a.PSW的比特31是1而比特32是0。b.PSW 的比特31和32是0,用于指示24比特尋址模式,而PSW的比特64-103不全為0。c. PSff的 比特31是0而比特32是1,用于指示31比特尋址模式,而PSW的比特64-96不全為0。這 作為早期PSW說(shuō)明異常來(lái)處理。4. PSff包括奇數(shù)指令地址。5.在需要整數(shù)邊界的指定的指令中操作數(shù)地址沒(méi)有指定這樣的整數(shù)邊界。6.由需要偶數(shù)編號(hào)的寄存器指示的指令的R字段來(lái)指定奇數(shù)編號(hào)的通用寄存器。7.對(duì)于擴(kuò)展的操作數(shù)指定除了 0、1、4、5、8、9、12或13的浮點(diǎn)寄存器。8.十進(jìn)制算術(shù)的乘數(shù)或除數(shù)超過(guò)15個(gè)數(shù)位和符號(hào)。9.在十進(jìn)制乘法或除法中,第一操作數(shù)字段的長(zhǎng)度小于或等于第二操作數(shù)字段的 長(zhǎng)度。10.嘗試執(zhí)行 CIPHER MESSAGE、CIPHER MESSAGE WITH CHAINING、COMPUTE INTERMEDIATE MESSAGE DIGEST、 COMPUTE LAST MESSAGE DIGEST 或 COMPUTE MESSAGE AUTHENTICATION CODE,并且通用寄存器0的比特57-63中的功能代碼包括未分配的或未安 裝的功能代碼。11.嘗試執(zhí)行 CIPHER MESSAGE 或 CIPHER MESSAGE WITH CHAINING, Rl 或 R2 字段
指定奇數(shù)編號(hào)的寄存器或通用寄存器0。12.嘗試執(zhí)行 CIPHER MESSAGE、CIPHER MESSAGE WITH CHAINING、COMPUTEINTERMEDIATE MESSAGE DIGEST或COMPUTE MESSAGE AUTHENTICATION CODE,第二操作數(shù)長(zhǎng) 度不是指定的功能的數(shù)據(jù)塊大小的倍數(shù)。這種說(shuō)明異常條件不應(yīng)用于查詢(xún)功能。13.嘗試執(zhí)行COMPARE AND FORM CODEWORD,以及通用寄存器1、2和3最開(kāi)始不包 括偶數(shù)值。32.嘗試執(zhí)行COMPARE AND SWAP AND STORE,以及存在以下條件中的任一個(gè)·功能代碼指定未分配值?!ご鎯?chǔ)特性指定未分配值?!すδ艽a是0,在字邊界上不指定第一操作數(shù)?!すδ艽a是1,在雙字邊界上不指定第一操作數(shù)?!ぴ谂c存儲(chǔ)值的大小對(duì)應(yīng)的整數(shù)邊界上不指定第二操作數(shù)。33.嘗試執(zhí)行 COMPARE LOGICAL LONG UNICODE 或 MOVE LONG UNICODE,以及通用 寄存器Rl+1或R3+1的內(nèi)容沒(méi)有指定偶數(shù)字節(jié)。34.嘗試執(zhí)行 COMPARE LOGICAL STRING、MOVE STRING 或 SEARCH STRING,通用寄 存器0的32-55位不是全0。35.嘗試執(zhí)行COMPRESSION CALL,通用寄存器0的48-51位具有二進(jìn)制值0000以 及0110-1111中的任一。36.嘗試執(zhí)行 COMPUTE INTERMEDIATE MESSAGE DIGEST, COMPUTE LAST MESSAGE DIGEST 或 COMPUTE MESSAGE AUTHENTICATION CODE,以下中的任一個(gè)為真· R2字段指定奇數(shù)的寄存器或通用寄存器0。·通用寄存器0的第56位不是0。37.嘗試執(zhí)行 CONVERT HFP TO BFP、CONVERT TO FIXED (BFP 或 HFP)或 LOAD FP LNTEGER (HFP),M3字段不指定有效修改器。38.嘗試執(zhí)行D IV IDE TO INTEGER, M4字段不指定有效修改器。39.嘗試執(zhí)行EXE⑶TE,以及目標(biāo)地址為奇數(shù)。40.嘗試執(zhí)行 EXTRACT STACKED STATE,當(dāng) ASN-and-LX-reuse 功能沒(méi)有安裝時(shí),通 用寄存器R2的比特位置56-63中的代碼大于4,以及當(dāng)安裝了該功能時(shí)該代碼大于5。41.嘗試執(zhí)行FIND LEFTMOST ONE,以及Rl字段指定奇數(shù)寄存器。42.嘗試執(zhí)行INVALIDATE DAT TABLE ENTRY,通用寄存器R2的44-51位不為全0。43.嘗試執(zhí)行LOAD FPC,與在FPC寄存器中的未支持的位相應(yīng)的第二操作數(shù)中的 一個(gè)或多個(gè)位為1。44.嘗試執(zhí)行LOAD PAGE-TABLE-ENTRY ADDRESS,指令的M4字段包含非二進(jìn)制 0000-0100的任何值。45.嘗試執(zhí)行LOAD PSW,在第二操作數(shù)地址處的雙字的第12位為0。是否識(shí)別該 異常取決于模型。46.嘗試執(zhí)行MONITOR CALL,指令的比特位置8_11不包含0。47.嘗試執(zhí)行MOVE PAGE,通用寄存器0的比特位置48_51不包含0或者該寄存器 的第52和53位為全1。48.嘗試執(zhí)行PACK ASCII, L2字段大于31。49.嘗試執(zhí)行PACK UNICODE, L2字段大于63或者是偶數(shù)。
50.嘗試執(zhí)行 PERFORM FLOATING POINT OPERATION,通用寄存器 O 的第 32 位為 0, 以及33-63位中的一個(gè)或多個(gè)字段是無(wú)效的或指定未安裝的功能。51.嘗試執(zhí)行PERFORM LOCKED OPERATION,以下任何一個(gè)為真 通用寄存器0 的T比特、比特55為0,以及該寄存器的比特56-63中的功能代碼是無(wú)效的?!ねㄓ眉拇嫫?0的比特32-54不全為0?!ぴ谠L問(wèn)寄存器模式中,對(duì)于導(dǎo)致包含ALET的參數(shù)列表的使用的 功能代碼,R3字段為0。52.嘗試執(zhí)行 PERFORM TIMING FACILITY FUNCTION,以下中的任一為真 通用 寄存器0的比特56不為0?!ねㄓ眉拇嫫?的比特57-63指定未分配的或未安裝的功能代碼。53.嘗試執(zhí)行 PROGRAM TRANSFER 或 I3ROGRAM TRANSFER WITH INSTANCE,以下所有 均為真 在PSW中的擴(kuò)展的尋址模式比特為0?!び芍噶畹腞2字段指示的通用寄存器中 的基本尋址模式比特、比特32為0?!ぴ谙嗤拇嫫髦械闹噶畹刂返谋忍?3-39不全為0。54.嘗試執(zhí)行RESUME PROGRAM,以下中的任一個(gè)為真 在第二操作數(shù)中的PSW 的比特31、32和64-127對(duì)于當(dāng)前PSW中的放置是無(wú)效的。如果以下任何為真,則識(shí)別異 常_比特31和32均為0,以及比特64-103不全為0。-比特31和32分別為0和1,以及 比特64-96不全為0。-比特31和32分別為0禾口 1。-比特127 為 1?!?shù)列表的比特0-12不全為0。55.嘗試執(zhí)行SEARCH STRING UNICODE,通用寄存器的比特32-47不全為0。56.嘗試執(zhí)行 SET ADDRESS SPACE CONTROL 或 SETADDRESS SPACE CONTROL FAST, 第二操作數(shù)地址的比特52和53不全為0。57.嘗試執(zhí)行SET ADDRESSING MODE (SAM 24),PSW中的未更新的指令地址的比特 0-39、PSW的比特64-103不全為0。58.嘗試執(zhí)行SET ADDRESSING MODE (SAM 31),PSW中的未更新的指令地址的比特 0-32、PSW的比特64-96不全為0。59.嘗試執(zhí)行SET CLOCK PR0GRAMABLE FIELD,通用寄存器0的比特32-47不全為 O060.嘗試執(zhí)行SET FPC,與FPC寄存器中的未支持比特相應(yīng)的第一操作數(shù)的一個(gè)或 多個(gè)比特為1。61.嘗試執(zhí)行STORE SYSTEM INFORMATION,通用寄存器0中的功能代碼是有效的, 以下中的任一個(gè)為真·通用寄存器0的比特36-55和通用寄存器1的比特32-47不全為 0?!さ诙僮鲾?shù)地址不對(duì)齊4K字節(jié)邊界。62.嘗試執(zhí)行 TRANSLATE TWO TO ONE 或 TRANSLATE TWO TO TWO,以及通用寄存器 Rl+1中的長(zhǎng)度不指定偶數(shù)個(gè)字節(jié)。63.嘗試執(zhí)行 UNPACK ASCII, Ll 字段大于 31。64.嘗試執(zhí)行UNPACK UNICODE, Ll字段大于63或?yàn)榕紨?shù)。65.嘗試執(zhí)行UPDATE TREE,以及通用寄存器4和5最初的內(nèi)容在24比特或31比 特尋址模式中不是8的倍數(shù),或者在64比特尋址模式中不是16的倍數(shù)。禁止執(zhí)行由舊的 PSW標(biāo)識(shí)的指令。然而,對(duì)于早期PSW說(shuō)明異常(原因1-3),完成引入新的PSW的操作,但是此后立即發(fā)生中斷。優(yōu)選地,指令長(zhǎng)度代碼(ILC)為1、2或3,其用于指示導(dǎo)致異常的指令 的長(zhǎng)度。當(dāng)指令地址為奇數(shù)(在頁(yè)面6-33上的原因4)時(shí),ILC是否為1、2或3是不可預(yù)測(cè) 的。當(dāng)識(shí)別異常時(shí),因?yàn)樵缙赑SW說(shuō)明異常(原因1-3)識(shí)別異常以及通過(guò)LOAD PSff,LOAD PSff EXTENDED,PROGRAM RETURN 或中斷引入異常時(shí),ILC 為 0。當(dāng)異常通過(guò) SET ADDRESSING M0DE(SAM24、SAM31)引入時(shí),ILC 為 1,或如果 SET ADDRESSING MODE 是 EXECUTE 的目標(biāo),則 其為2。當(dāng)異常通過(guò)SET SYSTEM MASK或通過(guò)STORE THEN OR SYSTEM MASK引入時(shí),ILC為 2。使用程序中斷來(lái)報(bào)告在程序執(zhí)行期間出現(xiàn)的異常和事件。程序中斷導(dǎo)致在實(shí)際位 置336-351存儲(chǔ)舊的PSW,并從實(shí)際位置464-479提取新的PSW。通過(guò)中斷代碼來(lái)標(biāo)識(shí)中斷 原因。中斷代碼放置在實(shí)際位置142-143,指令長(zhǎng)度代碼放置在實(shí)際位置141的比特位置 5和6中,其他比特設(shè)置為0,0存儲(chǔ)在實(shí)際位置140。基于同樣的原因,標(biāo)識(shí)中斷的原因的 附加信息存儲(chǔ)在實(shí)際位置144-183。如果安裝了 PER-3工具,則作為程序中斷行為的一部 分,打斷_事件_地址寄存器放置在實(shí)際存儲(chǔ)器位置272-279。除了 PER事件和crypto-操 作異常,由放置在中斷代碼的最右7比特位置的代碼值指示了導(dǎo)致中斷的條件。每次只指 示一個(gè)條件。將中斷代碼的比特0-7設(shè)置為0。通過(guò)將中斷代碼的比特8設(shè)置為1來(lái)指示 PER事件。當(dāng)這是唯一的條件時(shí),將比特0-7和比特9-15也設(shè)置為0。當(dāng)使用另外的程序 中斷條件同時(shí)指示PER事件時(shí),比特8為1,比特0-7和9-15被設(shè)置來(lái)用于其它條件。通過(guò) 0119hex的中斷代碼或在還指示PER事件時(shí)為0199hex來(lái)指示crypto-操作異常。當(dāng)存在相應(yīng)的掩碼比特時(shí),程序中斷僅在該掩碼比特為1時(shí)出現(xiàn)。PSW中的程序掩 碼控制4種異常,F(xiàn)PC寄存器中的IEEE掩碼控制IEEE異常,控制寄存器0中的比特33控 制SET SYSTEM MASK是否導(dǎo)致特定操作異常,控制寄存器8中的比特48-63控制由于監(jiān)控 事件的中斷,掩碼層級(jí)控制由于PER事件的中斷。當(dāng)任意控制掩碼比特為0時(shí),則忽視該條 件,該條件不能繼續(xù)為未決狀態(tài)。當(dāng)用于程序中斷的新的PSW具有PSW格式錯(cuò)誤并導(dǎo)致異常在指令提取過(guò)程中被識(shí) 別,可發(fā)生一串程序中斷。指示為程序異常的一些條件還可由信道子系統(tǒng)來(lái)識(shí)別,在這種情況下在子信道狀 態(tài)字或擴(kuò)展?fàn)顟B(tài)字中指示該異常。當(dāng)數(shù)據(jù)異常導(dǎo)致程序中斷,在位置147存儲(chǔ)數(shù)據(jù)異常代碼(DXC),在位置144-146 存儲(chǔ)0。DXC識(shí)別各種類(lèi)型的數(shù)據(jù)異常條件。當(dāng)AFP寄存器(加法浮點(diǎn)寄存器)控制比特 (控制寄存器0的比特45)為1時(shí),DXC還放置在浮點(diǎn)控制(FPC)寄存器的DXC字段中。當(dāng) 報(bào)告任何其他程序異常時(shí),F(xiàn)PC寄存器中的DXC字段保持不變。DXC為指示數(shù)據(jù)異常的特定 原因的8比特代碼。DXC 2和3相互是專(zhuān)用的,具有比其他任何DXC高的優(yōu)先級(jí)。因此,例如DXC 2 (BFP 指令)優(yōu)先于任何IEEE異常;以及DXC 3 (DFP指令)優(yōu)先于任何IEEE異?;蚰M的IEEE 異常。作為另外的實(shí)例,如果存在用于DXC 3 (DFP指令)和DXC 1 (AFP寄存器)的條件,則 報(bào)告DXC3。當(dāng)規(guī)格異常和AFP寄存器數(shù)據(jù)異常均應(yīng)用時(shí),不能預(yù)測(cè)報(bào)告哪個(gè)。當(dāng)CPU嘗試引用在配置中不可用的主存儲(chǔ)器位置時(shí),識(shí)別出尋址異常。當(dāng)該位置 未安裝時(shí),當(dāng)存儲(chǔ)單元未在配置中時(shí),或者當(dāng)存儲(chǔ)單元中關(guān)電時(shí),主存儲(chǔ)器位置在配置中不 可用。指定在配置中不可用的存儲(chǔ)器位置的地址稱(chēng)為無(wú)效的。當(dāng)指令地址是無(wú)效的時(shí),操
22作被禁止。類(lèi)似的,當(dāng)EXECUTE的目標(biāo)指令的地址是無(wú)效的時(shí),該操作也被禁止。當(dāng)在訪問(wèn) 表格或表項(xiàng)中遭遇尋址異常時(shí),操作單元也被禁止。該規(guī)則應(yīng)用的表格和表項(xiàng)是可派發(fā)單 元控制表格、基本ASN第二表項(xiàng)、訪問(wèn)列表中的項(xiàng)目、區(qū)域第一表格、區(qū)域第二表格、區(qū)域第 三表格、段表格、頁(yè)面表格、鏈接表格、鏈接第一表格、鏈接第二表格、入口表格、ASN第一表 格、ASN第二表格、授權(quán)表格、鏈接堆棧以及跟蹤表格。當(dāng)尋址異常遇到到區(qū)域第一表格、區(qū) 域第二表格、區(qū)域第三表格、段表格、頁(yè)面表格的引用時(shí),在暗含的動(dòng)態(tài)地址轉(zhuǎn)換的引用以 及與 LOAD PAGE-TABLE-ENTRY ADDRESS、LOAD REAL ADDRESS、STORE REAL ADDRESS、以及 TEST PROTECTION的異常關(guān)聯(lián)的引用中,尋址異常造成禁止。類(lèi)似的,當(dāng)暗含地或作為L(zhǎng)OAD PAGE-TABLE-ENTRY ADDRESS、LOAD REAL ADDRESS、STORE REAL ADDRESS、TEST ACCESS、或 TEST PROTECTION的一部分在訪問(wèn)寄存器轉(zhuǎn)換中遇到訪問(wèn)派發(fā)單元控制表格、基本ASN第 二表項(xiàng)、訪問(wèn)列表、ASN第二表格或授權(quán)表格的尋址異常時(shí),所述尋址異常造成禁止。除了執(zhí) 行被禁止的一些特定指令,終止對(duì)于可被轉(zhuǎn)換但指示不可用位置的操作數(shù)地址的操作。對(duì) 于終止,僅對(duì)于結(jié)果字段發(fā)生改變。在這種情境中,術(shù)語(yǔ)“結(jié)果字段”包括條件代碼、寄存器 和提供的并由指令指定改變的任何存儲(chǔ)器位置。在(圖7)701中,提取圖6A的旋轉(zhuǎn)并插入所選比特的指令(具有圖6B的Z比特; 13即時(shí)字段,其指定所選比特的開(kāi)始比特;14字段,其指定所選比特的結(jié)束比特;和15字 段,其指定旋轉(zhuǎn)量),并對(duì)其進(jìn)行解碼和執(zhí)行。在執(zhí)行過(guò)程中,從指令的R2字段所標(biāo)識(shí)702 的寄存器獲得703第二操作數(shù),并將其向左旋轉(zhuǎn)704第五操作數(shù)中指定的比特?cái)?shù)。從操作 數(shù)的最左邊比特位置移出的每個(gè)比特在操作數(shù)的最右邊比特位置重新進(jìn)入。所旋轉(zhuǎn)的第二 操作數(shù)的所選705比特取代706指令的Rl字段所標(biāo)識(shí)的寄存器中的第一操作數(shù)的相應(yīng)比 特位置的內(nèi)容。如果Z比特是1,將第一操作數(shù)的所選比特之外的比特設(shè)定708為零。通過(guò) 條件代碼指示709結(jié)果。第二操作數(shù)在通用寄存器R2中保持不變。13字段的比特2-7 (指令的比特18-23)包含無(wú)符號(hào)的二進(jìn)制整數(shù),其指定在旋轉(zhuǎn) 之后,在第一操作數(shù)和第二操作數(shù)中所選比特范圍的開(kāi)始比特位置。14字段的比特2-7(指 令的比特26-31)包含無(wú)符號(hào)的二進(jìn)制整數(shù),其指定所選比特范圍的結(jié)束比特位置(包含首 末)。當(dāng)結(jié)束比特位置小于開(kāi)始比特位置時(shí),比特范圍從比特63環(huán)繞到比特0。15字段的比特2-7 (指令的比特34-39)包含無(wú)符號(hào)的二進(jìn)制整數(shù),其指定第二操 作數(shù)向左旋轉(zhuǎn)的比特?cái)?shù)目。14字段的比特0(指令的比特24)包含零剩余比特控制(Z)。Z比特控制第一操 作數(shù)的剩余比特如何設(shè)定(也就是,在指定范圍之外的那些比特,如果有的話)。當(dāng)Z比特 為零時(shí),第一操作數(shù)的剩余比特不改變。當(dāng)Z比特為一時(shí),將第一操作數(shù)的剩余比特設(shè)定為零。優(yōu)選地,剛才描述的指令的即時(shí)字段在圖6B中描繪。13字段的比特0-1和14字段的比特1 (指令的比特16-17和25)被保留,并應(yīng)該 包含零,否則,程序?qū)?lái)可能不能兼容操作。15字段的比特0-1 (指令的比特32-33)被忽略。出于設(shè)定條件代碼的目的,通用寄存器Rl中的結(jié)果被視為64比特有符號(hào)的二進(jìn) 制整數(shù)。
作為指令執(zhí)行的結(jié)果,條件代碼如下設(shè)定0結(jié)果零1結(jié)果小于零2結(jié)果大于零3...如果沒(méi)有安裝通用指令擴(kuò)展工具,指令的執(zhí)行可能會(huì)導(dǎo)致操作異常。盡管15字段的比特2-7被定義為包含無(wú)符號(hào)的二進(jìn)制整數(shù),其指定第二操作數(shù)向 左旋轉(zhuǎn)的比特?cái)?shù)目,但是可以編碼一個(gè)負(fù)值,其有效地指定向右旋轉(zhuǎn)量。當(dāng)使用零剩余比特控制時(shí),ROTATE THEN INSERT SELECTED BITS提供了實(shí)現(xiàn)移位 操作的手段。當(dāng)Rl和R2字段指定了同樣的寄存器并且Z比特為一時(shí),ROTATE THEN INSERT SELECTED BITS可用于使寄存器中的所選比特范圍歸零。注意,該技術(shù)不能用于使寄存器的 所有64比特歸零。在匯編語(yǔ)法中,包含旋轉(zhuǎn)量的15操作數(shù)被看作可選的。當(dāng)沒(méi)有編碼15字段時(shí),暗 示了旋轉(zhuǎn)量為零。下面的例子說(shuō)明了使用ROTATE THEN INSERT SELECTED BITS指令來(lái)提取出通用 寄存器8中包含的虛擬地址的各種DAT表索引。這個(gè)例子示出,使用零剩余比特控制來(lái)將 結(jié)果寄存器的剩余比特設(shè)定為零。
假定通用寄存器8中的虛擬地址為十六進(jìn)制的123456789ABCDEF0。
RISBG 1 RISBG 2 RISBG 3 RISBG 4 RISBG 5 RISBG 6
8,53,128+63,11 8,53,128+63,22 8,53,128163,33 8,53,128+63,44 8,56,128+63,52 8,52,128+63,0
獲得寄存器第-獲得寄存器第 獲得寄存器第J 獲得段索引。 獲得頁(yè)索引。 獲得字節(jié)索引<
-索引< 索引< 索引<
緊跟每個(gè)RISBG的條件代碼為2。一旦完成,通用寄存器1-6分別包含區(qū)域第一索
引,區(qū)域第二索引,區(qū)域第三索引,段索引,頁(yè)索引和字節(jié)索引,如下所示GRl0000000000000091(RFX)GR2 0000000000000515(RSX)GR3 :00000000000004F1(RTX)GR4 :0000000000000IAB(SX)GR5 :00000000000000CD(PX)GR6 :0000000000000EF0 (BX)下面的例子說(shuō)明了將64比特值向左移位L比特RISBG Rl, R2,0, X' 80' +63—L,L下面的例子說(shuō)明了將32比特值向右移位R比特,并將最左邊的32比特設(shè)定為零RISBG 111, R2,32+R, X' 80' +63,-R下面的例子說(shuō)明了通過(guò)通用寄存器3的E將比特S歸零。RISBG 3,3,mod64 (E_M) J28+mod64 (S-1),0
24
Mod64表示取模功能,其有效地使得括號(hào)中的值與十六進(jìn)制的3F進(jìn)行AND (與)運(yùn)算。前述內(nèi)容對(duì)于理解一個(gè)計(jì)算機(jī)系統(tǒng)實(shí)施例的術(shù)語(yǔ)和結(jié)構(gòu)是有用的。本方面不限于 z/Architecture或者對(duì)其提供的說(shuō)明。本發(fā)明可有利地應(yīng)用于具有在此教導(dǎo)的其他計(jì)算機(jī) 制造商的其他計(jì)算機(jī)結(jié)構(gòu)。盡管在此已經(jīng)示例和描述了本方面的優(yōu)選實(shí)施例,應(yīng)該理解,本發(fā)明不限于在此 公開(kāi)的具體構(gòu)造,將保留落入在所附的權(quán)利要求所定義的本發(fā)明的范圍中的所有改動(dòng)、修 改的權(quán)利。
權(quán)利要求
一種計(jì)算機(jī)方法,包括提取程序中的旋轉(zhuǎn)然后插入指令,所述旋轉(zhuǎn)然后插入指令是針對(duì)計(jì)算機(jī)架構(gòu)而定義的,所述旋轉(zhuǎn)然后插入指令包括操作碼字段、第一寄存器字段(R2)、第二寄存器字段(R1)、Z比特,其中所述第一寄存器字段指定多個(gè)通用寄存器之一,其中所述第二寄存器字段指定所述多個(gè)通用寄存器之一;執(zhí)行所述旋轉(zhuǎn)然后插入指令包括從所述第一寄存器字段所指定的第一寄存器獲得第一操作數(shù);將所述第一操作數(shù)旋轉(zhuǎn)一旋轉(zhuǎn)量,以生成經(jīng)旋轉(zhuǎn)的值,其中所述旋轉(zhuǎn)有效地將比特朝向更高位的位置移位,并有效地將比特從高位比特位置移出到低位比特位置;選擇經(jīng)旋轉(zhuǎn)的值的一部分;響應(yīng)于Z比特為0,在第二寄存器中的第二操作數(shù)的第二操作數(shù)部分中保存所選擇部分,所述第二操作數(shù)部分對(duì)應(yīng)于所選擇部分的比特位置,其中在第二寄存器中,除了所述第二操作數(shù)部分之外的所述第二寄存器的所有其他比特不通過(guò)保存操作而改變;響應(yīng)于Z比特為1,在第二寄存器中的第二操作數(shù)的第二操作數(shù)部分中保存所選擇部分,所述第二操作數(shù)部分對(duì)應(yīng)于所選擇部分的比特位置,其中在第二寄存器中,將除了所述第二操作數(shù)部分之外的所述第二寄存器的所有其他比特通過(guò)保存操作而設(shè)定為零;以及繼續(xù)用于執(zhí)行的下一指令。
2.根據(jù)權(quán)利要求1所述的方法,其中所述旋轉(zhuǎn)然后插入指令還包括第一即時(shí)字段 (13),其包括指示出要選擇的部分的開(kāi)始比特位置的第一值;第二即時(shí)字段(14),其包括 指示出要選擇的部分的結(jié)束比特位置的第二值;和第三即時(shí)字段(15),其具有旋轉(zhuǎn)量;所 述方法包括使用所述第一值和第二值來(lái)選擇經(jīng)旋轉(zhuǎn)的值的所述部分;以及 響應(yīng)于經(jīng)旋轉(zhuǎn)的值的所選擇部分為零,將指示出經(jīng)旋轉(zhuǎn)的值的所選擇部分的條件代碼 設(shè)定為零;響應(yīng)于經(jīng)旋轉(zhuǎn)的值的所選擇部分大于零,將指示出經(jīng)旋轉(zhuǎn)的值的所選擇部分的條件代 碼設(shè)定為大于零;以及響應(yīng)于經(jīng)旋轉(zhuǎn)的值的所選擇部分小于零,將指示出經(jīng)旋轉(zhuǎn)的值的所選擇部分的條件代 碼設(shè)定為小于零。
3.根據(jù)權(quán)利要求2所述的方法,其中所述旋轉(zhuǎn)然后插入指令由比特0-47構(gòu)成,其中所 述操作碼包括由比特0-7構(gòu)成的第一操作碼部分和由比特40-47構(gòu)成的第二操作碼部分, 其中所述第二寄存器字段(RI)由比特8-11構(gòu)成,所述第一寄存器字段(R2)由比特12-25 構(gòu)成,Z比特為比特24,第一即時(shí)字段(13)由比特16-23構(gòu)成,第二即時(shí)字段(14)由比特 25-31構(gòu)成,旋轉(zhuǎn)量(15)由比特34-39構(gòu)成。
4.根據(jù)權(quán)利要求1所述的方法,其中通過(guò)替代計(jì)算機(jī)架構(gòu)的中央處理單元來(lái)提取和執(zhí) 行針對(duì)所述計(jì)算機(jī)架構(gòu)而定義的所述旋轉(zhuǎn)然后插入指令,其中所述方法還包括,解釋所述旋轉(zhuǎn)然后插入指令以識(shí)別用于仿真所述旋轉(zhuǎn)然后插入 指令的操作的預(yù)定軟件例程;以及其中執(zhí)行所述旋轉(zhuǎn)然后插入指令包括,執(zhí)行所述預(yù)定軟件例程以實(shí)施用于執(zhí)行旋轉(zhuǎn)然 后插入指令的方法的步驟。
5.一種計(jì)算機(jī)系統(tǒng),包括 存儲(chǔ)器;與所述存儲(chǔ)器通信的處理器,所述處理器包括指令提取部件,用于從存儲(chǔ)器提取指令; 以及一個(gè)或多個(gè)執(zhí)行部件,用于執(zhí)行所提取的指令;其中,所述計(jì)算機(jī)系統(tǒng)被配置為實(shí)施前述權(quán)利要求中任何一項(xiàng)的方法。
6.一種計(jì)算機(jī)程序產(chǎn)品,所述計(jì)算機(jī)程序產(chǎn)品包括處理電路可讀的有形存儲(chǔ)介質(zhì),并 存儲(chǔ)指令,所述指令通過(guò)處理電路來(lái)執(zhí)行,以實(shí)施權(quán)利要求1到4中任一項(xiàng)的方法。
全文摘要
在操作計(jì)算機(jī)的方法中,提取并執(zhí)行具有Z比特的旋轉(zhuǎn)然后插入指令,其中第一寄存器中的第一操作數(shù)被旋轉(zhuǎn)一定量。如果Z比特為0,則將布爾操作的結(jié)果的所選擇部分插入到第二寄存器的第二操作數(shù)的相應(yīng)比特。如果Z比特為1,則除了所插入比特之外,將除了第二操作數(shù)的所插入比特之外的比特設(shè)定為零。
文檔編號(hào)G06F9/315GK101911014SQ200980101956
公開(kāi)日2010年12月8日 申請(qǐng)日期2009年1月7日 優(yōu)先權(quán)日2008年1月11日
發(fā)明者D·格雷納, J·范布特拉爾, T·斯萊格爾 申請(qǐng)人:國(guó)際商業(yè)機(jī)器公司