KR101231556B1 - 선택된 비트들의 회전 후 연산 기능 및 그 명령어 - Google Patents
선택된 비트들의 회전 후 연산 기능 및 그 명령어 Download PDFInfo
- Publication number
- KR101231556B1 KR101231556B1 KR1020107015044A KR20107015044A KR101231556B1 KR 101231556 B1 KR101231556 B1 KR 101231556B1 KR 1020107015044 A KR1020107015044 A KR 1020107015044A KR 20107015044 A KR20107015044 A KR 20107015044A KR 101231556 B1 KR101231556 B1 KR 101231556B1
- Authority
- KR
- South Korea
- Prior art keywords
- bits
- bit
- instruction
- register
- operand
- Prior art date
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/30029—Logical and Boolean instructions, e.g. XOR, NOT
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/30032—Movement instructions, e.g. MOVE, SHIFT, ROTATE, SHUFFLE
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30145—Instruction analysis, e.g. decoding, instruction word fields
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30145—Instruction analysis, e.g. decoding, instruction word fields
- G06F9/3016—Decoding the operand specifier, e.g. specifier format
- G06F9/30167—Decoding the operand specifier, e.g. specifier format of immediate specifier, e.g. constants
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30181—Instruction operation extension or modification
- G06F9/30185—Instruction operation extension or modification according to one or more bits in the instruction, e.g. prefix, sub-opcode
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30181—Instruction operation extension or modification
- G06F9/30189—Instruction operation extension or modification according to execution mode, e.g. mode flag
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/34—Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes
- G06F9/342—Extension of operand address space
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Executing Machine-Instructions (AREA)
Abstract
컴퓨터 연산 방법에서는, T 비트를 갖는 회전 후 연산 명령어를 페치하여 실행하고, 여기서 제1 레지스터의 제1 피연산자는 회전량만큼 회전되고, 부울 연산은 제2 레지스터의 제2 피연산자 및 회전된 제1 연산자의 선택된 일부에 대하여 수행된다. T 비트가 '0'이면, 부울 연산 결과, 그 선택된 일부가 제2 레지스터의 제2 피연산자의 대응 비트들 내로 삽입된다. T 비트가 '1'이면, 삽입된 비트들뿐만 아니라, 회전된 제1 피연산자의 선택된 일부가 아닌 비트들이 제2 레지스터에 세이브된다.
Description
본 발명은 컴퓨터 시스템에 관한 것으로서 보다 상세하게는 컴퓨터 시스템 프로세서 명령어 기능성에 관한 것이다.
상표 IBM?은 미국 뉴욕주 아몬크에 소재한 International Business Machines Corporation의 등록 상표이며, S/390, Z900, z990 및 기타 제품명들은 International Business Machines Corporation 또는 다른 회사의 등록 상표 또는 제품명일 수 있다.
1960년대부터 지금까지 IBM? System 360으로 알려져 있는 기계부터 시작하여, IBM은 컴퓨팅 시스템에 필수적이라는 특성으로 인해 "메인프레임"으로 알려지게 된 특별한 아키텍처를 개발해 왔는데, 이 메인프레임의 연산 원리들은 명령어들을 서술함으로써 기계의 아키텍처를 명시하고 있으며, 이들 명령어는 자신의 "메인프레임"을 실행할 때 실행될 수 있다. 이들 명령어는 과거 IBM 발명자들에 의해 발명되었으며, "메인프레임"에 의해 표현되는 컴퓨팅 기계의 상태를 개선하는 데 상당히 기여한 덕분에 몇 년에 걸쳐 명시된 바와 같이 IBM의 연산 원리들(IBM's Principles of Operation)에 포함됨으로써 중요한 공헌자로서 채택되었다. 기계의 아키텍처를 서술하는 2007년 4월에 발행된 IBM? z/Architecture? Principles of Operation의 제6판은 SA22-7832-05로서 발행된 표준 참고 문헌으로 되었으며 IBM의 z9? 메인프레임 서버들에 포함된다. 발행물 SA22-7832-05인 IBM? z/Architecture? Principles of Operation의 전체는 인용에 의해 본 명세서에 포함된다.
도 1A를 참조해 보면, 종래 기술의 호스트 컴퓨터 시스템(50)의 대표적인 구성요소들이 도시되어 있다. 컴퓨터 시스템에 다른 방식의 구성요소들을 채용해도 되며, 이는 당해 기술에 널리 알려져 있다. 대표적인 호스트 컴퓨터(50)는 기타 컴퓨터 또는 SAN 등과 통신하도록 저장 장치(11)와 네트워크(10)에 대한 I/O 인터페이스뿐만 아니라 주 저장소[컴퓨터 메모리(2)]와 통신하는 하나 이상의 CPU(1)를 포함한다. CPU(1)는 아키텍처형 명령어 세트 및 아키텍처형 기능성을 갖는 아키텍처에 부합한다. CPU(1)는 프로그램 어드레스(가상 어드레스)를 메모리의 실제 어드레스로 변환하기 위한 동적 어드레스 변환장치(DAT)(3)를 구비할 수 있다. DAT는 통상적으로 컴퓨터 메모리(2)의 블록에 대한 추후 액세스가 어드레스 변환의 지연을 요구하지 않도록 변환을 캐싱하기 위한 변환 색인 버퍼(TLB; 7)를 포함한다. 통상적으로, 캐시(9)는 컴퓨터 메모리(2)와 프로세서(1) 사이에 채용된다. 캐시(9)는 계층적일 수 있고, 하나 이상의 CPU에 이용가능한 큰 캐시와, 각 CPU와 큰 캐시 사이의 보다 작고 빠른 (저 레벨) 캐시들을 구비하고 있다. 일부 구현예에서, 저 레벨 캐시들은 분할되어 명령어 페치(fetching)와 데이터 액세스를 위한 개개의 저 레벨 캐시들을 제공한다. 일 실시예에서, 명령어는 캐시(9)를 통해 명령어 페치 유닛(4)에 의해 메모리(4)로부터 페치된다. 명령어는 명령어 디코딩 유닛(6)에서 디코딩되고 (일부 실시예에서는 다른 명령어과 함께) 명령어 실행 유닛(8)에 배정된다. 통상적으로, 여러 실행 유닛들(8), 예를 들어 산술 실행 유닛, 부동소수점 실행 유닛 및 분기 명령어 실행 유닛이 채용된다. 명령어는 필요할 때마다 명령어 특정 레지스터나 메모리로부터의 피연산자에 액세스하는 실행 유닛에 의해 실행된다. 피연산자가 메모리(2)로부터 액세스(로딩 또는 저장)되는 경우, 로드 저장 유닛(load store unit)(5)은 통상적으로 실행되고 있는 명령어의 제어 하에 그 액세스를 다룬다. 명령어는 하드웨어 회로 또는 내부 마이크로코드(펌웨어)에서 또는 이들의 조합에 의해 실행될 수 있다.
도 1B에는, 호스트 아키텍처의 호스트 컴퓨터 시스템(50)을 에뮬레이팅하는 종래 기술의 에뮬레이팅된 호스트 컴퓨터 시스템(21)의 일례가 도시되어 있다. 에뮬레이팅된 호스트 컴퓨터 시스템(21)에서, 호스트 프로세서(CPU; 1)는 에뮬레이팅된 호스트 프로세서(또는 가상 호스트 프로세서)이며, 호스트 컴퓨터(50)의 프로세서(1)의 명령어 세트 아키텍처와 다른 네이티브 명령어 세트 아키텍처(native instruction set architecture)를 갖는 에뮬레이션 프로세서(27)를 포함한다. 에뮬레이팅된 호스트 컴퓨터 시스템(21)은 에뮬레이션 프로세서(27)에 액세스 가능한 메모리(22)를 갖는다. 도시한 예에서, 메모리(27)는 호스트 컴퓨터 메모리(2) 부분과 에뮬레이션 루틴(23) 부분으로 파티션 처리된다. 호스트 컴퓨터 메모리(2)는 호스트 컴퓨터 아키텍처에 따라 에뮬레이팅된 호스트 컴퓨터 시스템(21)의 프로그램에 의해 이용가능하다. 에뮬레이션 프로세서(27)는 에뮬레이팅된 프로세서(1)의 네이티브 명령어가 아니라 에뮬레이션 루틴 메모리(23)로부터 얻은, 아키텍처의 아키텍처형 명령어 세트의 네이티브 명령어를 실행하고, 액세스된 호스트 명령어의 함수를 에뮬레이팅하기 위한 네이티브 명령어 실행 루틴을 결정하도록 액세스된 호스트 명령어(들)를 디코딩할 수 있는 시퀀스 & 액세스/디코드 루틴에서 얻은 하나 이상의 명령어를 채용함으로써 호스트 컴퓨터 메모리(2)의 프로그램으로부터 실행할 호스트 명령어에 액세스할 수 있다. 호스트 컴퓨터 시스템(50) 아키텍처를 위해 정의되는 다른 기능들은 예를 들어 범용 레지스터, 제어 레지스터, 동적 어드레스 변환 및 I/O 서브시스템 지원 및 프로세서 캐시와 같은 기능들을 포함하는 아키텍처형 기능 루틴들에 의해 에뮬레이팅될 수 있다. 또한 에뮬레이션 루틴들은 에뮬레이션 루틴들의 성능을 개선하도록 (범용 레지스터와 가상 어드레스의 동적 변환과 같이) 에뮬레이션 프로세서(27)에서 이용가능한 함수의 이점을 활용할 수 있다. 또한, 전용 하드웨어 및 오프로드(Off-Load) 엔진이 제공되어 호스트 컴퓨터(50)의 함수를 에뮬레이팅할 때 프로세서(27)를 보조할 수 있다.
메인프레임에서, 종종 컴파일러 애플리케이션을 위해 프로그래머가, 대개의 경우 오늘날에는 "C" 프로그래머가 아키텍처형 기계 명령어를 사용한다. 저장 매체에 저장된 이러한 명령어는 z/아키텍처 IBM 서버에서 네이티브 방식으로 실행될 수 있고, 또는 다른 방안으로 기타 아키텍처를 실행하는 기계에서 실행될 수 있다. 이러한 명령어들은 현존하는 그리고 미래의 IBM 메인프레임 서버들과 IBM의 기타 기계들(예를 들어, pSeries? 서버 및 xSeries? 서버) 상에서 에뮬레이팅될 수 있다. 이러한 명령어들은 리눅스를 실행하는 기계들 또는 IBM?, Intel?, AMDTM Sun Microsystems 등에 의해 제조된 하드웨어를 이용하는 다양한 기계들에서 실행될 수 있다. Z/Architecture?을 기반으로 그러한 하드웨어 상에서의 실행 외에도, Hercules, UMX, FSI (Fundamental Software, Inc) 또는 Platform Solutions, Inc. (PSI)에 의한 에뮬레이션을 이용하는 기계뿐만 아니라 리눅스도 이용할 수 있으며, 여기서 실행은 일반적으로 에뮬레이션 모드에서 이루어진다. 에뮬레이션 모드에서, 에뮬레이션 소프트웨어는 에뮬레이팅된 프로세서의 아키텍처를 에뮬레이팅하도록 네이티브 프로세서에 의해 실행된다.
네이티브 프로세서(27)는 통상적으로 에뮬레이팅된 프로세서의 에뮬레이션을 수행하도록 펌웨어나 네이티브 운영 체제를 포함하는 에뮬레이션 소프트웨어(23)를 실행한다. 에뮬레이션 소프트웨어(23)는 에뮬레이팅된 프로세서 아키텍처의 명령어들을 페치하고 실행하는 역할을 담당한다. 에뮬레이션 소프트웨어(23)는 명령어 경계들을 추적하도록 에뮬레이팅된 프로그램 카운터를 지원한다. 에뮬레이션 소프트웨어(23)는 한번에 하나 이상의 에뮬레이팅된 기계 명령어들을 페치하고 이러한 하나 이상의 에뮬레이팅된 기계 명령어들을 네이티브 프로세서(27)에 의한 실행을 위해 네이티브 기계 명령어들의 대응 그룹으로 변환할 수 있다. 이렇게 변환된 명령어들은 보다 빠른 변환이 달성될 수 있도록 캐싱될 수 있다. 그럼에도 불구하고, 에뮬레이션 소프트웨어는 에뮬레이팅된 프로세서가 정확하게 연산하기 위해 기입된 애플리케이션 및 운영 체제를 보장하도록 에뮬레이팅된 프로세서 아키텍처의 아키텍처 규칙들을 지원해야 한다. 게다가, 에뮬레이션 소프트웨어는 에뮬레이팅된 프로세서(1) 아키텍처에 의해 식별된 자원들을 제공해야 하며, 이 에뮬레이팅된 프로세서(1) 아키텍처는 에뮬레이팅된 프로세서 상에서 실행되도록 설계된 애플리케이션 프로그램 또는 운영 체제가 에뮬레이션 소프트웨어를 갖는 네이티브 프로세스 상에서 실행될 수 있도록, 예를 들어, 제어 레지스터, 범용 레지스터, 부동소수점 레지스터, 세그먼트 테이블과 페이지 테이블을 포함하는 동적 어드레스 변환 함수, 인터럽트 메커니즘, 컨텍스트 전환 메커니즘, 일일시간 (Time of Day, TOD) 클록 및 I/O 서브시스템에 대한 아키텍처형 인터페이스를 포함하지만, 이들에 한정되는 것은 아니다.
에뮬레이팅되고 있는 특정 명령어는 디코딩되고, 개별 명령어의 함수를 수행하도록 서브루틴이 호출된다. 에뮬레이팅된 프로세서(1)의 함수를 에뮬레이팅하는 에뮬레이션 소프트웨어 함수(23)는 예컨대 "C" 서브루틴 또는 드라이버에서, 또는 특정 하드웨어를 위한 드라이버를 제공하는 소정의 다른 방법으로 실행되며, 이 방법은 바람직한 실시예의 설명을 이해한 후의 당업자의 기술 범위 내에 있는 그런 방법이다. Beausoleil 등의 "하드웨어 에뮬레이션용 멀티프로세서(Multiprocessor for hardware emulation)"이라는 명칭의 미국 특허번호 제5551013호, Scalzi 등의 "타겟 프로세서에서 비호환성 명령어를 에뮬레이팅하기 위한 저장된 타겟 루틴을 예비 처리하는 방법(Preprocessing of stored target routines for emulating incompatible instructions on a target processor)"라는 명칭의 미국 특허번호 제6009261호, Davidian 등의 "게스트 명령어를 에뮬레이팅하는 에뮬레이션 루틴에 직접 액세싱하라는 게스트 명령어를 디코팅하는 방법(Decoding guest instruction to directly access emulation routines that emulate the guest instructions)"라는 명칭의 미국 특허번호 제5574873호, Gorishek 등의 "비네이티브 코드를 시스템에서 실행할 수 있는 코프로세서 지원장치에 사용되는 대칭 멀티프로세싱 버스 및 칩셋(Symmetrical multiprocessing bus and chipset used for coprocessor support allowing non-native code to run in a system)"이라는 명칭의 미국 특허번호 제6308255호, Lethin 등의 "아키텍처 에뮬레이션용 동적 최적화 객체 코드 번역기 및 동적 최적화 객체 코드 번역 방법(Dynamic optimizing object code translator for architecture emulation and dynamic optimizing object code translation method)"라는 명칭의 미국 특허번호 제6463582호, Eric Traut의 "호스트 명령어의 동적인 재컴파일레이션을 통해 호스트 컴퓨터에서 게스트 명령어를 에뮬레이팅하는 방법(Method for emulating guest instructions on a host computer through dynamic recompilation of host instructions)"이라는 명칭의 미국 특허번호 제5790825호, 및 다른 많은 발명을 포함하는 다양한 소프트웨어 및 하드웨어 에뮬레이션 특허들은 전술한 문헌들에 의해 사용되는 상업적 소프트웨어 기술들뿐만 아니라 당업자에 의해 이용가능한 타겟 기계를 위해 다른 기계용으로 아키텍처화된 명령어 포맷의 에뮬레이션을 달성하도록 알려져 있는 다양한 방식들도 개시하고 있지만, 이것들에 한정되지는 않는다.
본 발명은 범용 레지스터와 같은 아키텍처 자원들에 대한 의존성을 완화하며, 신규한 명령어를 채용하는 소프트웨어 버전의 성능과 기능성을 개선하는, 기존의 아키텍처와 부합하는 신규한 명령어 기능성을 제공하는 데에 목적이 있다.
T 비트를 갖는 회전 후 연산(rotate then operate) 명령어가 페치 및 실행되며, 여기서 제1 레지스터의 제1 피연산자는 소정의 양만큼 회전되며, 부울 연산(Boolean operation)은 회전된 제1 피연산자의 선택된 일부 및 제2 레지스터의 제2 피연산자에 대하여 수행된다. T 비트가 '0'이면, 부울 연산 결과의 선택된 일부는 제2 레지스터의 제2 피연산자의 대응 비트들 내에 삽입되고, 제2 레지스터의 나머지 (비선택) 비트들은 변경되지 않는다. 그 결과에서 선택된 비트들이 제로인지 여부를 나타내는 조건 코드들이 설정된다. T 비트가 '1'이면, 제2 레지스터는 수정되지 않고, 부울 연산 결과의 선택된 일부에 기초하여 조건 코드들만이 설정된다.
본 발명은 범용 레지스터와 같은 아키텍처 자원들에 대한 의존성을 완화하며, 신규한 명령어를 채용하는 소프트웨어 버전의 성능과 기능성을 개선하는, 기존의 아키텍처와 부합하는 신규한 명령어 기능성을 제공한다.
본 발명으로서 간주되는 주제를 구체적으로 지적하고, 본 명세서의 말미에 있는 청구범위에서 명백하게 청구한다. 전술한 본 발명의 목적, 특징 및 이점과, 기타 목적, 특징 및 이점은 첨부 도면과 함께 다음에 따르는 상세한 설명으로부터 명백하다.
도 1A는 종래 기술의 호스트 컴퓨터 시스템의 일례를 도시한다.
도 1B는 종래 기술의 에뮬레이팅된 호스트 컴퓨터 시스템의 일례를 도시한다.
도 1C는 종래 기술의 컴퓨터 시스템의 일례를 도시한다.
도 2는 종래 기술의 컴퓨터 네트워크의 일례를 도시한다.
도 3은 종래 기술의 컴퓨터 시스템의 요소를 도시한다.
도 4A 내지 도 4C는 종래 기술의 컴퓨터 시스템의 요소들을 도시한다.
도 5A 내지 도 5F는 컴퓨터 시스템의 기계 명령어 포맷을 도시한다.
도 6은 본 발명의 일 실시예에 따른 명령어 포맷의 예를 도시한다.
도 7은 본 발명의 일 실시예에 따른 직접 필드의 예를 도시한다.
도 8은 본 발명의 일 실시예에 따른 함수 흐름의 일례를 도시한다.
도 1A는 종래 기술의 호스트 컴퓨터 시스템의 일례를 도시한다.
도 1B는 종래 기술의 에뮬레이팅된 호스트 컴퓨터 시스템의 일례를 도시한다.
도 1C는 종래 기술의 컴퓨터 시스템의 일례를 도시한다.
도 2는 종래 기술의 컴퓨터 네트워크의 일례를 도시한다.
도 3은 종래 기술의 컴퓨터 시스템의 요소를 도시한다.
도 4A 내지 도 4C는 종래 기술의 컴퓨터 시스템의 요소들을 도시한다.
도 5A 내지 도 5F는 컴퓨터 시스템의 기계 명령어 포맷을 도시한다.
도 6은 본 발명의 일 실시예에 따른 명령어 포맷의 예를 도시한다.
도 7은 본 발명의 일 실시예에 따른 직접 필드의 예를 도시한다.
도 8은 본 발명의 일 실시예에 따른 함수 흐름의 일례를 도시한다.
일 실시예에서, 본 발명은 소프트웨어(때때로, 라이센스 인터널 코드, 펌웨어, 마이크로코드, 밀리코드, 피코코드 등으로 불리며, 이들 중의 어느 것도 본 발명과 부합한다)에 의해 실시될 수 있다. 도 1A를 참조해 보면, 본 발명을 구체화하는 소프트웨어 프로그램 코드는 통상적으로 CD-ROM 드라이브, 테이프 드라이브 또는 하드 드라이브와 같은 장기간 저장 매체(7)로부터 시스템(50)의 CPU(중앙 처리 유닛)(1)로도 알려져 있는 프로세서에 의해 액세스된다. 소프트웨어 프로그램 코드는 디스켓, 하드 드라이브 또는 CD-ROM과 같이 데이터 처리 시스템과 함께 사용하도록 알려져 있는 다양한 매체 중 임의의 매체 상에 구체화되어도 된다. 소프트웨어 프로그램 코드는 이러한 매체 상에 분산되어도 되고, 또는 네트워크(10)를 통해 하나의 컴퓨터 시스템의 저장 장치 또는 컴퓨터 메모리(2)의 사용자들 내지 다른 컴퓨터 시스템의 사용자들이 사용하도록 이러한 다른 컴퓨터 시스템의 사용자들에게 분산되어도 된다.
다른 방안으로, 프로그램 코드는 메모리(2)에서 구체화될 수 있고, 프로세서 버스를 이용하여 프로세서(1)에 의해 액세스될 수 있다. 이러한 프로그램 코드는 하나 이상의 애플리케이션 프로그램과 다양한 컴퓨터 구성요소들의 상호 작용과 함수를 제어하는 운영 체제를 포함한다. 프로그램 코드는 보통 고밀도 저장 매체(11)로부터 프로세서(1)에 의한 처리를 위해 이용가능한 고속 메모리(2)로 페이징된다. 물리적 매체 상에서 메모리에 소프트웨어 프로그램 코드를 구체화하고 및/또는 분산하기 위한 기술 및 방법은 널리 알려져 있으며 이에 따라 본 명세서에서 더 설명하지 않는다. 프로그램 코드는 (전자 메모리 모듈(RAM), 플래시 메모리, 컴팩트 디스크(CD), DVD, 자기 테이프 등을 포함하지만, 이것들에 한정되지는 않는) 유형(tangible) 매체 상에 생성되어 저장되는 경우, 종종 "컴퓨터 프로그램 제품"이라 칭한다. 컴퓨터 프로그램 제품 매체는 통상적으로 컴퓨터 시스템의 처리 회로에 의한 실행을 위해 이 처리 회로에 의해 판독가능한 것이 바람직하다.
도 1C는 본 발명을 실시할 수 있는 대표적인 워크스테이션 또는 서버 하드웨어 시스템을 도시한다. 도 1C의 시스템(100)은, 확장 주변 장치들(optional peripheral devices)을 포함하는 퍼스널 컴퓨터, 워크스테이션 또는 서버와 같은 대표적인 컴퓨터 시스템(101)을 포함한다. 워크스테이션(101)은 하나 이상의 프로세서(106) 및 버스를 포함하며, 이 버스는 공지 기술들에 따라 프로세서(들)(106)와 시스템(101)의 다른 구성요소들 사이를 연결하고 이들 사이의 통신을 활성화하는 데에 사용된다. 이 버스는 프로세서(106)를 메모리(105)와 장기간 저장 장치(107)에 연결시키며, 이러한 장기간 저장 장치(107)는 예를 들어 (자기 매체, CD, DVD 및 플래시 메모리 중 임의의 것을 포함하는) 하드 드라이브나, 테이프 드라이브를 포함할 수 있다. 또한 시스템(101)은 사용자 인터페이스 어댑터를 포함해도 되며, 이 어댑터는 마이크로프로세서(106)를 버스를 통해 키보드(104), 마우스(103), 프린터/스캐너(110)와 같은 하나 이상의 인터페이스 장치 및/또는 터치 반응형 스크린, 디지털 엔트리 패드 등과 같은 임의의 사용자 인터페이스 장치일 수 있는 기타 인터페이스 장치에 연결시킨다. 버스는 또한 LCD 스크린이나 모니터와 같은 표시 장치(102)를 표시 어댑터를 통해 마이크로프로세서(106)에 연결시킨다.
시스템(101)은 네트워크(109)와 통신할 수 있는 네트워크 어댑터에 의해 다른 컴퓨터들 또는 컴퓨터들의 네트워크들과 통신할 수 있다. 네트워크 어댑터의 예로는, 통신 채널, 토큰 링, 이더넷 또는 모뎀이 있다. 다른 방안으로, 워크스테이션(101)은 CDPD(셀룰러 디지털 패킷 데이터) 카드와 같은 무선 인터페이스를 이용하여 통신해도 된다. 워크스테이션(101)은, LAN(근거리 통신망)이나 WAN[원거리(광역) 통신망]의 이러한 다른 컴퓨터들과 연관될 수 있고, 또는 다른 컴퓨터 등을 갖는 클라이언트/서버 구성의 클라이언트일 수 있다. 적절한 통신 하드웨어 및 소프트웨어뿐만 아니라 이러한 구성들 모두는 당해 기술에 알려져 있다.
도 2는 본 발명을 실시할 수 있는 데이터 처리 네트워크(200)를 도시한다. 데이터 처리 네트워크(200)는 무선 네트워크와 유선 네트워크와 같은 복수의 개별 네트워크를 포함할 수 있고, 이들 네트워크 각각은 복수의 개별 워크스테이션(101, 201, 202, 203, 204)을 포함할 수 있다. 또한, 당업자가 이해하듯이, 하나 이상의 LAN을 포함해도 되며, 여기서 LAN은 호스트 프로세서에 연결된 복수의 지능형 워크스테이션을 포함해도 된다.
계속 도 2를 참조하면, 네트워크들은 또한 게이트웨이 컴퓨터(클라이언트 서버(206))나 애플리케이션 서버[데이터 보관소에 액세스할 수 있고, 워크스테이션(205)으로부터 직접 액세스될 수도 있는 원격 서버(208)]와 같은 메인프레임 컴퓨터들이나 서버들을 포함해도 된다. 게이트웨이 컴퓨터(206)는 각 네트워크(207)로의 엔트리 포인트로서 기능을 한다. 게이트웨이는 하나의 네트워킹 프로토콜을 다른 하나의 네트워킹 프로토콜에 접속할 때 필요하다. 게이트웨이(206)는 바람직하게 통신 링크에 의해 다른 네트워크[예를 들어, 인터넷(207)]에 연결될 수 있다. 게이트웨이(206)는 또한 통신 링크를 이용하여 하나 이상의 워크스테이션(101, 201, 202, 203, 204)에 직접 연결되어도 된다. 게이트웨이 컴퓨터는 IBM사로부터 구매 가능한 IBM eServer™ zSeries? z9? 서버를 이용하여 구현될 수 있다.
본 발명을 구체화하는 소프트웨어 프로그래밍 코드는 통상적으로 CD-ROM 드라이브나 하드 드라이브와 같은 장기간 저장 매체(107)로부터 시스템(101)의 프로세서(106)에 의해 액세스된다. 소프트웨어 프로그래밍 코드는 디스켓, 하드 드라이브 또는 CD-ROM과 같은 데이터 처리 시스템과 함께 사용하도록 알려져 있는 다양한 매체들 중 임의의 매체에 구체화되어도 된다. 소프트웨어 프로그래밍 코드는 그러한 매체에 분산될 수 있거나, 하나의 컴퓨터 시스템의 메모리 또는 저장 장치에서 네트워크를 통해 다른 컴퓨터 시스템들까지의 사용자들(210, 211)에 분산될 수 되는데, 이들 다른 컴퓨터 시스템의 사용자는 자신의 컴퓨터 시스템을 사용한다.
다른 방안으로, 프로그래밍 코드(111)는 메모리(105)에서 구체화될 수 있고, 프로세서 버스를 이용하여 프로세서(106)에 의해 액세스될 수 있다. 이러한 프로그래밍 코드는 하나 이상의 애플리케이션 프로그램(112) 및 다양한 컴퓨터 구성요소들의 상호 작용과 함수를 제어하는 운영 체제를 포함한다. 프로그래밍 코드는 보통 고밀도 저장 매체(107)로부터 프로세서(106)에 의한 처리를 위해 이용가능한 고속 메모리(105)로 페이징된다. 물리적 매체 상에서 메모리에 소프트웨어 프로그램 코드를 구체화하고 및/또는 분산하기 위한 기술 및 방법은 널리 알려져 있으며 이에 따라 본 명세서에서 더 설명하지 않는다. 프로그램 코드는, (전자 메모리 모듈(RAM), 플래시 메모리, 컴팩트 디스크(CD), DVD, 자기 테이프 등을 포함하지만 이러한 예로 한정되지는 않는) 유형 매체 상에 생성되어 저장되는 경우, 종종 "컴퓨터 프로그램 제품"이라 칭한다. 컴퓨터 프로그램 제품 매체는 통상적으로 컴퓨터 시스템의 처리 회로에 의한 실행을 위해 이 처리 회로에 의해 판독가능한 것이 바람직하다.
프로세서가 가장 쉽게 이용가능한 캐시(보통 프로세서의 다른 캐시들보다 빠르고 작음)는 최저(L1 또는 레벨 1) 캐시이고, 주 저장소(메인 메모리)는 최고 레벨 캐시(레벨이 세 개라면 L3)이다. 최저 레벨 캐시는 기계 명령어들을 보유하는 명령어 캐시(I-캐시) 및 데이터 피연산자들을 보유하는 데이터 캐시(D-캐시)로 종종 분리된다.
도 3을 참조해 보면, 프로세서(106)가 프로세서의 예시적인 일 실시예로서 도시되어 있다. 통상적으로, 프로세서 성능을 개선하기 위해 메모리 블록들을 버퍼링하는 데에 캐시(303)의 하나 이상의 레벨을 채용한다. 캐시(303)는 사용될 가능성이 있는 메모리 데이터의 캐시 라인들을 보유하는 고속 버퍼이다. 통상적인 캐시 라인들은 메모리 데이터의 64, 128 또는 256 바이트이다. 데이터를 캐싱하는 것보다 명령어들을 캐싱하는 데에 별도의 캐시들을 종종 채용한다. 캐시 일관성(캐시 및 메모리의 라인들의 복제 동기화)은 당해 기술에 알려져 있는 다양한 스누프(Snoop) 알고리즘들에 의해 종종 제공된다. 프로세서 시스템의 주 저장 장치(105)를 종종 캐시라 칭한다. 캐시(303)의 네 개 레벨을 갖는 프로세서 시스템에서, 주 저장 장치(105)는, 통상적으로 보다 빠르며 컴퓨터 시스템이 이용가능한 비휘발성 저장 장치(DASD, 테이프 등)의 일부만을 유지하므로, 때때로 레벨 5(L5) 캐시라 칭한다. 주 저장 장치(105)는 운영 체제에 의해 주 저장 장치(105) 내에 페이징되고 밖으로 페이징된 데이터 페이지들을 캐싱한다.
프로그램 카운터(명령어 카운터)(311)는 실행되는 현재 명령어의 어드레스를 기록한다. z/아키텍처 프로세서의 프로그램 카운터는 64비트이며, 이전의 어드레싱 한계를 지원하도록 31비트 또는 24비트로 절단(truncate)될 수 있다. 프로그램 카운터는 통상적으로 컨텍스트 전환 동안 지속되도록 컴퓨터의 PSW(프로그램 상태 워드)에서 구체화된다. 따라서, 프로그램 카운터 값을 갖는 진행 중인 프로그램은, 예를 들어, 운영 체제에 의해 인터럽트(프로그램 환경으로부터 운영 체제 환경으로의 컨텍스트 전환)될 수 있다. 프로그래밍의 PSW는 프로그램이 활성이 아닌 동안 프로그램 카운터 값을 유지하고, 운영 체제의 (PSW의) 프로그램 카운터는 운영 체제가 실행되고 있는 동안 사용된다. 통상적으로, 프로그램 카운터는 현재 명령어의 바이트의 수와 같은 양에 의해 증분된다. RISC(축소 명령어 세트 컴퓨팅) 명령어들은 통상적으로 고정된 길이를 갖는 한편 CISC(복잡 명령어 세트 컴퓨팅) 명령어들은 통상적으로 가변 길이를 갖는다. IBM z/아키텍처의 명령어들은 2, 4 또는 6 바이트의 길이를 갖는 CISC 명령어들이다. 프로그램 카운터(311)는 예를 들어 컨텍스트 전환 연산 또는 분기 명령어의 브랜치 테이컨 연산(Branch Taken operation)에 의해 수정된다. 컨텍스트 전환 연산에서, 현재의 프로그램 카운터 값은 실행되고 있는 프로그램에 관한 다른 상태 정보(예를 들어, 조건 코드)와 함께 프로그램 상태 워드(PSW)에 저장되고, 실행될 새로운 프로그램 모듈의 명령어를 가리키는 새로운 프로그램 카운터 값이 로딩된다. 분기 명령어의 결과를 프로그램 카운터(311) 내에 로딩함으로써 프로그램이 결정을 내리거나 프로그램 내의 루핑(loop)을 허용할 수 있도록 분기 테이컨 연산을 수행한다.
통상적으로, 프로세서(106) 대신에 명령어 페치 유닛(305)을 채용하여 명령어들을 페치한다. 이 명령어 페치 유닛은 "다음 순차 명령어들", 브랜치 테이컨 명령어들의 타겟 명령어들, 또는 컨텍스트 전환을 뒤따르는 프로그램의 제1 명령어들을 페치한다. 최신 명령어 페치 유닛은 미리 페치된 명령어들이 사용될 가능성에 기초하여 명령어들을 추정식으로 미리 페치하는 예비 페치 기술을 종종 이용한다. 예를 들어, 페치 유닛은 다음 순차 명령어를 포함하는 16바이트 및 추가 순차 명령어들의 추가 바이트들을 페치할 수 있다.
이어서, 페치된 명령어들은 프로세서(106)에 의해 실행된다. 일 실시예에서, 페치된 명령어(들)은 페치 유닛의 배정 유닛(306)에 전달된다. 배정 유닛은, 그 명령어(들)을 디코딩하고 디코딩된 명령어(들)에 관한 정보를 적절한 유닛들(307, 308, 310)에 포워딩한다. 실행 유닛(307)은 통상적으로 명령어 페치 유닛(305)으로부터 디코딩된 산술 명령어들에 관한 정보를 수신하고, 명령어의 연산 코드에 따라 피연산자들에 대한 산술 연산을 수행한다. 피연산자들은 바람직하게 메모리(105), 아키텍처형 레지스터(309) 또는 실행되고 있는 명령어의 직접 필드로부터 실행 유닛(307)에 제공된다. 실행 결과는, 저장시, 메모리(105), 레지스터(309) 또는 (제어 레지스터, PSW 레지스터 등과 같은) 다른 기계 하드웨어에 저장된다.
프로세서(106)는 통상적으로 명령어의 함수를 실행하기 위한 하나 이상의 실행 유닛(307, 308, 310)을 포함한다. 도 4A를 참조해 보면, 실행 유닛(307)은 인터페이싱 로직(407)에 의해 아키텍처형 범용 레지스터(309), 디코드/배정 유닛(306), 로드 저장 유닛(310) 및 기타 프로세서 유닛(401)과 통신할 수 있다. 실행 유닛(307)은, 산술 로직 유닛(ALU; 402)이 연산하는 정보를 유지하는 데 여러 개의 레지스터 회로(403, 404, 405)를 채용할 수 있다. ALU는 and, or, xor, rotate 및 shift와 같은 논리 함수뿐만 아니라 가산, 감산, 승산 및 제산과 같은 산술 연산들을 수행한다. 바람직하게, ALU는 설계 의존형인 특정 연산들을 지원한다. 다른 회로들은 예를 들어 조건 코드와 복구 지원 로직을 포함하는 기타 아키텍처형 기능들(408)을 제공할 수 있다. 통상적으로, ALU 연산의 결과는 다양한 기타 처리 함수들에게 그 결과를 포워딩할 수 있는 출력 레지스터 회로(406)에 유지된다. 프로세서 유닛의 많은 구성이 존재하며, 본 설명은 대표적인 일 실시예를 이해하도록 제공되는 것이다.
ADD 명령어는 예를 들어 산술 및 논리적 기능성을 갖는 실행 유닛(307)에서 실행되는 한편 부동소수점 명령어(Floating Point instruction)은 예를 들어 특수 부동소수점 능력을 갖는 부동소수점 실행 유닛에서 실행된다. 바람직하게, 실행 유닛은 피연산자들에 대하여 연산 코드 정의 함수를 수행함으로써 식별된 피연산자들에 대하여 연산한다. 예를 들어, ADD 명령어는 그 명령어의 레지스터 필드들에 의해 식별된 두 개의 레지스터(309)에서 발견된 피연산자들에 대하여 실행 유닛(307)에 의해 실행될 수 있다.
실행 유닛(307)은 두 개의 피연산자에 대하여 산술 가산을 수행하고, 그 결과를 제3 레지스터 또는 두 개의 소스 레지스터 중 하나의 소스 레지스터일 수 있는 제3 피연산자에 저장한다. 실행 유닛은, 바람직하게, 가산, 감산, 승산, 제산 중 임의의 것을 포함하는 다양한 대수 함수들뿐만 아니라, Shift, Rotate, And, OR 및 XOR과 같은 다양한 논리 함수들도 수행할 수 있는 산술 로직 유닛(ALU; 402)을 활용한다. 일부 ALU(402)들은 스칼라 연산용으로 설계되고 일부는 부동소수점용으로 설계된다. 데이터는 아키텍처에 따라 (최하위 비트가 최고 바이트 어드레스에 있는) 빅 엔디안(Big Endian) 또는 (최하위 비트가 최저 바이트 어드레스에 있는) 리틀 엔디안(Litte Endian)일 수 있다. IBM z/아키텍처는 빅 엔디안이다. 부호있는 필드들은 아키텍처에 따라 부호 및 크기, 1의 보수 또는 2의 보수일 수 있다. 2의 보수는, 2의 보수에서의 음의 값 또는 양의 값이 ALU 내에서 가산만을 필요로 하므로, ALU가 감산 능력을 설계할 필요가 없다는 점에서 유익하다. 숫자들은 보통 짧게 기술되므로, 여기서 12비트 필드는 4,096바이트 블록의 어드레스를 정의하며, 예를 들어, 보통 4Kbyte(킬로 바이트) 블록으로 기술된다.
도 4B를 참조해 보면, 분기 명령어를 실행하기 위한 분기 명령어 정보는 통상적으로 분기 유닛(308)에 전송되고, 이 분기 유닛은 분기 이력 테이블(432)과 같은 분기 예측 알고리즘을 종종 이용하여, 다른 조건 연산들이 완료되기 전에 분기의 결과를 예측한다. 현재 분기 명령어의 타겟은 조건 연산들이 완료되기 전에 페치되어 추정식으로 실행된다. 조건 연산들이 완료되면, 추정식으로 실행된 분기 명령어들은 추정된 결과와 조건 연산의 조건들에 기초하여 완료되거나 페치된다. 통상적인 분기 명령어는 조건 코드들을 시험할 수 있으며 조건 코드들이 분기 명령어의 분기 요구 사항을 충족하면 타겟 어드레스로 브랜칭할 수 있고, 타겟 어드레스는 예를 들어 명령어의 직접 필드 또는 레지스터 필드들에서 발견되는 숫자들을 포함하는 여러 숫자들에 기초하여 계산될 수 있다. 분기 유닛(308)은 복수의 입력 레지스터 회로(427, 428, 429)와 출력 레지스터 회로(430)를 갖는 ALU(426)를 채용할 수 있다. 분기 유닛(308)은 예를 들어 범용 레지스터들(309), 디코드 배정 유닛(306) 또는 기타 회로들(425)과 통신할 수 있다.
명령어들의 그룹의 실행은, 예를 들어, 운영 체제에 의해 개시되는 컨텍스트 전환, 컨텍스트 전환을 야기하는 프로그램 예외 또는 에러, 컨텍스트 전환을 야기하는 I/O 인터럽션 신호 또는 (멀티스레딩 환경에서의) 복수의 프로그램의 멀티 스레딩 활동을 포함하는 다양한 이유들로 인해 인터럽트될 수 있다. 바람직하게, 컨텍스트 전환 액션은 현재 실행되고 있는 프로그램에 관한 상태 정보를 세이브한 후 호출되고 있는 다른 프로그램에 관한 상태 정보를 로딩한다. 상태 정보는, 예를 들어, 하드웨어 레지스터에 또는 메모리에 세이브될 수 있다. 상태 정보는 바람직하게 실행될 다음 명령어를 가리키는 프로그램 카운터 값, 조건 코드, 메모리 변환 정보 및 아키텍처형 레지스터 콘텐츠를 포함한다. 컨텍스트 전환 활동은 하드웨어 회로, 애플리케이션 프로그램, 운영 체제 프로그램 또는 펌웨어 코드(마이크로코드, 피코코드 또는 라이센스 내부 코드(LIC))에 의해 단독으로 또는 조합되어 실시될 수 있다.
프로세서는 명령어 정의 방법들에 따라 피연산자들에 액세스한다. 명령어는 그 명령어의 일부의 값을 이용하여 직접 피연산자를 제공할 수 있고, 범용 레지스터 또는 전용 레지스터(예를 들어, 부동소수점 레지스터)를 명시적으로 가리키는 하나 이상의 레지스터 필드를 제공할 수 있다. 명령어는 피연산자들로서 연산 코드 필드에 의해 식별된 암시된 레지스터들을 활용할 수 있다. 명령어는 피연산자들을 위한 메모리 위치를 활용할 수 있다. 피연산자의 메모리 위치는 z/아키텍처 장 변위 기능(long displacement facility)에 의해 예시된 바와 같이 레지스터, 직접 필드, 또는 레지스터와 직접 필드의 조합에 의해 제공될 수 있고, 여기서 명령어는, 예를 들어 메모리에 피연산자의 어드레스를 제공하도록 함께 더해지는, 베이스 레지스터, 색인 레지스터 및 직접 필드(변위 필드)를 정의한다. 여기서, 위치는 특별히 언급하지 않는 한 메인 메모리(주 저장 장치) 내의 위치를 암시한다.
도 4C를 참조해 보면, 프로세서는 로드/저장 유닛(310)을 이용하여 저장 장치에 액세스한다. 로드/저장 유닛(310)은, 메모리(303)의 타겟 피연산자의 어드레스를 어어 그 피연산자를 레지스터(309) 또는 다른 메모리(303) 위치에 로딩함으로써 로드 동작을 수행할 수 있고, 또는 메모리(303)의 타겟 피연산자의 어드레스를 얻고 레지스터(309)나 다른 메모리(303) 위치로부터 얻은 데이터를 메모리(303)의 타겟 피연산자 위치에 저장함으로써 저장 동작을 수행할 수 있다. 로드/저장 유닛(310)은, 추정식일 수 있으며, 명령어 시퀀스에 대하여 비순차적으로 메모리에 액세스할 수 있지만, 명령어들이 순서대로 실행된 프로그램에 대한 외관을 유지해야 한다. 로드/저장 유닛(310)은, 범용 레지스터(309), 디코드/배정 유닛(306), 캐시/메모리 인터페이스(303) 또는 기타 요소들(455)과 통신할 수 있고, 저장 어드레스들을 계산하고 피연산자들을 순서대로 유지하기 위한 파이프라인 시퀀싱을 제공하도록 다양한 레지스터 회로들, ALU(458) 및 제어 로직(463)을 포함한다. 일부 동작들은 비순차적으로 될 수 있지만, 로드/저장 유닛은 이렇게 비순차적 동작들을 프로그램에게는 순서대로 수행된 것으로서 보이게 하는 기능성을 제공하며, 이는 당해 기술에 널리 알려져 있다.
바람직하게, 애플리케이션 프로그램이 "보는" 어드레스들은 종종 가상 어드레스들이라 칭한다. 가상 어드레스는 때때로 "논리 어드레스" 및 "유효 어드레스"라 칭한다. 이러한 가상 어드레스들은 가상 어드레스를 오프셋 값으로 간단히 프레픽싱(prefix)하는 기술과 하나 이상의 변환 테이블을 통해 가상 어드레스를 변환하는 기술을 포함하는 다양한 동적 어드레스 변환(DAT; 312) 기술들 중 하나에 의해 물리적 메모리 위치로 리다이렉트(redirect)된다는 점에서 가상적이며, 여기서, 변환 테이블들은 바람직하게 적어도 세그먼트 테이블과 페이지 테이블을 단독으로 또는 조합하여 포함하고, 바람직하게, 세그먼트 테이블은 페이지 테이블을 가리키는 엔트리를 갖지만, 이러한 기술들의 예로 한정되지는 않는다. z/아키텍처에서는, 영역 제1 테이블, 영역 제2 테이블, 영역 제3 테이블, 세그먼트 타이틀 및 선택 사항인 페이지 테이블을 포함하는 변환 계층을 제공한다. 어드레스 변환의 성능은, 가상 어드레스를 연관된 물리적 메모리 위치에 매핑하는 엔트리들을 포함하는 변환 색인 버퍼(TLB)를 활용함으로써 종종 개선된다. 이 엔트리들은 DAT(312)가 변환 테이블을 이용하여 가상 어드레스를 변환할 때 생성된다. 이어서, 가상 어드레스를 후속 이용함으로써 느린 순차적 변환 테이블 액세스보다는 빠른 TLB의 엔트리를 활용할 수 있다. TLB 콘텐츠는 최저 사용(Least Recently used: LRU)을 포함하는 다양한 대체 알고리즘에 의해 관리될 수 있다.
프로세서가 멀티프로세서 시스템의 프로세서인 경우, 각 프로세서는 일관성을 위해 연동된 I/O, 캐시, TLB 및 메모리와 같은 공유 자원들을 유지하는 역할을 한다. 통상적으로, 캐시 일관성을 유지하는 데 "스누프" 기술을 활용한다. 스누프 환경에서, 각 캐시 라인은, 공유를 용이하게 하도록, 공유 상태, 배타적 상태, 변경된 상태, 무효 상태 등 중 임의의 하나의 상태에 있는 것으로서 표시될 수 있다.
I/O 유닛들(304)은 예를 들어 테이프, 디스크, 프린터, 디스플레이 및 네트워크를 포함하는 주변 장치에 부착하기 위한 수단을 프로세서에게 제공한다. I/O 유닛들은 소프트웨어 드라이버들에 의해 컴퓨터 프로그램에게 종종 제시된다. IBM의 z/시리즈와 같은 메인프레임에서, 채널 어댑터 및 오픈 시스템 어댑터는 운영 체제와 주변 장치들 간에 통신을 제공하는 메인프레임의 I/O 유닛들이다.
z/Architecture Principles of Operation에 근거한 아래 설명은 컴퓨터 시스템의 계층도(architectural view)를 설명한다.
저장 장치:
컴퓨터 시스템은 어드레싱, 보호, 및 참조와 변경 레코딩뿐만 아니라 주 저장 장치의 정보를 포함한다. 어드레싱의 일부 양태는 어드레스의 포맷, 어드레스 공간의 개념, 어드레스들의 다양한 유형, 하나의 유형의 어드레스가 다른 하나의 유형의 어드레스로 변환되는 방식을 포함한다. 일부의 주 저장 장치는 영구 할당된 저장 위치들을 포함한다. 주 저장 장치는 직접 어드레싱 가능한 데이터의 빠른 액세스 저장을 시스템에게 제공한다. 데이터와 프로그램 모두는 처리될 수 있기 전에 (입력 장치들로부터) 주 저장 장치 내로 로딩되어야 한다.
주 저장 장치는 때때로 캐시라 칭하는 하나 이상의 보다 작고 보다 빠른 액세스 버퍼 저장 장치를 포함할 수 있다. 캐시는 통상적으로 그리고 물리적으로 CPU 또는 I/O 프로세서와 연관된다. 별개의 저장 매체의 사용 및 물리적 구성의 효과는 일반적으로 성능을 제외하고는 프로그램에 의해 주목될 정도는 아니다.
별도의 캐시들은 명령어 및 데이터 피연산자들를 위해 유지될 수 있다. 캐시 내의 정보는 캐시 블록 또는 캐시 라인(또는 간략하게 라인)이라 칭하는 정수 경계 상에서 인접 바이트들로 유지된다. 모델은 캐시 라인의 크기를 바이트로 리턴하는 EXTRACT CACHE ATTRIBUTE 명령어를 제공할 수 있다. 또한, 모델은 데이터 또는 명령어 캐시로 저장 장치를 미리 페치하는 데에 영향을 끼치거나 캐시로부터의 데이터 해제에 영향을 끼치는 PREFETCH DATA 및 PREFETCH DATA RELATIE LONG 명령어들을 제공할 수 있다.
저장 장치는 비트들의 긴 수평 스트링으로 간주된다. 대부분의 연산에 있어서, 저장 장치에 대한 액세스는 좌측에서 우측 시퀀스로 진행된다. 비트들의 스트링은 8비트의 단위들로 분할된다. 8비트 단위를 바이트라 칭하며, 이는 모드 정보 포맷의 기본 구축 블록이다. 저장 장치 내의 각 바이트 위치는 음이 아닌 고유한 정수에 의해 식별되고, 이는 그 바이트 위치의 어드레스이며, 또는 간단하게 바이트 어드레스이다. 인접하는 바이트 위치들은 시퀀스가 좌측에서 0으로 시작하여 우측으로 향하는 연속 어드레스들을 갖는다. 어드레스들은 부호 없는 이진 정수들이며, 24, 31, 또는 64비트이다.
정보는 저장 장치와 CPU 또는 채널 서브시스템 간에 한번에 1바이트 또는 바이트들의 그룹으로 송신된다. 특별히 언급하지 않는 한, 저장 장치 내의 바이트들의 그룹은 그룹의 최상위 바이트에 의해 어드레싱된다. 그룹 내의 바이트들의 수는 수행될 연산에 의해 암시되거나 명시적으로 특정된다. CPU 연산에서 사용되는 경우, 바이트들의 그룹을 필드라 칭한다. 바이트들의 각 그룹 내에서, 비트들은 좌측에서 우측 시퀀스로 넘버링된다. 최상위 비트들은 때때로 고차 비트들이라 칭하며 최하위 비트들은 저차 비트들이라 칭한다. 그러나, 비트 번호들은 저장 장치 어드레스들이 아니다. 바이트만이 어드레싱될 수 있다. 저장 장치 내의 바이트의 개별적인 비트들에 대하여 연산하려면, 전체 바이트에 액세스할 필요가 있다. 바이트 내의 비트들은 좌측에서 우측으로 0 내지 7로 넘버링된다. 어드레스의 비트들은 24비트 어드레스에 대하여 8-31 또는 40-63으로 넘버링되거나 31비트 어드레스에 대하여 1-31 또는 33-63으로 넘버링될 수 있으며, 64비트 어드레스에 대하여 0-63으로 넘버링된다. 다수의 비트들의 임의의 다른 고정 길이 포맷 내에서, 포맷을 이루는 비트들은 0부터 시작하여 연속으로 넘버링된다. 에러 검출을 위해, 그리고 바람직하게는 정정을 위해, 각 바이트 또는 바이트들의 그룹과 함께 하나 이상의 체크 비트를 송신할 수 있다. 이러한 체크 비트들은 기계에 의해 자동 생성되며, 프로그램에 의해 직접 제어될 수 없다. 저장 용량은 바이트 수로 표현된다. 저장 피연산자 필드의 길이가 명령어의 연산 코드에 의해 암시되면, 필드는 고정 길이를 갖는 것이며, 이 고정 길이는 1, 2, 4, 8, 또는 16바이트일 수 있다. 일부 명령어들을 위해 보다 많은 필드들을 암시할 수 있다. 저장 피연산자 필드의 길이가 암시되지 않고 명시적으로 선언되면, 이 필드는 가변 길이를 갖는 것이다. 가변 길이 피연산자들의 길이는 1바이트의 증분만큼 가변될 수 있다. 정보가 저장 장치에 배치되면, 저장 장치로의 물리적 경로의 폭이 저장되고 있는 필드의 길이보다 크더라도, 지정 필드에 포함되어 있는 바이트 위치들의 콘텐츠만이 대체된다.
정보의 소정 단위들은 저장 장치의 정수 경계 상에 있어야 한다. 경계는, 경계의 저장 어드레스가 단위 길이의 바이트로 된 배수인 경우 정보 단위에 대하여 정수라 칭한다. 정수 경계 상의 2, 4, 8, 16바이트의 필드들에 특정명들을 부여한다. 하프워드(halfword)는 2바이트 경계 상의 두 개의 연속되는 바이트들의 그룹이며 명령어들의 기본 구축 블록이다. 워드는 4비트 경계 상의 네 개의 연속 바이트들의 그룹이다. 더블워드는 8바이트 경계 상의 8개의 연속 바이트들의 그룹이다. 쿼드워드(quadword)는 16바이트 경계 상의 16개의 연속 바이트들의 그룹이다. 저장 어드레스들이 하프워드, 워드, 더블워드, 쿼드워드를 지정하는 경우, 어드레스의 이진 표현은, 1, 2, 3, 또는 4개인 최하위 0비트들을 각각 포함한다. 명령어들을 2바이트 정수 경계들 상에 있어야 한다. 대부분의 명령어들의 저장 피연산자들은 경계 정렬 요구 사항을 갖지 않는다.
명령어과 데이터 피연산자를 위한 별도의 캐시들을 구현하는 모델에서는, 저장 장치가 후속 페치되는 명령어들을 변경하는지에 상관없이, 명령어들이 후속 페치되는 캐시 라인 내로 프로그램이 저장되면 상당한 지연을 겪을 수 있다.
명령어:
통상적으로, CPU의 연산은 한번에 하나씩 좌측에서 우측으로 저장 장치 어드레스들의 올림 차순으로 순차적으로 실행되는 저장 장치의 명령어들에 의해 제어된다. 순차 연산의 변경은 브랜칭, PSW 로드, 인터럽션, 신호 프로세서 순서, 또는 수동 간섭에 의해 야기될 수 있다.
바람직하게, 명령어는 두 개의 주요 부분을 포함한다.
* 수행될 연산을 특정하는 연산 코드(op code)
* 선택 사항으로, 참여되는 피연산자들의 지정
z/아키텍처의 명령어 포맷들은 도 5A 내지 도 5F에 도시되어 있다. 명령어는 간단히 연산 코드(501)를 제공하거나, 연산 코드(Opcode) 및 메모리 또는 레지스터에 피연산자들을 로딩하도록 직접 피연산자 또는 레지스터 특정자를 포함하는 다양한 필드들을 제공할 수 있다. 연산 코드는 하나 이상의 특정한 범용 레지스터들(GPR)과 같은 암시 자원들(피연산자 등)이 사용될 것임을 하드웨어에게 나타낼 수 있다. 피연산자들은 세 개의 클래스, 즉, 레지스터에 위치하는 피연산자, 직접 피연산자 및 저장 장치의 피연산자로 그룹화될 수 있다. 피연산자들은 명시적으로 또는 암시적으로 지정될 수 있다. 레지스터 피연산자들은 연산 코드에 의해 식별된 레지스터의 유형과 함께, 범용 레지스터, 부동소수점 레지스터, 액세스 레지스터, 또는 제어 레지스터에 위치할 수 있다. 피연산자를 포함하는 레지스터는 명령어에서 R 필드라 칭하는 4비트 필드의 레지스터를 식별함으로써 특정된다. 일부 명령어에 대해서는, 암시적으로 지정된 레지스터 내에 피연산자가 위치하며, 이 레지스터는 연산 코드에 의해 암시된다. 직접 피연산자들은 명령어 내에 포함되고, 직접 피연산자를 포함하는 8비트, 16비트, 또는 32비트 필드를 I 필드라 칭한다. 저장 장치의 피연산자들은 암시된 길이를 가질 수 있고, 즉, 비트 마스크에 의해 특정될 수 있고, 명령어에서 L 필드라 칭하는 4비트 또는 8비트 길이 명세에 의해 특정될 수 있고, 또는, 범용 레지스터의 콘텐츠에 의해 특정된 길이를 가질 수 있다. 저장 장치의 피연산자들의 어드레스들은 범용 레지스터의 콘텐츠를 어드레스의 일부로서 사용하는 포맷에 의해 특정된다. 이는,
축약된 표기를 이용함으로써 완전한 어드레스를 특정하고,
피연산자에 대하여 범용 레지스터를 채용하는 명령어들을 이용하여 어드레스 조절을 수행하고,
명령어 스트림의 변경 없이 프로그램 수단에 의해 어드레스들을 수정하고,
다른 프로그램들로부터 수신된 어드레스들을 직접 이용함으로써 데이터 영역들의 위치와는 독립적인 연산을 행할 수 있게 한다.
저장 장치를 참조하는 데 사용되는 어드레스는 명령어의 R 필드에 의해 지정된 레지스터에 포함되거나 베이스 어드레스, 색인 및 변위로부터 계산되고, 명령어에서 B, X, D 필드들에 의해 각각 특정된다. CPU가 액세스 레지스터 모드에 있는 경우, B 또는 R 필드는 어드레스를 특정하도록 사용되는 것에 더하여 액세스 레지스터를 지정할 수 있다. 명령어들의 실행을 설명하기 위해서는, 바람직하게, 피연산자들을 제1 및 제2 피연산자들로 지정하고 일부 경우에는 제3 및 제4 피연산자들로 한다. 일반적으로, 두 개의 피연산자가 명령어 실행에 참여하고, 그 결과는 제1 피연산자를 대체한다.
명령어는 길이에 있어서 한 개, 두 개 또는 세 개의 하프워드이며, 하프워드는 경계 상의 저장 장치 내에 위치해야 한다. 명령어 포맷들을 도시하는 도 5A 내지 도 5F를 참조해 보면, 각 명령어는 25개의 기본 포맷들 중 하나의 포맷으로 되어 있다. 즉, E 501, 1 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, SIL 556, SIY 532, SS 533 534 535 536 537, SSE 541 및 SSF 542이고, RRF의 변형이 세 개이고, RI, REL, RS, RSY의 변형이 두 개이고, RIE와 SS의 변형이 다섯 개이다.
포맷 명칭들은, 일반적인 용어로는, 연산에 참여하는 피연산자들의 클래스들 및 필드들에 관한 일부 상세를 가리킨다.
* RIS는 register-and-register 연산 및 storage 연산을 나타낸다.
* RRS는 register-and-register 연산 및 storage 연산을 나타낸다.
* SIL은 16비트 직접 필드와 함께 storage-and-immediate 연산을 나타낸다.
I, RR, RS, RSI, RX, SI 및 SS 포맷들에서는, 명령어의 제1 바이트가 연산 코드를 포함한다. E, RRE, RRF, S, SIL 및 SSE 포맷들에서는, 명령어의 처음 2바이트가 연산 코드를 포함하지만, S 포맷의 일부 명령어들에서는 연산 코드가 제1 바이트에만 있다. RI 및 RIL 포맷들에서는, 연산 코드가 명령어의 비트 위치 12-15 및 제1 바이트에 있다. RIE, RIS, RRS, RSL, RSY, RXE, RXF, RXY 및 SIY 포맷들에서는, 연산 코드가 명령어의 제6 바이트 및 제1 바이트에 있다. 연산 코드의 제1 바이트의 처음 2비트 또는 연산 코드의 바이트만이 이하와 같이 명령어의 길이와 포맷을 특정한다.
RR, RRE, RRF, RRR, RX, RXE, RXF, RXY, RS, RSY, RSI, RI, RIE 및 RIL 포맷들에서, RI 필드에 의해 지정된 레지스터의 콘텐츠는 제1 피연산자라 칭한다. 제1 피연산자를 포함하는 레지스터는 때로는 "제1 피연산자 위치"라 칭하며 때로는 "레지스터 R1"이라 칭한다. RR, RRE, RRF 및 RRR 포맷들에서, R2 필드는 제2 피연산자를 포함하는 레지스터를 지정하고, R2 필드는 R1과 동일한 레지스터를 지정할 수 있다. RRF, RXF, RS, RSY, RSI 및 RIE 포맷들에서, R3 필드의 사용은 명령어에 의존한다. RS 및 RSY 포맷들에서, R3 필드는 대신에 마스크를 특정하는 M3 필드이어도 된다. R 필드는 범용 명령어의 범용 레지스터 또는 액세스 레지스터, 제어 명령어의 범용 레지스터, 및 부동소수점 명령어의 부동소수점 레지스터 또는 범용 레지스터를 지정한다. 범용 레지스터와 제어 레지스터에 있어서, 레지스터 피연산자는 명령어에 따라 64비트 레지스터의 비트 위치 32-63에 있거나 전체 레지스터를 차지한다.
I 포맷에서, 8비트 직접 데이터 필드의 콘텐츠, 즉, 명령어의 I 필드는 피연산자로서 직접 사용된다. SI 포맷에서, 8비트 직접 데이터 필드의 콘텐츠, 즉, 명령어의 I2 필드는 제2 피연산자로서 직접 사용된다. B1 및 D1 필드들은 길이가 1바이트인 제1 피연산자를 특정한다. SIY 포맷에서, 연산은 D1 필드 대신에 DH1 및 DL1 필드들을 사용한다는 점을 제외하고 동일하다. 명령어들 ADD HALFWORD IMMEDIATE, COMPARE HALFWORD IMMEDIATE, LOAD HALFWORD IMMEDIATE, 및 MULTIPLY HALFWORD IMMEDIATE에 대한 RI 포맷에서, 명령어의 16비트 I2 필드의 콘텐츠는 부호있는 이진 정수로서 직접 사용되고, R1 필드는 명령어에 따라 길이가 32비트 또는 64비트인 제1 피연산자를 특정한다. TEST UNDER MASK (TMHH, TMHL, TMLH, TMLL) 명령어에 대해서는, I2 필드의 콘텐츠가 마스크로서 사용되고, R1 필드는 길이가 64비트인 제1 피연산자를 특정한다.
INSERT IMMEDIATE, AND IMMEDIATE, OR IMMEDIATE 및 LOAD LOGICAL IMMEDIATE 명령어들에 대하여, I2 필드의 콘텐츠는 부호없는 이진 정수로서 또는 논리값으로서 사용되고, R1 필드는 길이가 64비트인 제1 피연산자를 특정한다 RI 및 RSI 포맷들의 상대적 분기 명령어들에 대해서는, 16비트 I2 필드의 콘텐츠는 다수의 하프워드를 지정하는 부호있는 이진 정수로서 사용된다. 이 수는, 분기 명령어의 어드레스에 가산되는 경우, 분기 어드레스를 특정한다. RIL 포맷의 상대적 분기 명령어에 대해서는, I2 필드가 32비트이며 동일한 방식으로 사용된다.
RI 및 RSI 포맷들의 상대적 분기 명령어들에 대해서는, 16비트 I2 필드의 콘텐츠는 다수의 하프워드를 지정하는 부호있는 이진 정수로서 사용된다. 이 수는, 분기 명령어의 어드레스에 가산되는 경우, 분기 어드레스를 특정한다. RIL 포맷의 상대적 분기 명령어에 대해서는, I2 필드는 32비트이며 동일한 방식으로 사용된다. RIE 포맷으로 된 COMPARE IMMEDIATE AND BRANCH RELATIVE 및 COMPARE LOGICAL IMMEDIATE AND BRANCH RELATIVE 명령어들에 대해서는, 8비트 I2 필드의 콘텐츠가 제2 피연산자로서 직접 사용된다. RIE 포맷으로 된 COMPARE IMMEDIATE AND BRANCH, COMPARE IMMEDIATE AND TRAP, COMPARE LOGICAL IMMEDIATE AND BRANCH 및 COMPARE LOGICAL IMMEDIATE AND TRAP 명령어들에 대해서는, 16비트 I2 필드의 콘텐츠가 제2 피연산자로서 직접 사용된다. RIE 포맷으로 된 COMPARE AND BRANCH RELATIVE, COMPARE IMMEDIATE AND BRANCH RELATIVE, COMPARE LOGICAL AND BRANCH RELATIVE 및 COMPARE LOGICAL IMMEDIATE AND BRANCH RELATIVE 명령어들에 대해서는, 16비트 I4 필드의 콘텐츠는, 분기 어드레스를 형성하도록 명령어의 어드레스에 가산되는 다수의 하프워드를 지정하는 부호있는 이진 정수로서 사용된다.
RIL 포맷 명령어들인 ADD IMMEDIATE, ADD LOGICAL IMMEDIATE, ADD LOGICAL WITH SIGNED IMMEDIATE, COMPARE IMMEDIATE, COMPARE LOGICAL IMMEDIATE, LOAD IMMEDIATE 및 MULTIPLY SINGLE IMMEDIATE에 대해서는, 32비트 I2 필드의 콘텐츠가 제2 피연산자로서 직접 사용된다.
RIS 포맷 명령어들에 대해서는, 8비트 I2 필드의 콘텐츠가 제2 피연산자로서 직접 사용된다. SIL 포맷에서는, 16비트 I2 필드의 콘텐츠가 제2 피연산자로서 직접 사용된다. B1 및 D1 필드들은 후술하는 바와 같이 제1 피연산자를 특정한다.
RSL, SI, SIL, SSE 및 대부분의 SS 포맷들에서, B1 필드에 의해 지정된 범용 레지스터의 콘텐츠는 D1 필드의 콘텐츠에 더해져 제1 피연산자 어드레스를 형성하게 된다. RS, RSY, S, SIY, SS 및 SSE 포맷들에서, B2 필드에 의해 지정된 범용 레지스터의 콘텐츠는 D2 필드 또는 DH2 및 DL2 필드들의 콘텐츠에 더해져 제2 피연산자 어드레스를 형성하게 된다. RX, RXE, RXF 및 RXY 포맷들에서, X2 및 B2 필드들에 의해 지정된 범용 레지스터의 콘텐츠는 D2 필드 또는 DH2 및 DL2 필드들의 콘텐츠에 더해져 제3 피연산자 어드레스를 형성하게 된다. RIS 및 RRS 포맷들 그리고 하나의 SS 포맷에서, B4 필드에 의해 지정된 범용 레지스터의 콘텐츠는 D4 필드의 콘텐츠에 더해져 제4 피연산자를 형성하게 된다.
AND (NC), EXCLUSIVE OR (XC), MOVE (MVC), MOVE NUMERICS, MOVE ZONES 및 OR (OC) 명령어들을 대하여 하나의 8비트 길이 필드를 갖는 SS 포맷에서, L은 제1 피연산자 어드레스에 의해 지정된 바이트의 우측에 대한 추가 피연산자 바이트들의 수를 특정한다. 따라서, 제1 피연산자의 바이트들의 길이는 1-256이고, 이는 0 내지 255인 L의 길이 코드에 대응한다. 저장 결과는 제1 피연산자를 대체하고, 이러한 어드레스와 길이에 의해 특정된 필드 밖에 저장되지 않는다. 이 포맷에서, 제2 피연산자는 제1 피연산자와 동일한 길이를 갖는다. EDIT, EDIT AND MARK, PACK ASCII, PACK UNICODE, TRANSLATE, TRANSLATE AND TEST, UNPACK ASCII, 및 UNPACK UNICODE에 적용되는 선행하는 정의의 변형들이 존재한다.
두 개의 길이 필드를 갖는 SS 포맷에서, 그리고 RSL 포맷에서, L1은 제1 피연산자 어드레스에 의해 지정된 바이트의 우측에 대한 피연산자 유형들의 수를 특정한다.
따라서, 제1 피연산자의 바이트 길이는 1-16이고, 이는 0-15인 L1의 길이 코드에 대응한다. 마찬가지로, L2는 제2 피연산자 어드레스에 의해 지정된 위치의 우측에 대한 추가 피연산자 유형들의 수를 특정한다. 결과들은 제1 피연산자를 대체하고 이러한 어드레스와 길이에 의해 특정된 필드 밖에는 저장되지 않는다. 제1 피연산자가 제2 피연산자보다 길면, 제2 피연산자는 제1 피연산자의 길이까지 제로로 좌측 상에서 연장된다. 이러한 연장은 저장 장치의 제2 피연산자를 수정하지 않는다. 두 개의 R 필드를 갖는 SS 포맷에서는, MOVE TO PRIMARY, MOVE TO SECONDARY, 및 MOVE WITH KEY 명령어들에 의해 사용되는 바와 같이, R1 필드에 의해 특정된 범용 레지스터의 콘텐츠는 참 길이(true length)라 칭하는 32비트 부호 없는 값이다. 피연산자들은 유효 길이라 칭하는 길이를 갖는다. 유효 길이는 어느 쪽이 더 짧든 간에 참 길이 또는 256과 같다. 명령어들은 참 길이에 의해 특정된 바이트들의 수를 이동시키는 루프의 프로그래밍을 용이하게 하도록 조건 코드를 설정한다. 또한, 두 개의 R 필드를 갖는 SS 포맷을 이용하여, LOAD MULTIPLE DISJOINT 명령어를 위한 두 개의 저장 피연산자들 및 레지스터들의 범위를 특정하고 PERFORM LOCKED OPERATION 명령어를 위한 하나 이상의 레지스터와 하나 이상의 저장 피연산자를 특정한다.
B1, B2, X2, 또는 B4 필드들 중 임의의 필드의 제로는 대응하는 어드레스 성분이 없음을 나타낸다. 부재인 성분에 대해서는, 범용 레지스터(0)의 콘텐츠에 상관 없이 제로를 이용하여 중간 합을 통지한다. 제로의 변위는 특별한 의미를 갖지 않는다.
현재 PSW의 비트들 31과 32는 어드레싱 모드 비트들이다. 비트 31은 연장된 어드레싱 모드 비트이고, 비트 32는 기본 어드레싱 모드 비트이다. 이러한 비트들은 어드레스 발생에 의해 생성되는 유효 어드레스의 크기를 제어한다. 현재 PSW의 비트들 31과 32 모두가 제로이면, CPU는 24비트 어드레싱 모드에 있고, 24비트 명령어 및 피연산자 유효 어드레스들이 생성된다. 현재 PSW의 비트 31이 제로이고 비트 32가 1이면, CPU는 31비트 어드레싱 모드에 있고, 31비트 명령어 및 피연산자 유효 어드레스들이 생성된다. 현재 PSW의 비트들 31과 32 모두가 1이면, CPU는 64비트 어드레싱 모드에 있고, 64비트 명령어 및 피연산자 유효 어드레스들이 생성된다. CPU에 의한 명령어 실행은 피연산자들과 명령어들의 어드레스들의 생성을 포함한다.
현재 PSW에 의해 지정된 위치로부터 명령어가 페치되면, 명령어 어드레스는 그 명령어의 바이트 수만큼 증분되고, 명령어가 실행된다. 이어서, 명령어 어드레스의 새로운 값을 이용하여 시퀀스의 다음 명령어를 페치함으로써 동일한 단계들이 반복된다. 24비트 어드레싱 모드에서, 명령어 어드레스들은 명령어 어드레스 0에서의 하프워드가 뒤따르는 명령어 어드레스 224-2에서의 하프워드를 이용하여 랩어라운드(wrap around)된다. 따라서, 24비트 어드레싱 모드에서, 명령어 어드레스를 갱신한 결과, PSW 비트 위치(104)의 어떠한 캐리아웃(carry-out)도 손실된다. 31비트 또는 64비트 어드레싱 모드에서, 명령어 어드레스들은 마찬가지로 명령어 어드레스 0에서의 하프워드가 뒤따르는 명령어 어드레스 231-2 또는 264-2에서의 하프워드를 이용하여 각각 랩어라운드한다. PSW 비트 위치 97 또는 64의 각 캐리아웃은 손실된다.
저장 장치를 참조하는 피연산자 어드레스는 중간 값으로부터 유도되고, 이 중간 값은 명령어의 R 필드에 의해 지정된 레지스터에 포함되어 있거나 세 개의 이진 수들인, 베이스 어드레스, 색인, 변위의 합으로부터 계산된다. 베이스 어드레스(R)는 명령어에서 B 필드라 칭하는 4비트 필드에서 프로그램에 의해 특정된 범용 레지스터의 64비트 수이다. 베이스 어드레스는 각 프로그램과 데이터 영역을 독립적으로 어드레싱하는 수단으로서 이용될 수 있다. 어레이형 계산에서는, 어레이의 위치를 지정할 수 있으며, 레코드형 처리에서는, 레코드를 식별할 수 있다. 베이스 어드레스는 전체 저장 장치에 대한 어드레싱을 제공한다. 또한, 베이스 어드레스는 색인을 위해 사용될 수 있다.
색인(X)은 명령어에서 X 필드라 칭하는 4비트 필드에서 프로그램에 의해 지정된 범용 레지스터에 포함된 64비트 수이다. 이 색인은 RX, RXE, RXY 포맷 명령어들에 의해 특정된 어드레스에만 포함될 수 있다. RX, RXE, RXF, RXY 포맷 명령어들은 이중 색인화를 허용함, 즉, 색인을 이용하여 어레이 내의 요소의 어드레스를 제공할 수 있다.
변위(D)는 명령어에서 D 필드라 칭하는 필드에 포함된 12비트 또는 20비트 수이다. 12비트 변위는 부호 없으며, 베이스 어드레스에 의해 지정된 위치를 넘어 4,095 바이트까지의 상대적 어드레싱을 제공한다. 20비트 변위는 부호 있으며, 베이스 어드레스 위치를 넘어 524,287 바이트까지의 상대적 어드레싱 또는 그 전의 524,288 바이트까지의 상대적 어드레싱을 제공한다. 어레이형 계산에서는, 변위를 이용하여 요소에 연관된 많은 항목들 중 하나를 특정할 수 있다. 레코드의 처리에서는, 변위를 이용하여 레코드 내의 항목들을 식별할 수 있다. 12비트 변위는 소정의 포맷의 명령어들의 비트 위치들 20-31에 있다. 일부 포맷들의 명령어들에서, 제2 12비트 변위도 명령어에서 비트 위치 36-47에 있다.
20비트 변위는 RSY, RXY, 또는 SIY 포맷으로 된 명령어에만 있다. 이러한 명령어들에서, D 필드는 비트 위치 20-31에서의 DL(로우) 필드와 비트 위치 32-39에서의 DH(하이) 필드로 이루어진다. 장 변위 기능이 설치되면, 변위의 수치는 DH 필드의 콘텐츠를 DL 필드의 콘텐츠의 좌측에 첨부함으로써 형성된다. 장 변위 기능이 설치되지 않으면, 변위의 수치는 8개의 제로 비트를 DL 필드의 콘텐츠의 좌측에 첨부함으로써 형성되고, DH 필드의 콘텐츠는 무시된다.
중간 합을 형성할 때, 베이스 어드레스 및 색인은 64비트 이진 정수들로서 취급된다. 12비트 변위는 12비트 부호 없는 이진 정수로서 취급되고, 52개의 제로 비트는 좌측에 첨부된다. 20비트 변위는 20비트 부호 있는 이진 정수로서 취급되고, 부호(sign) 비트와 동일한 44비트는 좌측에 첨부된다. 3이 64비트 이진 수들로서 추가되며, 오버플로우는 무시한다. 합의 길이는 항상 64비트이고, 이 합은 일반화된 어드레스를 형성하도록 중간 값으로서 사용된다. 중간 값의 비트들은 0-63으로 넘버링된다. B1, B2, B2, 또는 B4 필드들 중 임의의 필드의 제로는 대응하는 어드레스 성분이 없음을 나타낸다. 이렇게 없는 성분에 대해서는, 범용 레지스터(0)의 콘텐츠에 상관없이 중간 합을 형성하는 데 제로를 이용한다. 제로인 변위는 특별한 의미가 없다.
R 필드에 의해 지정된 범용 레지스터의 콘텐츠를 사용하여 저장 장치의 피연산자를 어드레싱하는 것을 명령어 설명이 특정하면, 레지스터 콘텐츠는 64비트 중간 값으로서 사용된다.
명령어는 어드레스 계산에 대하여 그리고 피연산자의 위치와 동일한 범용 레지스터를 지정할 수 있다. 어드레스 계산은 레지스터들이 행여 연산에 의해 변경되기 전에 완료된다. 개별적인 명령어 정의에서 특별히 다르게 언급하지 않는 한, 일반화된 피연산자 어드레스는 저장 장치의 피연산자의 최상위 바이트를 지정한다.
일반화된 피연산자 어드레스의 길이는 항상 64비트이고, 비트들은 0-63으로 넘버링된다. 중간 값으로부터 일반화된 어드레스가 얻어지는 방식은 현재의 어드레싱 모드에 의존한다. 24비트 어드레싱 모드에서, 중간 값의 비트들 0-39는 무시되고, 일반화된 어드레스의 비트들 0-39는 제로로 되고, 중간 값의 비트들 40-63은 일반화된 어드레스의 비트들 40-63으로 된다. 31비트 어드레싱 모드에서, 중간 값의 비트들 0-32는 무시되고, 일반화된 어드레스의 비트들 0-32는 제로로 되며, 중간 값의 비트들 33-63은 일반화된 어드레스의 비트들 33-63으로 된다. 64비트 어드레싱 모드에서, 중간 값의 비트들 0-63은 일반화된 어드레스의 비트들 0-63으로 된다. 색인 및 베이스 어드레스 레지스터들에서 음의 값들을 이용해도 된다. 이러한 값들의 비트들 0-32는 31비트 어드레싱 모드에서 무시되고, 비트들 0-39는 24비트 어드레싱 모드에서 무시된다.
분기 명령어에 대해서는, 분기를 취할 때 실행될 다음 명령어의 어드레스를 분기 어드레스라 칭한다. 분기 명령어에 따라, 명령어 포맷은 RR, RRE, RX, RXY, RS, RSY, RSI, RI, RIE, 또는 RIL일 수 있다. 분기 어드레스는, RS, RSY, RX 및 RXY 포맷들에서 베이스 어드레스, 변위에 의해 특정되고, RX 및 RX 포맷들에서 색인에 의해 특정된다. 이러한 포맷들에서, 중간 값의 생성은 피연산자-어드레스 중간 값의 생성과 동일한 규칙들을 따른다. RR 및 RRE 포맷들에서, R2 필드에 의해 지정된 범용 레지스터의 콘텐츠는 분기 어드레스가 형성되는 중간 값으로서 사용된다. 범용 레지스터(0)는 분기 어드레스를 갖는 것으로서 지정될 수 없다. R2 필드에서의 제로 값으로 인해 브랜칭 없이 명령어가 실행된다.
상대적 분기 명령어들은 RSI, RI, RIE 및 RIL 포맷들로 된 것이다. 상대적 분기 명령어들을 위한 RSI, RI, RIE 포맷들에서, I2 필드의 콘텐츠는 다수의 하프워드를 지정하는 16비트 부호 있는 이진 정수로서 취급된다. RIL 포맷에서, I2 필드의 콘텐츠는 다수의 하프워드를 지정하는 32비트 부호 있는 이진 정수로서 취급된다. 분기 어드레스는 상대적 분기 명령어의 어드레스에 추가된 I2 필드에 의해 지정된 하프워드들의 수이다.
RSI, RI, RIE 또는 RIL 포맷의 상대적 분기 명령어를 위한 64비트 중간 값은 두 개의 가수(addend)의 합이며, 이때 비트 위치 0으로부터의 오버플로우는 무시하나. RSI, RI 또는 RIE 포맷에서, 제1 가수는 우측에 첨부된 하나의 제로 비트 및 좌측에 첨부된 콘텐츠의 부호 비트와 동일한 47비트를 갖는 I2 필드의 콘텐츠이고, COMPARE AND BRANCH RELATIVE, COMPARE IMMEDIATE AND BRANCH RELATIVE, COMPARE LOGICAL AND BRANCH RELATIVE 및 COMPARE LOGICAL IMMEDIATE AND BRANCH RELATIVE를 위한 경우를 제외하고, 제1 가수는 I2 필드를 위해 전술한 바와 같이 첨부된 비트들을 갖는 I4 필드의 콘텐츠이다. RIL 포맷에서, 제1 가수는 우측에 첨부된 하나의 제로 비트 및 좌측에 첨부된 콘텐츠의 부호 비트와 동일한 31비트를 갖는 I2 필드의 콘텐츠이다. 모든 포맷들에서, 제2 가수는 분기 명령어의 64비트 어드레스이다. 분기 명령어의 어드레스는 다음 순차 명령어를 어드레싱하도록 그 어드레스가 갱신되기 전에 PSW에서의 명령어 어드레스이고, 또는 EXECUTE이 사용되는 경우 EXECUTE 명령어의 타겟의 어드레스이다. 24비트 또는 31비트 어드레싱 모드에서 EXECUTE이 사용되면, 분기 명령어의 어드레스는 좌측에 첨부된 40개 또는 33개의 제로를 각각 갖는 타겟 어드레스이다.
분기 어드레스의 길이는 항상 64비트이고, 이 분기 어드레스의 비트들은 0-63으로 넘버링된다. 분기 어드레스는 현재 PSW의 비트들 64-127로 대체된다. 중간 값으로부터 분기 어드레스가 얻어지는 방식은 어드레싱 모드에 의존한다. 어드레싱 모드를 변경하는 이러한 분기 명령어들에 대해서는, 새로운 어드레싱 모드를 사용한다. 24비트 어드레싱 모드에서, 중간 값의 비트들 0-39는 무시되고, 분기 어드레스의 비트들 0-39는 제로로 되고, 중간 값의 비트들 40-63은 분기 어드레스의 비트들 40-63으로 된다. 31비트 어드레싱 모드에서, 중간 값의 비트들 0-32는 무시되고, 분기 어드레스의 비트들 0-32는 제로로 되고, 중간 값의 비트들 33-63은 분기 어드레스의 비트들 33-63을 된다. 64비트 어드레싱 모드에서, 중간 값의 비트들 0-63은 분기 어드레스의 비트들 0-63으로 된다.
여러 개의 분기 명령어들에 있어서, 브랜칭은 특정 조건의 만족에 의존한다. 조건이 만족되지 않으면, 분기가 취해지지 않고, 일반적인 순차적 명령어가 계속 실행되고, 분기 어드레스가 사용되지 않는다. 분기가 취해지면, 분기 어드레스의 비트들 0-63이 현재 PSW의 비트들 64-127을 대체한다. 분기 동작의 일부로서 저장 장치에 액세스하는 데에는 분기 어드레스를 이용하지 않는다. 홀수 분기 어드레스로 인한 사양 예외(specification exception) 및 분기 위치에서의 명령어으로 인한 액세스 예외는 분기 동작의 일부로서 인식되지 않으며 대신에 분기 위치에서의 명령어 실행과 연관된 예외로서 인식된다.
BRANCH AND SAVE와 같은 분기 명령어는, 분기 어드레스 계산을 위한 것이며 피연산자의 위치와 동일한 범용 레지스터를 지정할 수 있다. 분기 어드레스 계산은 연산의 나머지가 수행되기 전에 완료된다.
제4항 "Control"에 설명되어 있는 프로그램 상태 워드(PSW)는 적절한 프로그램 실행에 필요한 정보를 포함한다. PSW는 명령어 시퀀싱을 제어하고 현재 실행 중인 프로그램에 관한 CPU의 상태를 유지하여 나타내는 데 사용된다. 활성 또는 제어 중인 PSW를 현재 PSW라 칭한다. 분기 명령어들은 결정, 루프 제어 및 서브루틴 링크의 기능들을 수행한다. 분기 명령어는 새로운 명령어 어드레스를 현재 PSW에 도입함으로써 명령어 시퀀싱에 영향을 끼친다. 16비트 I2 필드의 상대적 분기 명령어들은 베이스 레지스터를 사용하지 않고 분기 명령어의 위치에 대하여 64K-2 바이트 또는 -64K 바이트까지의 오프셋에 있는 위치에 대한 브랜칭을 허용한다. 32비트 I2 필드의 상대적 분기 명령어들은 베이스 레지스터를 사용하지 않고 분기 명령어의 위치에 대하여 +4G - 2 바이트 또는 -4G 바이트까지의 오프셋에 있는 위치에 대한 브랜칭을 허용한다.
결정을 위한 기능들은 BRANCH ON CONDITION, BRANCH RELATIVE ON CONDITION, 및 BRANCH RELATIVE ON CONDITION LONG 명령어들에 의해 제공된다. 이러한 명령어들은 대부분의 산술 연산, 논리 연산 및 I/O 연산의 결과를 반영하는 조건 코드를 검사한다. 두 개의 비트로 구성되는 조건 코드는 네 개의 가능성있는 조건 코드 설정, 즉, 0, 1, 2, 3을 제공한다.
임의의 설정의 특정 의미는 조건 코드를 설정하는 동작에 의존한다. 예를 들어, 조건 코드는 이러한 조건들을 제로, 넌제로로 반영하고, 제1 피연산자를 하이(high), 동일, 오버플로우로 반영하고, 서브채널들을 사용중(busy)으로 반영한다. 일단 설정되면, 조건 코드는 다른 조건 코드를 설정되게 하는 명령어에 의해 수정될 때까지 변경되지 않는다.
루프 제어는 어드레스 산술 및 카운팅 연산들의 출력을 테스트하도록 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 모두는 R1 필드를 갖는다. 이들은 명령어에 의존하는 필드들에 의해 분기 어드레스를 형성한다. 이 명령어들의 동작들은 아래와 같이 요약된다.
* 24비트 어드레싱 모드에서, 전술한 두 가지 명령어는 리턴 어드레스를 범용 레지스터 R1의 비트 위치들 40-63에 두고 이 레지스터의 비트들 0-31을 그대로 둔다. BRANCH AND LINK는 명령어를 위한 명령어 길이 코드를 두고 또한 현재의 PSW로부 터의 조건 코드와 프로그램 마스크를 범용 레지스터 R1의 비트 위치들 32-39에 둔다. BRANCH AND SAVE는 이러한 비트 위치들에 제로를 둔다.
* 31비트 어드레싱 모드에서, 전술한 두 가지 명령어는 리턴 어드레스를 범용 레지스터 R1의 비트 위치들 33-63에 두고 비트 위치들 32에 1을 두며, 이 범용 레지스터의 비트들 0-31은 그대로 둔다.
* 64비트 어드레싱 모드에서, 전술한 두 가지 명령어는 리턴 어드레스를 범용 레지스터 R1의 비트 위치들 0-63에 둔다.
* 임의의 어드레싱 모드에서, 전술한 두 가지 명령어는 현재 어드레싱 모드의 제어 하에 분기 어드레스를 생성한다. 이 명령어들은 분기 어드레스의 비트들 0-63을 PSW의 비트 위치들 64-127에 둔다. RR 포맷에서, 전술한 두 가지 명령어는 명령어의 R2 필드가 제로이면 브랜칭을 수행하지 않는다.
24비트 또는 31비트 어드레싱 모드에서, BRANCH AND SAVE는 기본 어드레싱 모드 비트, 즉, PSW의 비트 32를 범용 레지스터 R1의 비트 위치 32에 둔다는 것을 알 수 있다. BRANCH AND LINK도 32비트 어드레싱 모드에서 그러하다. 명령어들 BRANCH AND SAVE AND SET MODE 및 BRANCH AND SET MODE는 링크 동안 어드레싱 모드의 변경이 요구될 때 사용하기 위한 것이다. 이러한 명령어들은 R1 및 R2 필드들을 갖는다. 이 명령어들의 동작들은 이하와 같이 요약된다.
* BRANCH AND SAVE AND SET MODE는 BRANCH AND SAVE와 동일한 범용 레지스터 R1의 콘텐츠들을 설정한다. 또한, 이 명령어는 연장된 어드레싱 모드 비트, 즉, PSW의 비트 31을 레지스터의 비트 위치 63에 둔다.
* BRANCH AND SET MODE는, R1이 넌제로이면, 다음과 같이 수행된다. 24비트 또는 31비트 모드에서, 이 명령어는 범용 레지스터 R1의 비트 위치 32에 PSW의 비트 32를 두고, 범용 레지스터의 비트들 0-31 및 33-63은 그대로 둔다. 범용 레지스터가 명령어 어드레스를 포함하면 이 범용 레지스터의 비트 63은 제로이어야 한다는 점에 주목한다. 64비트 모드에서, 이 명령어는 범용 레지스터 R1의 비트 위치 63에 PSW의 비트 31(즉 1)을 두고, 범용 레지스터의 비트들 0-62는 그대로 둔다.
* R2가 넌제로인 경우, 전술한 두 개의 명령어는 어드레싱 모드를 설정하고 다음과 같이 브랜칭을 수행한다. 범용 레지스터 R2의 비트 63은 PSW의 비트 위치 31에 둔다. 비트 63이 제로이면, 레지스터의 비트 32는 PSW의 비트 위치 32에 둔다. 비트 63이 1이면, PSW 비트 32가 1로 설정된다. 이어서, 분기 어드레스는, 새로운 어드레싱 모드의 제어 하에, 레지스터의 비트 63이 제로로서 취급되는 것을 제외하고, 레지스터의 콘텐츠로부터 생성된다. 명령어들은 PSW의 비트 위치들 64-127에 분기 어드레스의 비트들 0-63을 둔다. 범용 레지스터 R2의 비트 63은 그대로 두고, 따라서, 호출된 프로그램에 대한 엔트리 때 1로 되어도 된다. R2가 R1과 동일하면, 지정된 범용 레지스터의 결과들은 R1 레지스터를 위해 특정되는 바와 같다.
인터럽션 (컨텍스트 전환):
인터럽션 메커니즘은 구성 외부의 조건들, 구성 내부의 조건들, 또는 CPU 자체 내의 조건들의 결과로 CPU가 자신의 상태를 변경할 수 있게 한다. 조건 유형의 즉각적인 응답 및 높은 우선순위의 조건들에 대한 빠른 응답이 가능하도록, 인터럽션 조건들을 6개의 클래스, 즉, 외부, 입력/출력, 기계 체크, 프로그램, 재시작 및 감시자 호출로 그룹화된다.
인터럽션은 현재 PSW와 구 PSW를 저장하는 것, 인터럽션의 원인을 식별하는 정보를 저장하는 것, 및 새로운 PSW를 페치하는 것으로 이루어진다. 새로운 PSW에 의해 특정될 때 처리를 재개한다. 인터럽션에 저장된 구 PSW는 일반적으로 인터럽션이 발생하지 않았다면 다음으로 실행되었을 명령어의 어드레스를 포함하며, 이에 따라 인터럽트된 프로그램을 재개할 수 있다. 프로그램 및 감시자 호출 인터럽션에 대해서는, 저장된 정보는 최종 실행된 명령어의 길이를 식별하는 코드도 포함하며, 이에 따라 프로그램이 인터럽션의 원인에 응답할 수 있게 한다. 일부 프로그램 조건들에 대하여 정상적 응답이 인터럽션을 야기하는 명령어의 재실행인 경우에, 인터럽션 어드레스는 최종 실행된 명령어를 직접 식별한다.
재시작을 제외하고, 인터럽션은 CPU가 연산 상태에 있을 때에만 발생할 수 있다. 재시작 인터럽션은 CPU가 정지 상태나 연산 상태에 있을 때 발생할 수 있다.
임의의 액세스 예외는 그 예외에 연관된 명령어의 실행의 예외로서 인식된다. 액세스 예외는 CPU가 이용불가 위치로부터 예비 페치를 시도하거나 일부 다른 액세스 예외 조건을 검출하는 경우 인식되지 않지만, 분기 명령어 또는 인터럽션은 인터럽션이 실행되지 않도록 명령어 시퀀스를 변경한다. 모든 명령어는 명령어 페치 때문에 액세스 예외를 인식되게 할 수 있다. 또한, 명령어에 연관된 액세스 예외는 저장 장치의 피연산자에 대한 액세스 때문에 발생할 수 있다. 명령어를 페치함으로 인한 액세스 예외는, 예외 발생 업이 제1 명령어 하프워드가 페치될 수 없을 때, 표시된다. 명령어의 제1 하프워드가 액세스 예외를 갖지 않는 경우, 액세스 예외들은 명령어의 처음 2비트에 의해 특정된 명령어 길이에 따라 추가 하프워드들에 대하여 표시될 수 있지만, 명령어의 제2 또는 제3 하프워드에 액세스하지 않고 연산이 수행될 수 있으면, 미사용 부분에 대하여 액세스 예외가 표시되는지는 예측불가이다. 명령어 페치를 위한 액세스 예외의 표시가 모든 명령어들에게 공통되므로, 이는 개별적인 명령어 정의들에서 커버되지 않는다.
개별적인 명령어 설명에서 다르게 언급하는 경우를 제외하고, 이하의 규칙들은 피연산자 위치에 대한 액세스에 연관된 예외에 적용된다. 페치형 피연산자에 대해서는, 액세스 예외들은 연산을 완료하도록 요구되는 피연산자의 부분에 대해서만 반드시 표시된다. 연산을 완료하는 데 요구되지 않는 페치형 피연산자의 부분들에 대하여 액세스 예외들이 표시되는지는 예측 불가이다.
저장형 피연산자에 있어서, 액세스 예외들은 피연산자의 액세스불가 부분을 사용하지 않고 연산이 완료될 수 있더라도 전체 피연산자에 대하여 인식된다. 저장형 피연산자의 값이 예측 불능으로 정의되는 상황에서, 액세스 예외가 표시되는지는 예측 불가이다. 피연산자 위치에 대한 액세스가 액세스 예외를 인식되도록 야기할 수 있을 때마다, "액세스"라는 워드가 명령어의 설명에서 프로그램 예외들의 리스트에 포함된다. 이 엔트리는 또한 어느 피연산자가 예외를 인식되도록 야기할 수 있는지를 그리고 그 피연산자 위치에 대한 페치 또는 저장 액세스시 예외가 인식되는지를 표시한다. 액세스 예외들은 구체적인 각 명령어를 위해 정의된 바와 같은 피연산자의 부분에 대해서만 인식된다.
연산 예외는 CPU가 무효 연산 코드를 갖는 명령어의 실행을 시도하는 경우에 인식된다. 연산 코드는 미할당된 것일 수 있으며, 또는 그 연산 코드를 갖는 명령어는 CPU에 설치되지 않을 수 있다. 연산은 억제된다. 명령어 길이 코드는 1, 2, 또는 3이다. 연산 예외는 십육진수 0001(또는 동시 PER 이벤트가 표시되는 경우 십육진수 0081)인 프로그램 인터럽션 코드에 의해 표시된다.
일부 모델들은, 지원을 위해 또는 특정형이나 맞춤형 특징들의 일부로서 제공되는 명령어들과 같이, 본 명세서에서 설명되지 않은 명령어들을 제시할 수 있다. 결국, 본 명세서에서 설명되지 않은 연산 코드들은 연산 예외를 반드시 인식되게 하지는 않는다. 또한, 이러한 명령어들은 연산 모드들을 설정되게 할 수 있고 또는 다른 경우에 후속 명령어들의 실행에 영향을 끼치도록 기계를 변경할 수 있다. 이러한 연산이 야기되는 것을 피하도록, 본 명세서에서 설명되지 않은 연산 코드를 갖는 명령어는 그 연산에 연관된 특정 함수가 필요할 때에만 실행되어야 한다.
사양 예외는, 이하의 경우들 중 임의의 경우가 참인 경우에 인식된다.
1. PSW의 미할당 비트 위치(즉, 비트 위치들 0, 2-4, 24-30, 또는 33-63 중 임의의 위치)에 1을 도입한다. 이는 초기 PSW 사양 예외로서 취급된다.
2. PSW의 비트 위치 12에 1을 도입한다. 이는 초기 PSW 사양 예외로서 취급된다.
3. PSW는 이하의 방식들 중 임의의 방식에서 무효이다. 즉, a. PSW의 비트 31이 1이고 비트 32가 제로이다. b. PSW의 비트들 31과 32가 제로이며, 이는 24비트 어드레싱 모드를 나타내며, PSW의 비트들 64-103은 모두 제로가 아니다. c. PSW의 비트 31은 제로이고 비트 32는 1이며, 이는 31비트 어드레싱 모드를 나타내고, PSW의 비트들 64-96은 모두 제로가 아니다. 이는 초기 PSW 사양 예외로서 취급된다.
4. PSW가 홀수 명령어 어드레스를 포함한다.
5. 피연산자 어드레스는 정수 경계 지정을 요구하는 명령어에서 이러한 정수 경계를 지정하지 않는다.
6. 홀수 범용 레지스터는 짝수 레지스터 지정을 요구하는 명령어의 R 필드에 의해 지정된다.
7. 0, 1, 4, 5, 8, 9, 12, 또는 13이 아닌 부동소수점 레지스터는 연장된 피연산자용으로 지정된다.
8. 십진 산술에서 승수 또는 제수가 15자리와 부호를 초과한다.
9. 제1 피연산자 필드의 길이는 십진 승산 또는 제산에 있어서 제2 피연산자 필드의 길이 이하이다.
10. CIPHER MESSAGE, CIPHER MESSAGE WITH CHAINING, COMPUTE INTERMEDIATE MESSAGE DIGEST, COMPUTE LAST MESSAGE DIGEST, 또는 COMPUTE MESSAGE AUTHENTICATION CODE의 실행이 시도되고, 범용 레지스터(0)의 비트들 57-63의 함수 코드는 미할당 또는 미설치 함수 코드를 포함한다.
11. CIPHER MESSAGE 또는 CIPHER MESSAGE WITH CHAINING의 실행이 시도되고, R1 또는 R2 필드가 홀수 레지스터 또는 범용 레지스터(0)를 지정한다.
12. CIPHER MESSAGE, CIPHER MESSAGE WITH CHAINING, COMPUTE INTERMEDIATE MESSAGE DIGEST 또는 COMPUTE MESSAGE AUTHENTICATION CODE의 실행이 시도되고, 제2 피연산자 길이는 지정된 함수의 데이터 블록 크기의 배수가 아니다. 이 사양 예외 조건은 질의 함수들에 적용되지 않는다.
13. COMPARE AND FORM CODEWORD의 실행이 시도되고, 범용 레지스터들 1, 2, 3은 초기에 짝수값들을 포함하지 않는다.
32. COMPARE AND SWAP AND STORE의 실행이 시도되고, 이하의 조건들 중 임의의 조건이 존재한다.
* 함수 코드가 미할당 값을 특정한다.
* 저장 특징이 미할당 값을 특정한다.
* 함수 코드가 0이고, 제1 피연산자가 워드 경계 상에 지정되어 있지 않다.
* 함수 코드가 1이고, 제1 피연산자가 더블워드 경계 상에 지정되어 있지 않다.
* 제2 피연산자가 저장 값의 크기에 대응하는 정수 경계 상에 지정되어 있지 않다.
33. COMPARE LOGICAL LONG UNICODE 또는 MOVE LONG UNICODE의 실행이 시도되고, 범용 레지스터 R1+1 또는 R3+1의 콘텐츠가 짝수 개의 바이트들을 특정하지 않는다.
34. COMPARE LOGICAL STRING, MOVE STRING 또는 SEARCH STRING이 시도되고, 범용 레지스터(0)의 비트들 32-55가 모두 제로가 아니다.
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이 제로가 아니다.
37. CONVERT HFP TO BFP, CONVERT TO FIXED (BFP 또는 HFP), 또는 LOAD FP INTEGER (BFP)의 실행이 시도되고, M3 필드가 유효 변경자를 지정하지 않는다.
38. DIVIDE TO INTEGER의 실행이 시도되고, M4 필드가 유효 변경자를 지정하지 않는다.
39. EXECUTE의 실행이 시도되고, 타겟 어드레스가 홀수이다.
40. EXTRACT STACKED STATE의 실행이 시도되고, 범용 레지스터 R2의 비트 위치들 56-63에서의 코드는 ASN-and-LX-reuse 기능이 설치되지 않은 경우 4보다 크고 또는 이 기능이 설치되어 있는 경우 5보다 크다.
41. FIND LEFTMOST ONE의 실행이 시도되고, R1 필드는 홀수 레지스터를 지정한다.
42. INVALIDATE DAT TABLE ENTRY의 실행이 시도되고, 범용 레지스터 R2의 비트들 44-51이 모두 제로가 아니다.
43. LOAD FPC의 실행이 시도되고, FPC의 미지원 비트들에 대응하는 제2 피연산자의 하나 이상의 비트가 1이다.
44. LOAD PAGE-TABLE-ENTRY ADDRESS의 실행이 시도되고, 명령어의 M4 필드는 이진수 0000-0100가 아닌 임의의 값을 포함한다.
45. LOAD PSW의 실행이 시도되고, 제2 피연산자 어드레스에서의 더블워드의 비트 12가 제로이다. 이 예외가 인식되는지는 모델에 의존한다.
46. MONITOR CALL의 실행이 시도되고, 명령어의 비트 위치들 8-11이 제로를 포함하지 않는다.
47. MOVE PAGE의 실행이 시도되고, 범용 레지스터(0)의 비트 위치들 48-51은 제로를 포함하지 않으며, 또는 그 범용 레지스터의 비트들 52와 53이 모두 1이다.
48. PACK ASCII의 실행이 시도되고, L2 필드가 31보다 크다.
49. PACK UNICODE의 실행이 시도되고, L2 필드가 63 이상이다.
50. PERFORM FLOATING POINT OPERATION의 실행이 시도되고, 범용 레지스터(0)의 비트 32가 제로이고, 비트들 33-63의 하나 이상의 필드들은 무효이거나 미설치 함수를 지정한다.
51. PERFORM LOCKED OPERATION의 실행이 시도되고, 다음의 것들 중 임의의 것이 참이다. * T 비트, 즉, 범용 레지스터(0)의 비트 55가 제로이고, 이 레지스터의 비트들 56-63의 함수 코드가 무효이다. * 범용 레지스터(0)의 비트들 32-54가 모두 제로가 아니다. * 액세스 레지스터 모드에서, ALET를 포함하는 파라미터 리스트의 사용을 야기하는 함수 코드들에 있어서, R3 필드가 제로이다.
52. PERFORM TIMING FACILITY FUNCTION의 실행이 시도되고, 다음의 것들 중 임의의 것이 참이다. * 범용 레지스터(0)의 비트 56이 제로가 아니다. * 범용 레지스터(0)의 비트들 57-63이 미할당 또는 미설치 함수 코드를 특정한다.
53. PROGRAM TRANSFER 또는 PROGRAM TRANSFER WITH INSTANCE의 실행이 시도되고, 다음의 것들 모두가 참이다. 즉, PSW의 연장된 어드레싱 모드 비트가 제로이다. * 명령어의 R2 필드에 의해 지정된 범용 레지스터의 기본 어드레싱 모드 비트, 즉, 비트 32가 제로이다. * 동일한 레지스터의 명령어 어드레스의 비트들 33-39가 모두 제로가 아니다.
54. RESUME PROGRAM의 실행이 시도되고, 다음의 것들 중 임의의 것이 참이다.
* 제2 피연산자의 PSW 필드의 비트들 31, 32, 64-127은 현재 PSW에 배치되는 데 유효하지 않다. 이하의 것들 중 임의의 것이 참인 경우 예외가 인식된다. 즉, 비트들 31과 32가 모두 제로이고 비트들 64-103이 모두 제로가 아닌 경우, 비트들 31과 32가 각각 0과 1인 경우, 비트들 64-96이 모두 제로가 아닌 경우, 비트들 31과 32가 각각 1과 0인 경우, 비트 127이 1인 경우이다.
* 파라미터 리스트의 비트들 0-12가 모두 제로가 아니다.
55. SEARCH STRING UNICODE의 실행이 시도되고, 범용 레지스터(0)의 비트들 32-47이 모두 제로가 아니다.
56. SET ADDRESS SPACE CONTROL 또는 SET ADDRESS SPACE CONTROL FAST의 실행이 시도되고, 제2 피연산자 어드레스의 비트들 52와 53이 모두 제로가 아니다.
57. SET ADDRESSING MODE (SAM24)의 실행이 시도되고, PSW의 미갱신 명령어 어드레스의 비트들 0-39 및 PSW의 비트들 64-103이 모두 제로가 아니다.
58. SET ADDRESSING MODE (SAM31)의 실행이 시도되고, PSW의 미갱신 명령어 어드레스의 비트들 0-32, PSW의 비트들 64-96이 모두 제로가 아니다.
59. SET CLOCK PROGRAMMABLE FIELD의 실행이 시도되고, 범용 레지스터(0)의 비트들 32-47이 모두 제로가 아니다.
60. SET FPC의 실행이 시도되고, FPC 레지스터의 미지원 비트들에 대응하는 제1 피연산자의 하나 이상의 비트가 1이다.
61. STORE SYSTEM INFORMATION의 실행이 시도되고, 범용 레지스터(0)의 함수 코드가 유효이며, 다음의 것들 중 임의의 것이 참이다. * 범용 레지스터(0)의 비트들 36-55 및 범용 레지스터(1)의 비트들 32-47이 모두 제로가 아니다. * 제2 피연산자 어드레스가 4K 바이트 경계 상에 정렬되어 있지 않다.
62. TRANSLATE TWO TO ONE 또는 TRANSLATE TWO TO TWO의 실행이 시도되고, 범용 레지스터 R1+1의 길이가 짝수 바이트들을 특정하지 않는다.
63. UNPACK ASCII의 실행이 시도되고, L1 필드가 31보다 크다.
64. UNPACK UNICODE의 실행이 시도되고, L1 필드가 63 이상이다.
65. UPDATE TREE의 실행이 시도되고, 범용 레지스터들 4와 5의 초기 콘텐츠가 2비트 또는 31비트 어드레싱 모드에서 8의 배수가 아니며 또는 64비트 어드레싱 모드에서 16의 배수가 아니다. 구 PSW에 의해 식별되는 명령어의 실행은 억제된다. 그러나, 초기 PSW 사양 예외(원인 1-3)에 대해서는, 새로운 PSW를 도입하는 연산이 완료되지만, 그 직후 인터럽션이 발생한다. 바람직하게, 명령어 길이 코드(ILC)는 1, 2, 또는 3이며, 이는 예외를 야기하는 명령어의 길이를 나타낸다. 명령어 어드레스가 오래된 경우(페이지 6-33 상의 원인 4), ILC가 1, 2, 또는 3인지는 예측 불가이다. 초기 PSW 사양 예외(원인 1-3) 때문에 예외가 인식되고 LOAD PSW, LOAD PSW EXTENDED, PROGRAM RETURN, 또는 인터럽션에 의해 예외가 도입되었다면, ILC는 0이다. ILC는, SET ADDRESSING MODE(SAM24, SAM31)에 의해 예외가 도입되면, 1이고, SET ADDRESSING MODE가 EXECUTE의 타겠이었다면 2이다. SET SYSTEM MASK 또는 STORE THEN OR SYSTEM MASK에 의해 예외가 도입되면, ILC는 2이다.
프로그램 인터럽션들은 프로그램의 실행 동안 발생하는 예외들 및 이벤트들을 보고하는 데 사용된다. 프로그램 인터럽션은 구 PSW가 실제 위치들 336-351에 저장되게 하고 새로운 PSW를 실제 위치들 464-479로부터 페치되게 한다. 인터럽션의 원인은 인터럽션 코드에 의해 식별된다. 인터럽션 코드는 실제 위치들 142-143에 배치되고, 명령어 길이 코드는 실제 위치 141에서 바이트의 비트 위치들 5와 6에 배치되는 한편 비트들의 나머지는 제로로 설정되고, 제로들은 실제 위치 140에 저장된다. 일부 원인들에 대해서는, 인터럽션 이유를 식별하는 추가 정보가 실제 위치들 144-183에 저장된다. 이어서, PER-3 기능이 프로그램 인터럽션 액션의 일부로서 설치되면, 브레이킹 이벤트 어드레스(breaking-event-address) 레지스터의 콘텐츠는 실제 저장 장치 위치 272-279에 배치된다. PER 이벤트 및 암호 연산 예외를 제외하고, 인터럽션을 야기하는 조건은 인터럽션 코드의 최하위 7비트 위치에 배치된 코드화 값에 의해 표시된다. 한번에 하나의 조건만이 표시될 수 있다. 인터럽션 코드의 비트들 0-7은 제로로 설정된다. PER 이벤트는 인터럽션 코드의 비트 8을 1로 설정함으로써 표시된다. 이것이 유일한 조건이면, 비트들 0-7 및 9-15도 제로로 설정된다. 다른 프로그램 인터럽션 조건과 동시에 PER 이벤트가 표시되면, 비트 8이 1이고, 비트들 0-7 및 9-15는 다른 조건을 위해 설정된다. 암호 연산 예외는, 십육진수 0119, 또는 PER 이벤트도 표시되는 경우 십육진수 0199의 인터럽션 코드에 의해 표시된다.
대응하는 마스크 비트가 존재하면, 프로그램 인터럽션은 그 마스크 비트가 1인 경우에만 발생할 수 있다. PSW의 프로그램 마스크는 예외들 중 네 가지를 제어하고, FPC 레지스터의 IEEE 마스크들은 IEEE 예외들을 제어하고, 제어 레지스터(0)의 비트 33은 SET SYSTEM MASK가 특정 연산 예외를 야기하는지를 제어하고, 제어 레지스터 8의 비트들 48-63은 모니터 이벤트로 인한 인터럽션들을 제어하고, 마스크들의 계층은 PER 이벤트로 인한 인터럽션을 제어한다. 임의의 제어 마스크 비트가 제로이며, 조건은 무시되고, 조건은 펜딩 상태로 유지되지 않는다.
프로그램 인터럽션에 대한 새로운 PSW가 PSW 포맷 에러를 갖거나 명령어 페치 프로세스에서 인식되는 예외를 야기하면, 프로그램 인터럽션들의 스트링이 발생할 수 있다.
프로그램 예외들로서 표시된 조건들 중 일부는 채널 서브시스템에 의해서도 인식될 수 있고, 이 경우 예외는 서브채널 상태 워드 또는 연장된 상태 워드에 표시된다.
데이터 예외가 프로그램 인터럽션을 야기하면, 데이터 예외 코드(DXC)는 위치 147에 저장되고, 제로들이 위치 144-146에 저장된다. DXC는 다양한 유형들의 데이터 예외 조건들을 구별한다. AFP 레지스터(추가 부동소수점 레지스터) 제어 비트, 즉, 제어 레지스터(0)의 비트 45가 1이면, DXC는 부동소수점 제어(FPC) 레지스터의 DXC 필드에도 배치된다. FPC 레지스터의 DXC 필드는 다른 임의의 프로그램 예외가 보고될 때 변경되지 않는다. DXC는 데이터 예외의 특정 원인을 나타내는 8비트 코드이다.
DXC 2와 3은 상호 배타적이며 다른 임의의 DXC보다 높은 우선 순위를 갖는다. 따라서, 예를 들어, DXC 2(BFP 명령어)는 임의의 IEEE 예외보다 우선하며, DXC 3(DFP 명령어)은 임의의 IEEE 예외 또는 시뮬레이팅된 IEEE 예외보다 우선한다. 다른 일례로, DXC 3(DFP 명령어)과 DXC 1(AFP 레지스터) 둘 다에 대한 조건들이 존재하면, DXC 3이 보고된다. 사양 예외 및 AFP 레지스터 데이터 예외 모두가 적용되면, 어느 것을 보고할지는 예측불능이다.
어드레싱 예외는 CPU가 구성에서 이용가능하지 않은 주 저장 장치 위치를 참조하려 할 때 인식된다. 주 저장 장치 위치는 이 위치가 설치되어 있지 않은 경우, 저장 유닛이 구성에 없는 경우, 또는 저장 유닛에서 전원이 오프인 경우, 구성에서 이용가능하지 않는다. 구성에서 이용가능하지 않은 저장 장치 위치를 지정하는 어드레스를 무효라 칭한다. 명령어의 어드레스가 무효인 경우 연산을 억제한다. 마찬가지로, EXECUTE의 타겟 명령어의 어드레스가 무효인 경우 연산을 억제한다. 또한, 테이블 또는 테이블 엔트리에 액세스하는 데 어드레싱 예외가 발생하는 경우 연산 단위를 억제한다. 규칙이 적용되는 테이블 및 테이블 엔트리는, 실행가능 단위 제어 테이블, 일차 ASN 제2 테이블 엔트리, 액세스 리스트의 엔트리, 영역 제1 테이블, 영역 제2 테이블, 영역 제3 테이블, 세그먼트 테이블, 페이지 테이블, 링크 테이블, 링크 제1 테이블, 링크 제2 테이블, 엔트리 테이블, ASN 제1 테이블, ASN 제2 테이블, 권한 테이블, 링크 스택, 및 트레이스 테이블이다. 어드레싱 예외들에서는, LOAD PAGE-TABLE-ENTRY ADDRESS, LOAD REAL ADDRESS, STORE REAL ADDRESS 및 TEST PROTECTION의 실행에 연관된 참조 및 동적 어드레스 변환을 위한 암시적 참조 모두를 비롯한, 영역 제1 테이블, 영역 제2 테이블, 영역 제3 테이블, 세그먼트 테이블 및 페이지 테이블을 참조하기 위해 어드레싱 예외들이 발생하는 경우에, 억제가 발생한다. 마찬가지로, 실행가능 단위 제어 테이블, 일차 ASN 제2 테이블 엔트리, 액세스 리스트, ASN 제2 테이블, 또는 권한 테이블에 액세스하기 위한 어드레싱 예외들에서는, 이러한 어드레싱 예외들이 LOAD PAGE-TABLE-ENTRY ADDRESS, LOAD REAL ADDRESS, STORE REAL ADDRESS, TEST ACCESS 또는 TEST PROTECTION의 일부로서 혹은 암시적으로 행해진 액세스 레지스터 변환과 접하는 경우 억제가 발생한다. 실행이 억제되는 일부 특정한 명령어들을 제외하고, 변환될 수 있는 피연산자 어드레스에 대한 연산은 종료되지만 이용불가 위치를 지정한다. 종료를 위해, 결과 필드들에만 변경이 발생할 수 있다. 이러한 문맥에서 볼 때, "결과 필드"라는 용어는, 제공되며 명령어에 의해 변경되도록 지정되는 조건 코드, 레지스터, 및 임의의 저장 장치 위치를 포함한다.
도 8을 참조해 보면, 회전 후 배타적 OR(XOR) 선택 비트 명령어(602), 회전 후 OR 선택 비트 명령어(603) 또는 회전 후 AND 선택 비트 명령어(601)을 포함하는 도 6에 도시한 회전 후 연산 명령어들 중 임의의 하나가 페치(801)되고 실행되며, (명령어의 R2 필드에 의해 특정된 레지스터(802)로부터 얻어진) 제2 피연산자는, 제5 피연산자(15)에 특정된 비트들의 수, 즉, 회전량(도 7; 701)을 포함하는 직접 필드에 의해 좌측으로 회전된다(804). 피연산자의 최상위 비트 위치로부터 벗어나 시프트된 각 비트는 피연산자의 최하위 비트 위치로 재진입한다. 명령어에 따라, 회전된 제2 피연산자의 선택 비트들 805는 제1 피연산자의 대응 비트들과 논리적으로 AND 처리, 배타적 OR 처리, 또는 OR 처리되고(806), 참조 번호 807에서, T 비트가 0이면, 논리 연산의 결과들은 제1 피연산자의 선택 비트들을 대체한다(808). T 비트가 1이면, 제1 피연산자는 변경되지 않는다. 결과는 조건 코드에 의해 표시된다. 제2 피연산자는 범용 레지스터 R2에서 변경되지 않는다.
I3 필드의 비트들 2-7(명령어의 비트들 18-23)(701)은 회전 후 제2 피연산자와 제1 피연산자의 비트들의 선택된 범위의 시작 비트 위치를 특정하는 부호없는 이진 정수를 포함한다.
I4 필드의 비트들 2-7(명령어의 비트들 26-31)(701)은 비트들의 선택된 범위의 (이 범위를 포함하는) 종료 비트 위치를 특정하는 부호없는 이진 정수를 포함한다. 종료 비트 위치가 시작 비트 위치보다 작으면, 비트들의 범위는 비트 63 내지 비트 0을 랩어라운드한다. I5 필드의 비트들 2-7(명령어의 비트들 34-39)은 제2 피연산자가 좌측으로 회전되는 비트들의 수를 특정하는 부호없는 이진 저수를 포함한다.
I3 필드의 비트 0(명령어의 비트 16)(701)은 테스트 결과 제어(T)를 포함한다. T 비트가 제로이면, 논리 연산의 결과는 제1 피연산자의 선택 비트들을 대체하고, 제1 피연산자의 나머지 비트들은 변경되지 않는다. T 비트가 1이면, 제1 피연산자 전체가 변경되지 않는다.
조건 코드는 T 비트의 설정에 상관없이 논리 연산의 결과들에 기초하여 설정된다. 비트들의 선택된 범위만을 이용하여 조건 코드를 결정한다.
도 7은 방금 설명한 명령어들의 직접 필드들을 도시한다.
I3 필드의 비트 1 및 I4 필드의 비트들 0-1(명령어의 비트들 17 및 24-25)은 예약되며, 제로를 포함해야 한다. 그렇지 않으면, 프로그램이 추후에 호환성있게 동작하지 않을 수 있다. I5 필드의 비트들 0-1(명령어의 비트들 32-33)은 무시된다.
Rotate Then 명령어를 실행한 결과, 조건 코드들은 아래와 같이 설정된다.
0 선택된 비트들이 제로임
1 선택된 비트들이 제로가 아님
프로그램 예외 연산은 범용 명령어 확장 기능이 설치되지 않으면 시그널링된다.
I5 필드의 비트들 2-7은 제2 피연산자가 좌측으로 회전되는 비트들의 개수를 특정하는 부호없는 이진 정수를 포함하는 것으로 정의되지만, 우측 회전량을 효율적으로 특정하는 음의 값을 코딩해도 된다.
어셈블러 구문에서는, 회전량을 포함하는 I5 피연산자를 선택 사항으로 고려한다. I5 피연산자가 코딩되지 않으면, 제로의 회전량을 의미한다.
다음의 예에서는 페이지의 저장 보호 키의 액세스 제어 비트들이 PSW의 키와 일치하는지를 결정하도록 ROTATE THEN EXCLUSIVE OR SELECTED BITS를 사용한다. 이 예에서는, 조건 코드만이 설정되고, 그 결과는 제1 피연산자 레지스터에 두지 않는다.
완료되면, 범용 레지스터(9)에 의해 어드레싱된 페이지의 저장 키의 액세스 제어 비트들이 PSW 키와 일치하는 경우 조건 코드가 제로로 설정된다. 일치하지 않는 경우 조건 코드가 1로 설정된다.
이하의 예는 범용 레지스터들(6, 8)의 선택된 비트들을 회전하고 결합하도록 ROTATE THEN OR SELECTED BITS의 사용을 도시한다.
완료되면, 조건 코드 1이 설정되고, 범용 레지스터(6)는 이하와 같이 된다.
레지스터들의 비트들 8-54만이 OR 연산 처리되고, 범용 레지스터(6)의 비트 0-7 및 55-63은 수정되지 않는다는 점에 주목한다.
전술한 설명은 컴퓨터 시스템의 일 실시예의 구조와 용어를 이해하는 데 유용하다. 본 발명은 z/아키텍처 또는 본 명세서에 개시된 z/아키텍처의 설명으로 한정되지 않는다. 본 발명은 본 명세서에서 설명한 교시에 의해 다른 컴퓨터 제조사의 다른 컴퓨터 아키텍처에 유익하게 적용될 수 있다.
본 명세서에서는 본 발명의 바람직한 실시예를 도시하고 설명하였지만, 본 발명이 여기서 개시된 구체적인 구성으로 한정되지 않으며, 청구범위에서 정의된 바와 같이 본 발명의 범위 내에서 모든 변경과 수정을 행하는 권리가 보유되어 있다는 점을 이해하기 바란다.
Claims (9)
- 컴퓨터 연산 방법으로서,
프로그램에서 컴퓨터 아키텍처용으로 정의된 회전 후 연산(rotate-then-operate) 명령어를 페치하는 단계―상기 회전 후 연산 명령어는 연산 코드(opcode) 필드, 제1 레지스터 필드(R2), 제2 레지스터 필드(R1), T 비트 및 시작 비트 위치를 포함하는 I3 필드, 종료 비트 위치를 포함하는 I4 필드, 및 회전량을 명시하는 회전량 필드(I5)를 포함하고, 상기 제1 레지스터 필드는 복수의 범용 레지스터 중 하나의 범용 레지스터를 특정하고, 상기 제2 레지스터 필드는 상기 복수의 범용 레지스터 중 하나의 범용 레지스터를 특정함―와,
상기 회전 후 연산 명령어를 실행하는 단계를 포함하고,
상기 회전 후 연산 명령어를 실행하는 단계는,
상기 제1 레지스터 필드에 의해 특정된 제1 레지스터로부터 제1 피연산자를 얻는 단계,
상기 제1 피연산자를 회전량만큼 회전시켜 회전된 값을 생성하는 단계―상기 회전은 보다 높은 차수의 위치를 향하여 비트들을 시프트하고 높은 차수의 비트 위치로부터 낮은 차수의 비트 위치로 비트들을 시트프함―,
상기 회전된 값의 n 비트 부분을 선택하는 단계 -상기 회전된 값의 n비트 부분은 상기 I3 필드에 의해 특정된 비트 위치에서 시작하고 상기 I4 필드에 의해 특정된 비트 위치에서 종료함-,
상기 제2 레지스터 필드에 의해 특정된 제2 레지스터로부터 제2 피연산자를 얻는 단계,
상기 회전된 값의 선택된 n 비트 부분과 상기 제2 피연산자의 대응하는 n 비트들에 대하여 부울 연산을 수행하는 단계 ―상기 제2 피연산자의 대응하는 n 비트들은 상기 I3 필드에 의해 특정된 상기 제2 피연산자의 비트 위치에서 시작하고 상기 I4 필드에 의해 특정된 상기 제2 피연산자의 비트 위치에서 종료하고, 상기 부울 연산은 n 비트의 상기 선택된 부분에 대응하는 n 비트의 결과 부분을 생성하고, 상기 부울 연산은 상기 회전 후 연산 명령어에 의해 특정됨―,
상기 T 비트가 0인 것에 응답하여, 상기 제2 레지스터 내의 상기 제2 피연산자의 n 비트의 제2 피연산자 부분에 상기 n 비트의 결과 부분을 세이브하는 단계 -상기 n 비트의 제2 피연산자 부분은 상기 선택된 부분의 비트 위치들에 대응하고, 상기 n 비트의 제2 피연산자 부분을 제외한 상기 제2 레지스터의 다른 모든 비트들은 상기 세이브 연산에 의해 상기 제2 레지스터에서 변경되지 않음―
상기 회전된 값의 상기 선택된 부분이 제로인 것에 응답하여 상기 회전된 값의 상기 선택된 부분이 제로를 나타내는 조건 코드를 설정하는 단계,
상기 회전된 값의 상기 선택된 부분이 제로 이외의 값인 것에 응답하여 상기 회전된 값의 상기 선택된 부분이 제로가 아님을 나타내는 조건 코드를 설정하는 단계,
다음 명령어를 계속 실행하는 단계를 포함하는,
컴퓨터 연산 방법. - 삭제
- 제1항에 있어서,
상기 T 비트가 1인 것에 응답하여, 상기 실행이 상기 제2 레지스터의 제2 피연산자를 변경하지 않는 단계를 포함하는, 컴퓨터 연산 방법. - 제3항에 있어서,
상기 연산 코드는 제1 연산 코드 부분과 제2 연산 코드 부분을 포함하고,
상기 제2 연산 코드 부분은 상기 부울 연산을 특정하고,
상기 부울 연산은,
OR을 특정하는 상기 제2 연산 코드 부분에 응답하여, 상기 선택된 일부와 상기 제2 피연산자의 대응 비트들에 대하여 OR 연산을 수행하고,
AND를 특정하는 상기 제2 연산 코드 부분에 응답하여, 상기 선택된 일부와 상기 제2 피연산자의 대응 비트들에 대하여 AND 연산을 수행하고,
배타적 OR(XOR)을 특정하는 상기 제2 연산 코드 부분에 응답하여, 상기 선택된 일부와 상기 제2 피연산자의 대응 비트들에 대하여 AND 연산을 수행하는 것을 포함하는, 컴퓨터 연산 방법. - 제4항에 있어서,
상기 회전 후 연산 명령어는 비트들 0-47로 이루어지고,
상기 제1 연산 코드 부분은 비트들 0-7로 이루어지고,
상기 제2 연산 코드 부분은 비트들 40-47로 이루어지는, 컴퓨터 연산 방법. - 제5항에 있어서,
상기 제1 레지스터 필드는 비트들 8-11로 이루어지고,
상기 제2 레지스터 필드는 비트들 12-15로 이루어지고,
상기 T 비트는 비트 16이고,
상기 I3 필드는 비트들 17-23으로 이루어지고,
상기 I4 필드는 비트들 24-31로 이루어지고,
상기 회전량 필드는 비트들 34-39로 이루어지는, 컴퓨터 연산 방법. - 제1항에 있어서,
상기 컴퓨터 아키텍처용으로 정의된 상기 회전 후 연산 명령어는 다른 컴퓨터 아키텍처의 중앙 처리 유닛에 의해 페치되고 실행되며,
상기 컴퓨터 연산 방법은, 상기 회전 후 연산 명령어를 해석하여 상기 회전 후 연산 명령어의 연산을 에뮬레이팅하기 위한 소정의 소프트웨어 루틴을 식별하는 단계를 포함하고,
상기 회전 후 연산 명령어를 실행하는 단계는, 상기 소정의 소프트웨어 루틴을 실행하여 상기 회전 후 연산 명령어를 실행하기 위한 방법의 단계들을 수행하는 단계를 포함하는, 컴퓨터 연산 방법. - 컴퓨터 시스템으로서,
메모리와,
상기 메모리와 통신하며, 메모리로부터 명령어를 페치하기 위한 명령어 페치 요소 및 페치된 명령어를 실행하기 위한 하나 이상의 실행 요소를 포함하는 프로세서를 포함하고,
제1항, 제3항 내지 제7항 중 어느 한 항에 따른 방법을 수행하도록 구성된, 컴퓨터 시스템. - 컴퓨터 판독 가능 매체에 있어서,
제1항, 제3항 내지 제7항 중 어느 한 항에 따른 방법을 구현하도록 구성된 컴퓨터 명령어들을 포함하는, 컴퓨터 판독 가능 매체.
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US11/972,679 US7895419B2 (en) | 2008-01-11 | 2008-01-11 | Rotate then operate on selected bits facility and instructions therefore |
US11/972,679 | 2008-01-11 | ||
PCT/EP2009/050109 WO2009087162A2 (en) | 2008-01-11 | 2009-01-07 | Rotate then operate on selected bits facility and instructions therefore |
Publications (2)
Publication Number | Publication Date |
---|---|
KR20100113076A KR20100113076A (ko) | 2010-10-20 |
KR101231556B1 true KR101231556B1 (ko) | 2013-02-08 |
Family
ID=40561736
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020107015044A KR101231556B1 (ko) | 2008-01-11 | 2009-01-07 | 선택된 비트들의 회전 후 연산 기능 및 그 명령어 |
Country Status (6)
Country | Link |
---|---|
US (3) | US7895419B2 (ko) |
EP (1) | EP2243076A2 (ko) |
JP (1) | JP5357181B2 (ko) |
KR (1) | KR101231556B1 (ko) |
CN (1) | CN101911015B (ko) |
WO (1) | WO2009087162A2 (ko) |
Families Citing this family (28)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7895419B2 (en) * | 2008-01-11 | 2011-02-22 | International Business Machines Corporation | Rotate then operate on selected bits facility and instructions therefore |
US9026424B1 (en) * | 2008-10-27 | 2015-05-05 | Juniper Networks, Inc. | Emulation of multiple instruction sets |
US8473567B2 (en) * | 2010-03-29 | 2013-06-25 | Intel Corporation | Generating a packet including multiple operation codes |
US9361109B2 (en) | 2010-05-24 | 2016-06-07 | Qualcomm Incorporated | System and method to evaluate a data value as an instruction |
GB2485774A (en) * | 2010-11-23 | 2012-05-30 | Advanced Risc Mach Ltd | Processor instruction to extract a bit field from one operand and insert it into another with an option to sign or zero extend the field |
US8683261B2 (en) * | 2011-07-20 | 2014-03-25 | International Business Machines Corporation | Out of order millicode control operation |
WO2013101232A1 (en) | 2011-12-30 | 2013-07-04 | Intel Corporation | Packed rotate processors, methods, systems, and instructions |
US9459867B2 (en) | 2012-03-15 | 2016-10-04 | International Business Machines Corporation | Instruction to load data up to a specified memory boundary indicated by the instruction |
US9588762B2 (en) | 2012-03-15 | 2017-03-07 | International Business Machines Corporation | Vector find element not equal instruction |
US9268566B2 (en) | 2012-03-15 | 2016-02-23 | International Business Machines Corporation | Character data match determination by loading registers at most up to memory block boundary and comparing |
US9459864B2 (en) | 2012-03-15 | 2016-10-04 | International Business Machines Corporation | Vector string range compare |
US9715383B2 (en) | 2012-03-15 | 2017-07-25 | International Business Machines Corporation | Vector find element equal instruction |
US9280347B2 (en) | 2012-03-15 | 2016-03-08 | International Business Machines Corporation | Transforming non-contiguous instruction specifiers to contiguous instruction specifiers |
US9459868B2 (en) | 2012-03-15 | 2016-10-04 | International Business Machines Corporation | Instruction to load data up to a dynamically determined memory boundary |
US9710266B2 (en) | 2012-03-15 | 2017-07-18 | International Business Machines Corporation | Instruction to compute the distance to a specified memory boundary |
US9454367B2 (en) | 2012-03-15 | 2016-09-27 | International Business Machines Corporation | Finding the length of a set of character data having a termination character |
US9454366B2 (en) | 2012-03-15 | 2016-09-27 | International Business Machines Corporation | Copying character data having a termination character from one memory location to another |
US9128698B2 (en) * | 2012-09-28 | 2015-09-08 | Intel Corporation | Systems, apparatuses, and methods for performing rotate and XOR in response to a single instruction |
US9665368B2 (en) * | 2012-09-28 | 2017-05-30 | Intel Corporation | Systems, apparatuses, and methods for performing conflict detection and broadcasting contents of a register to data element positions of another register |
US8953785B2 (en) | 2012-09-28 | 2015-02-10 | Intel Corporation | Instruction set for SKEIN256 SHA3 algorithm on a 128-bit processor |
US8874933B2 (en) * | 2012-09-28 | 2014-10-28 | Intel Corporation | Instruction set for SHA1 round processing on 128-bit data paths |
US20150052330A1 (en) * | 2013-08-14 | 2015-02-19 | Qualcomm Incorporated | Vector arithmetic reduction |
US20150186137A1 (en) * | 2013-12-27 | 2015-07-02 | Tal Uliel | Systems, apparatuses, and methods for vector bit test |
US9639671B2 (en) * | 2014-05-27 | 2017-05-02 | Assured Information Security, Inc. | Secure execution of encrypted program instructions |
US9317719B2 (en) * | 2014-09-04 | 2016-04-19 | Intel Corporation | SM3 hash algorithm acceleration processors, methods, systems, and instructions |
CN105522826B (zh) * | 2014-10-16 | 2017-06-23 | 珠海艾派克微电子有限公司 | 校验值产生方法、耗材芯片和包括该耗材芯片的耗材盒 |
GB2573121B (en) * | 2018-04-24 | 2020-09-30 | Subsea 7 Norway As | Injecting fluid into a hydrocarbon production line or processing system |
CN112905528A (zh) * | 2021-02-09 | 2021-06-04 | 深圳市众芯诺科技有限公司 | 基于物联网的智能家居芯片 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5113523A (en) * | 1985-05-06 | 1992-05-12 | Ncube Corporation | High performance computer system |
US5751614A (en) * | 1994-03-08 | 1998-05-12 | Exponential Technology, Inc. | Sign-extension merge/mask, rotate/shift, and boolean operations executed in a vectored mux on an ALU |
US5822606A (en) * | 1996-01-11 | 1998-10-13 | Morton; Steven G. | DSP having a plurality of like processors controlled in parallel by an instruction word, and a control processor also controlled by the instruction word |
US6223256B1 (en) * | 1997-07-22 | 2001-04-24 | Hewlett-Packard Company | Computer cache memory with classes and dynamic selection of replacement algorithms |
Family Cites Families (34)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US3825895A (en) | 1973-05-14 | 1974-07-23 | Amdahl Corp | Operand comparator |
US3982229A (en) * | 1975-01-08 | 1976-09-21 | Bell Telephone Laboratories, Incorporated | Combinational logic arrangement |
US4713750A (en) | 1983-03-31 | 1987-12-15 | Fairchild Camera & Instrument Corporation | Microprocessor with compact mapped programmable logic array |
US4569016A (en) | 1983-06-30 | 1986-02-04 | International Business Machines Corporation | Mechanism for implementing one machine cycle executable mask and rotate instructions in a primitive instruction set computing system |
US4578750A (en) | 1983-08-24 | 1986-03-25 | Amdahl Corporation | Code determination using half-adder based operand comparator |
US4785393A (en) | 1984-07-09 | 1988-11-15 | Advanced Micro Devices, Inc. | 32-Bit extended function arithmetic-logic unit on a single chip |
JPS6382513A (ja) | 1986-09-26 | 1988-04-13 | Toshiba Corp | バレルシフタ |
US5859994A (en) | 1992-08-10 | 1999-01-12 | Intel Corporation | Apparatus and method for modifying instruction length decoding in a computer processor |
AU6629894A (en) | 1993-05-07 | 1994-12-12 | Apple Computer, Inc. | Method for decoding guest instructions for a host computer |
US6067613A (en) | 1993-11-30 | 2000-05-23 | Texas Instruments Incorporated | Rotation register for orthogonal data transformation |
US5487159A (en) * | 1993-12-23 | 1996-01-23 | Unisys Corporation | System for processing shift, mask, and merge operations in one instruction |
US5781457A (en) * | 1994-03-08 | 1998-07-14 | Exponential Technology, Inc. | Merge/mask, rotate/shift, and boolean operations from two instruction sets executed in a vectored mux on a dual-ALU |
US5551013A (en) | 1994-06-03 | 1996-08-27 | International Business Machines Corporation | Multiprocessor for hardware emulation |
US5748950A (en) | 1994-09-20 | 1998-05-05 | Intel Corporation | Method and apparatus for providing an optimized compare-and-branch instruction |
EP0730220A3 (en) | 1995-03-03 | 1997-01-08 | Hal Computer Systems Inc | Method and device for quickly executing branch instructions |
US5732242A (en) | 1995-03-24 | 1998-03-24 | Silicon Graphics, Inc. | Consistently specifying way destinations through prefetching hints |
US5790825A (en) | 1995-11-08 | 1998-08-04 | Apple Computer, Inc. | Method for emulating guest instructions on a host computer through dynamic recompilation of host instructions |
GB2317469B (en) * | 1996-09-23 | 2001-02-21 | Advanced Risc Mach Ltd | Data processing system register control |
TW380237B (en) * | 1996-09-23 | 2000-01-21 | Advanced Risc Mach Ltd | Data processing system register control |
JP3790607B2 (ja) | 1997-06-16 | 2006-06-28 | 松下電器産業株式会社 | Vliwプロセッサ |
US6263420B1 (en) * | 1997-09-17 | 2001-07-17 | Sony Corporation | Digital signal processor particularly suited for decoding digital audio |
US6112293A (en) | 1997-11-17 | 2000-08-29 | Advanced Micro Devices, Inc. | Processor configured to generate lookahead results from operand collapse unit and for inhibiting receipt/execution of the first instruction based on the lookahead result |
US6009261A (en) | 1997-12-16 | 1999-12-28 | International Business Machines Corporation | Preprocessing of stored target routines for emulating incompatible instructions on a target processor |
US6308255B1 (en) | 1998-05-26 | 2001-10-23 | Advanced Micro Devices, Inc. | Symmetrical multiprocessing bus and chipset used for coprocessor support allowing non-native code to run in a system |
US20020147969A1 (en) | 1998-10-21 | 2002-10-10 | Richard A. Lethin | Dynamic optimizing object code translator for architecture emulation and dynamic optimizing object code translation method |
US6446197B1 (en) | 1999-10-01 | 2002-09-03 | Hitachi, Ltd. | Two modes for executing branch instructions of different lengths and use of branch control instruction and register set loaded with target instructions |
US6763327B1 (en) | 2000-02-17 | 2004-07-13 | Tensilica, Inc. | Abstraction of configurable processor functionality for operating systems portability |
US6738895B1 (en) | 2000-08-31 | 2004-05-18 | Micron Technology, Inc. | Method and system for substantially registerless processing |
US20030037085A1 (en) | 2001-08-20 | 2003-02-20 | Sandbote Sam B. | Field processing unit |
US7165101B2 (en) | 2001-12-03 | 2007-01-16 | Sun Microsystems, Inc. | Transparent optimization of network traffic in distributed systems |
US7493480B2 (en) | 2002-07-18 | 2009-02-17 | International Business Machines Corporation | Method and apparatus for prefetching branch history information |
US8335810B2 (en) | 2006-01-31 | 2012-12-18 | Qualcomm Incorporated | Register-based shifts for a unidirectional rotator |
US20090182982A1 (en) | 2008-01-11 | 2009-07-16 | International Business Machines Corporation | Rotate Then Insert Selected Bits Facility and Instructions Therefore |
US7895419B2 (en) * | 2008-01-11 | 2011-02-22 | International Business Machines Corporation | Rotate then operate on selected bits facility and instructions therefore |
-
2008
- 2008-01-11 US US11/972,679 patent/US7895419B2/en active Active
-
2009
- 2009-01-07 WO PCT/EP2009/050109 patent/WO2009087162A2/en active Application Filing
- 2009-01-07 EP EP20090701244 patent/EP2243076A2/en not_active Ceased
- 2009-01-07 JP JP2010541776A patent/JP5357181B2/ja active Active
- 2009-01-07 CN CN200980101991.XA patent/CN101911015B/zh active Active
- 2009-01-07 KR KR1020107015044A patent/KR101231556B1/ko active IP Right Grant
-
2010
- 2010-07-21 US US12/840,707 patent/US8838943B2/en active Active
-
2014
- 2014-09-12 US US14/484,323 patent/US9135004B2/en active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5113523A (en) * | 1985-05-06 | 1992-05-12 | Ncube Corporation | High performance computer system |
US5751614A (en) * | 1994-03-08 | 1998-05-12 | Exponential Technology, Inc. | Sign-extension merge/mask, rotate/shift, and boolean operations executed in a vectored mux on an ALU |
US5822606A (en) * | 1996-01-11 | 1998-10-13 | Morton; Steven G. | DSP having a plurality of like processors controlled in parallel by an instruction word, and a control processor also controlled by the instruction word |
US6223256B1 (en) * | 1997-07-22 | 2001-04-24 | Hewlett-Packard Company | Computer cache memory with classes and dynamic selection of replacement algorithms |
Also Published As
Publication number | Publication date |
---|---|
CN101911015B (zh) | 2016-01-20 |
US20150006860A1 (en) | 2015-01-01 |
EP2243076A2 (en) | 2010-10-27 |
US7895419B2 (en) | 2011-02-22 |
JP2011509476A (ja) | 2011-03-24 |
WO2009087162A2 (en) | 2009-07-16 |
KR20100113076A (ko) | 2010-10-20 |
US8838943B2 (en) | 2014-09-16 |
US20100299506A1 (en) | 2010-11-25 |
US20090182981A1 (en) | 2009-07-16 |
WO2009087162A3 (en) | 2009-09-24 |
CN101911015A (zh) | 2010-12-08 |
US9135004B2 (en) | 2015-09-15 |
JP5357181B2 (ja) | 2013-12-04 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR101231556B1 (ko) | 선택된 비트들의 회전 후 연산 기능 및 그 명령어 | |
JP5052678B2 (ja) | コンピュータを動作させる方法及びシステム | |
US10963391B2 (en) | Extract target cache attribute facility and instruction therefor | |
US20090182983A1 (en) | Compare and Branch Facility and Instruction Therefore | |
US20090182988A1 (en) | Compare Relative Long Facility and Instructions Therefore | |
JP2011509475A5 (ko) | ||
US20090182984A1 (en) | Execute Relative Long Facility and Instructions Therefore | |
US20090182992A1 (en) | Load Relative and Store Relative Facility and Instructions Therefore | |
US20090182985A1 (en) | Move Facility and Instructions Therefore | |
US20090182982A1 (en) | Rotate Then Insert Selected Bits Facility and Instructions Therefore |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A201 | Request for examination | ||
E902 | Notification of reason for refusal | ||
E701 | Decision to grant or registration of patent right | ||
GRNT | Written decision to grant | ||
FPAY | Annual fee payment |
Payment date: 20160128 Year of fee payment: 4 |
|
FPAY | Annual fee payment |
Payment date: 20170125 Year of fee payment: 5 |
|
FPAY | Annual fee payment |
Payment date: 20180129 Year of fee payment: 6 |
|
FPAY | Annual fee payment |
Payment date: 20200129 Year of fee payment: 8 |