KR101464808B1 - 명령어가 이용할 수 있는 범용 레지스터의 수를 확장하는 상위-워드 기능 - Google Patents

명령어가 이용할 수 있는 범용 레지스터의 수를 확장하는 상위-워드 기능 Download PDF

Info

Publication number
KR101464808B1
KR101464808B1 KR1020110050027A KR20110050027A KR101464808B1 KR 101464808 B1 KR101464808 B1 KR 101464808B1 KR 1020110050027 A KR1020110050027 A KR 1020110050027A KR 20110050027 A KR20110050027 A KR 20110050027A KR 101464808 B1 KR101464808 B1 KR 101464808B1
Authority
KR
South Korea
Prior art keywords
gpr
operand
instruction
bits
bit
Prior art date
Application number
KR1020110050027A
Other languages
English (en)
Other versions
KR20110139098A (ko
Inventor
단 에프 그라이너
마셀 미트란
티모시 제이 시겔
Original Assignee
인터내셔널 비지네스 머신즈 코포레이션
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 인터내셔널 비지네스 머신즈 코포레이션 filed Critical 인터내셔널 비지네스 머신즈 코포레이션
Publication of KR20110139098A publication Critical patent/KR20110139098A/ko
Application granted granted Critical
Publication of KR101464808B1 publication Critical patent/KR101464808B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/34Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes
    • G06F9/342Extension of operand address space
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/3012Organisation of register space, e.g. banked or distributed register file
    • G06F9/30138Extension of register space, e.g. register cache
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/30105Register structure
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/3012Organisation of register space, e.g. banked or distributed register file
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30145Instruction analysis, e.g. decoding, instruction word fields
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30145Instruction analysis, e.g. decoding, instruction word fields
    • G06F9/3016Decoding the operand specifier, e.g. specifier format
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30145Instruction analysis, e.g. decoding, instruction word fields
    • G06F9/3016Decoding the operand specifier, e.g. specifier format
    • G06F9/30167Decoding the operand specifier, e.g. specifier format of immediate specifier, e.g. constants
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30181Instruction operation extension or modification
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30181Instruction operation extension or modification
    • G06F9/30189Instruction operation extension or modification according to execution mode, e.g. mode flag
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/32Address formation of the next instruction, e.g. by incrementing the instruction counter
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/32Address formation of the next instruction, e.g. by incrementing the instruction counter
    • G06F9/322Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address

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

컴퓨터는 일련의 범용 레지스터(GPR)를 이용한다. 각각의 GPR은 복수의 부분을 포함한다. 대용량 GPR 모드에서 동작하는 운영 체제 및 응용 프로그램 등의 프로그램은 GPR 전체에 액세스하지만, 소용량 GPR 모드에서 동작하는 응용 프로그램 등의 프로그램은 한번에 일부분에만 액세스한다. 소용량 GPR 모드에서, 명령어 연산 코드는 어느 부분이 액세스되는지를 결정할 수 있다.

Description

명령어가 이용할 수 있는 범용 레지스터의 수를 확장하는 상위-워드 기능{HIGH-WORD FACILITY FOR EXTENDING THE NUMBER OF GENERAL PURPOSE REGISTERS AVAILABLE TO INSTRUCTIONS}
본 발명은 컴퓨터 시스템에 관한 것으로서, 보다 상세하게는 컴퓨터 시스템 프로세서 명령어 기능에 관한 것이다.
상표: IBM®은 미국 뉴욕주 아몬크 소재의 International Business Machines Corporation의 등록 상표이다. S/390, Z900, z990 및 z10과 기타 제품 이름은 International Business Machines Corporation 또는 기타 회사의 등록 상표 또는 제품명일 수 있다.
IBM은 많은 뛰어난 재능이 있는 엔지니어들의 연구를 통해 1960년대부터 현재까지 IBM® System 360이라고 알려진 머신으로 시작하여, 컴퓨팅 시스템에 대한 그의 본질적인 성질로 인해, "메인 프레임"이라고 알려지게 된 특별한 아키텍처를 제작해왔으며, 이 메인 프레임의 동작 원리는, 수년에 걸쳐 작성된 IBM의 동작 원리(Principles of Operation)에 포함시키는 것에 의한 상당한 기여와 같은, "메인 프레임"으로 표현되는 컴퓨팅 머신의 상태를 향상시키는 것에 대한 상당한 기여로 인해 IBM 발명자에 의해 발명되어 채택된 명령어의 "메인 프레임" 구현 시에 실행될 수 있는 명령어를 기술함으로써 머신의 아키텍처를 나타낸다. 2009년 2월에 발표된 IBM® z/Architecture® 동작 원리의 제8판은 SA22-7832-07로서 표준 발표 문헌(standard published reference)이 되었으며, IBM System z10® Enterprise Class 서버를 비롯한 IBM의 z10® 메인 프레임 서버에 포함되어 있다. IBM Z/Architecture® 동작 원리인 출판물 SA22-7832-07는 참조 문헌으로서 그 전체 내용이 본 명세서에 포함된다.
도 1a를 참조하면, 호스트 컴퓨터 시스템(50)의 대표적인 구성요소들이 도시되어 있다. 공지된 구성요소들의 다른 배열도 역시 컴퓨터 시스템에서 이용될 수 있다. 대표적인 호스트 컴퓨터(50)는 메인 저장소[컴퓨터 메모리(2)]와 통신을 하는 하나 이상의 CPU(1)는 물론 저장 장치(11)에 대한 I/O 인터페이스 및 기타 컴퓨터 또는 SAN과 통신하기 위한 네트워크(10) 등을 포함한다. CPU(1)는 구조적 명령어 세트(architected instruction set) 및 구조적 기능을 가지는 아키텍처와 호환된다. CPU(1)는 프로그램 주소(가상 주소)를 메모리의 실제 주소로 변환하는 DAT(Dynamic Address Translation)(3)를 가질 수 있다. DAT는 통상적으로 컴퓨터 메모리(2)의 블록에 대한 나중의 액세스가 주소 변환의 지연을 필요로 하지 않도록 변환을 캐싱하기 위해 TLB(Translation Lookaside Buffer)(7)를 포함한다. 통상적으로, 캐시(9)는 컴퓨터 메모리(2)와 프로세서(1) 사이에서 이용된다. 캐시(9)는 계층적일 수 있으며, 2개 이상의 CPU에 이용가능한 대용량 캐시 및 대용량 캐시와 각각의 CPU 사이의 소용량 고속(하위 레벨) 캐시를 갖는다. 어떤 구현에서, 하위 레벨 캐시는 명령어 페치 및 데이터 액세스를 위한 개별적인 하위 레벨 캐시를 제공하기 위해 분리되어 있다. 일 실시예에서, 명령어는 명령어 페치 유닛(instruction fetch unit)(4)에 의해 메모리(2)로부터 캐시(9)를 통해 페치된다. 명령어는 명령어 디코드 유닛(instruction decode unit)(106)에서 디코딩되고 (어떤 실시예에서 다른 명령어와 함께) 명령어 실행 유닛(8)으로 디스패치(dispatch)된다. 통상적으로, 몇개의 실행 유닛(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)의 아키텍처와는 다른 아키텍처의 구조적 명령어 세트(architected instruction set)의 네이티브 명령어 - 네이티브 명령어는 에뮬레이션 루틴 메모리(23)로부터 획득됨 - 를 실행하고, 액세스된 호스트 명령어의 펑션(function)을 에뮬레이트하기 위한 네이티브 명령어 실행 루틴을 결정하기 위해 액세스된 호스트 명령어(들)를 디코딩할 수 있는 시퀀스 및 액세스/디코드(Sequence & Access/Decode) 루틴에서 획득된 하나 이상의 명령어(들)을 이용함으로써 호스트 컴퓨터 메모리(2) 내의 프로그램으로부터 실행을 위한 호스트 명령어에 액세스할 수 있다. 호스트 컴퓨터 시스템(50) 아키텍처에 대해 정의된 기타 기능은, 예를 들어, 범용 레지스터, 제어 레지스터, 동적 주소 변환(Dynamic Address Translation), 및 I/O 서브시스템 지원 및 프로세서 캐시와 같은 기능을 비롯한 구조적 기능 루틴(Architected Facilities Routine)에 의해 에뮬레이트될 수 있다. 에뮬레이션 루틴은 또한, 에뮬레이션 루틴의 성능을 향상시키기 위해, 에뮬레이션 프로세서(27)에서 이용가능한 펑션(범용 레지스터 및 가상 주소의 동적 변환 등)을 이용할 수 있다. 프로세서(27)가 호스트 컴퓨터(50)의 펑션을 에뮬레이트하는 것을 돕기 위해 특수 하드웨어 및 오프로드 엔진(Off Load Engine)도 역시 제공될 수 있다.
메인 프레임에서, 구조적 머신 명령어(architected machine instruction)가 종종 컴파일러 응용 프로그램을 통해 프로그래머(현재는 보통 "C" 프로그래머)에 의해 사용된다. 저장 매체에 저장된 이 명령어는 본질적으로 z/Architecture IBM 서버에서 또는 다른 대안으로서 다른 아키텍처를 실행하는 머신에서 실행될 수 있다. 이 명령어는 기존의 및 장래의 IBM 메인프레임 서버 및 IBM의 기타 머신(예를 들어, pSeries® 서버 및 xSeries® 서버)에서 에뮬레이트될 수 있다. 이 명령어는 IBM®, Intel®, AMD, Sun Microsystems, 및 기타에 의해 제조된 하드웨어를 사용하는 아주 다양한 머신 상에서 Linux를 실행시키는 머신에서 실행될 수 있다. z/Architecture® 하에서 그 하드웨어 상에서의 실행 이외에, Hercules, UMX, FSI(Fundamental Software, Inc) 또는 PSI(Platform Solutions, Inc.)에 의해 에뮬레이션을 사용하는 머신 뿐만 아니라 Linux도 사용될 수 있으며, 이 경우 일반적으로 실행은 에뮬레이션 모드에서 이루어진다. 에뮬레이션 모드에서, 에뮬레이트된 프로세서의 아키텍처를 에뮬레이트하기 위해 네이티브 프로세서(native processor)에 의해 에뮬레이션 소프트웨어가 실행된다.
네이티브 프로세서(27)는 통상적으로 에뮬레이트된 프로세서의 에뮬레이션을 수행하는 펌웨어 또는 네이티브 운영 체제(native operating system)를 포함하는 에뮬레이션 소프트웨어(23)를 실행한다. 에뮬레이션 소프트웨어(23)는 에뮬레이트된 프로세서 아키텍처의 명령어를 페치하여 실행하는 일을 맡고 있다. 에뮬레이션 소프트웨어(23)는 명령어 경계를 추적하기 위해 에뮬레이트된 프로그램 카운터(emulated program counter)를 유지한다. 에뮬레이션 소프트웨어(23)는 한번에 하나 이상의 에뮬레이트된 머신 명령어를 페치하고 이 하나 이상의 에뮬레이트된 머신 명령어를 네이티브 프로세서에서 실행하기 위한 대응하는 일군의 네이티브 머신 명령어로 변환할 수 있다. 이 변환된 명령어는 보다 빠른 변환이 달성될 수 있도록 캐싱될 수 있다. 그럼에도 불구하고, 에뮬레이션 소프트웨어는 에뮬레이트된 프로세서용으로 작성된 운영 체제 및 응용 프로그램이 올바르게 동작하도록 하기 위해 에뮬레이트된 프로세서 아키텍처의 아키텍처 규칙을 유지해야만 한다. 게다가, 에뮬레이트된 프로세서 상에서 실행되도록 설계된 운영 체제 또는 응용 프로그램이 에뮬레이션 소프트웨어를 갖는 네이티브 프로세서 상에서 실행될 수 있도록, 에뮬레이션 소프트웨어는 제어 레지스터, 범용 레지스터, 부동 소수점 레지스터, 예를 들어, 세그먼트 테이블(segment table) 및 페이지 테이블(page table)을 포함하는 동적 주소 변환 함수, 인터럽트 메커니즘, 컨텍스트 전환 메커니즘, TOD(Time of Day) 클록 및 I/O 서브시스템에 대한 구조적 인터페이스(architected interface)(이들로 제한되지 않음)를 비롯한 에뮬레이트된 프로세서(1) 아키텍처에 의해 식별되는 리소스를 제공해야만 한다.
에뮬레이트되는 특정의 명령어가 디코딩되고, 개개의 명령어의 펑션을 수행하기 위해 서브루틴이 호출된다. 에뮬레이트된 프로세서(1)의 펑션을 에뮬레이트하는 에뮬레이션 소프트웨어 함수(23)는, 예를 들어, "C" 서브루틴 또는 드라이버로, 또는 바람직한 실시예의 설명을 이해한 후에 이 기술 분야에 속하는 특정의 하드웨어에 대한 드라이버를 제공하는 어떤 다른 방법으로 구현된다. 다양한 소프트웨어 및 하드웨어 에뮬레이션 특허로는 발명의 명칭이 "Multiprocessor for hardware emulation(하드웨어 에뮬레이션용 멀티프로세서)"인 Beausoleil 등의 미국 특허 제5,551,013호, 발명의 명칭이 "Preprocessing of stored target routines for emulating incompatible instructions on a target processor(대상 프로세서 상에서 비호환 명령어를 에뮬레이트하기 위한 저장된 대상 루틴의 전처리)"인 Scalzi 등의 미국 특허 제6,009,261호, 발명의 명칭이 "Decoding guest instruction to directly access emulation routines that emulate the guest instructions(게스트 명령어를 에뮬레이트하는 에뮬레이션 루틴을 직접 액세스하기 위한 게스트 명령어의 디코딩)"인 Davidian 등의 미국 특허 제5,574,873호, 발명의 명칭이 "Symmetrical multiprocessing bus and chipset used for coprocessor support allowing non-native code to run in a system(비네이티브 코드가 시스템에서 실행될 수 있게 해주는 코프로세서 지원을 위해 사용되는 대칭형 멀티프로세싱 버스 및 칩셋)"인 Gorishek 등의 미국 특허 제6,308,255호, 발명의 명칭이 "Dynamic optimizing object code translator for architecture emulation and dynamic optimizing object code translation method(아키텍처 에뮬레이션을 위한 동적 최적화 오브젝트 코드 번역기 및 동적 최적화 오브젝트 코드 번역 방법)"인 Lethin 등의 미국 특허 제6,463,582호, 및 발명의 명칭이 "Method for emulating guest instructions on a host computer through dynamic recompilation of host instructions(호스트 명령어의 동적 재컴파일을 통해 호스트 컴퓨터 상에서 게스트 명령어를 에뮬레이트하는 방법)"인 Eric Traut의 미국 특허 제5,790,825호가 있으며, 이들 각각은 참조 문헌으로서 그 전체 내용이 본 명세서에 포함된다. 이들 참조 문헌은 다른 머신용으로 구성된 명령어 형식(instruction format)을 당업자에게 이용가능한 대상 머신용으로 에뮬레이션하는 것을 달성하는 각종의 공지된 방식은 물론 이상에서 언급한 방식에서 사용되는 상용 소프트웨어 기법을 기술하고 있다.
범용 레지스터 등의 아키텍처 리소스에 대한 의존성을 완화시키고 새로운 명령어를 이용하는 소프트웨어 버전의 기능 및 성능을 향상시키는 기존의 아키텍처와 부합하는 새로운 명령어 기능이 필요하다.
상위-워드 기능의 실시예에서, 제1 수의 대용량 GPR(General Purpose Register, 범용 레지스터)을 가지는 컴퓨터에서 프로그램의 명령어에 의해 이용가능한 GPR의 유효 수(effective number)가 확장되며, 각각의 명령어는 연산 코드(opcode) 및 대응하는 GPR을 지정하는 하나 이상의 GPR 필드를 포함하고, 각각의 대용량 GPR은 제1 부분 및 제2 부분을 포함하며, 상기 대용량 GPR은 제1 부분으로 이루어진 제1 소용량 GPR(small GPR) 및 제2 부분으로 이루어진 제2 소용량 GPR을 포함하고, 컴퓨터가 소용량 GPR 모드에 있는 것에 응답하여, a) 및 b)를 수행하는 단계가 수행되며 - 여기서 a) 제1 명령어 세트의 명령어가 실행되고, 제1 명령어 세트는 상기 제1 소용량 GPR에 액세스하며, 이 실행은 상기 제1 소용량 GPR에 기초하여 메모리 피연산자에 액세스하거나 제1 소용량 GPR 피연산자에 액세스하기 위한 메모리 주소를 생성하는 단계를 포함하고, 제1 소용량 GPR은 상기 제1 부분으로 이루어져 있으며, b) 상기 제2 소용량 GPR에 액세스하는 제2 명령어 세트의 명령어가 실행되고, 이 실행은 상기 제2 소용량 GPR에 기초하여 메모리 피연산자에 액세스하거나 제2 소용량 GPR 피연산자에 액세스하기 위한 메모리 주소를 생성하는 단계를 포함하고, 제2 소용량 GPR은 상기 제2 부분으로 이루어져 있음 -, 컴퓨터가 대용량 GPR 모드에 있는 것에 응답하여, 제3 명령어 세트의 명령어가 실행되고, 이 실행은 상기 대용량 GPR에 기초하여 메모리 피연산자에 액세스하거나 상기 제1 부분 및 상기 제2 부분을 포함하는 대용량 GPR 피연산자에 액세스하기 위한 메모리 주소를 생성하는 단계를 포함한다.
일 실시예에서, 소용량 GPR 모드는 24 비트 어드레싱 모드(addressing mode) 또는 31 비트 어드레싱 모드 중 하나에 있는 것을 포함한다.
일 실시예에서, 제1 부분은 32 비트이고, 제2 부분은 32 비트이며, 제3 부분은 64 비트이다.
일 실시예에서, 제2 명령어 세트의 명령어의 실행은 2개의 피연산자에 기초하여 대응하는 연산 코드 정의 펑션(opcode defined function)을 수행하는 단계, 및 결과를 저장하는 단계를 포함하고, 대응하는 연산 코드 정의 펑션은 2개의 피연산자의 ADD 펑션 또는 2개의 피연산자의 COMPARE 펑션으로 이루어져 있다.
일 실시예에서, 제2 명령어 세트의 명령어의 실행은 2개의 피연산자에 기초하여 대응하는 연산 코드 정의 펑션(opcode defined function)을 수행하는 단계, 및 결과를 저장하는 단계를 포함하고, 대응하는 연산 코드 정의 펑션은 메모리로부터 피연산자의 LOAD 펑션 또는 메모리에 피연산자의 STORE 펑션으로 이루어져 있다.
일 실시예에서, 제2 명령어 세트의 명령어의 실행은 2개의 피연산자에 기초하여 대응하는 연산 코드 정의 펑션(opcode defined function)을 수행하는 단계, 및 결과를 저장하는 단계를 포함하고, 대응하는 연산 코드 정의 펑션은 ROTATE THEN INSERT SELECTED BITS 펑션이고, 이 펑션은
명령어 지정 양(instruction specified amount)만큼 소스 피연산자(source operand)를 회전시키는 단계, 및
회전된 소스 피연산자의 선택된 부분을 대상 피연산자(target operand)의 선택된 부분에 삽입하는 단계를 포함한다.
일 실시예에서, 소용량 GPR 모드에서 실행 중인 응용 프로그램에 대한 컨텍스트 전환 동안에 대용량 GPR이 저장되고 복원되는 대용량 GPR 모드에서 동작하는 운영 체제가 지원된다.
일 실시예에서, 소용량 GPR 모드에서 실행 중인 응용 프로그램에 대한 컨텍스트 전환 동안에 대용량 GPR이 저장되고 복원되는 대용량 GPR 모드에서 운영 체제가 동작한다.
실시예의 이상의 목적, 특징 및 장점은 물론 추가의 목적, 특징 및 장점이 이하에 기재된 설명으로부터 명백하게 될 것이다.
다른 실시예 및 측면이 본 명세서에 상세히 기술되어 있으며 청구된 발명의 일부로서 간주된다. 장점 및 특징을 더 잘 이해하기 위해, 이 설명 및 도면을 참조할 것이다.
본 발명에 따르면, 소프트웨어 버전의 기능 및 성능을 향상시키는 기존의 아키텍처와 부합하는 새로운 명령어를 제공할 수 있다.
발명인 것으로 생각되는 발명 대상이 상세히 기술되고 명세서의 결론 부분에 있는 특허청구범위에 명백하게 청구되어 있다. 상기한 목적, 특징 및 장점과 기타 목적, 특징 및 장점이 첨부 도면과 관련하여 기술된 이하의 상세한 설명으로부터 명백하다.
도 1a는 예시적인 호스트 컴퓨터 시스템을 나타낸 도면.
도 1b는 예시적인 에뮬레이션 호스트 컴퓨터 시스템을 나타낸 도면.
도 1c는 예시적인 컴퓨터 시스템을 나타낸 도면.
도 2는 예시적인 컴퓨터 네트워크를 나타낸 도면.
도 3은 컴퓨터 시스템의 구성요소를 나타낸 도면.
도 4a 내지 도 4c는 컴퓨터 시스템의 상세한 구성요소를 나타낸 도면.
도 5a 내지 도 5f는 컴퓨터 시스템의 머신 명령어 형식을 나타낸 도면.
도 6은 예시적인 대용량 GPR을 나타낸 도면.
도 7a 및 도 7b는 예시적인 상위-워드 실시예 흐름을 나타낸 도면.
도 8은 예시적인 컨텍스트 전환 흐름을 나타낸 도면.
실시예는 소프트웨어[때때로 LIC(Licensed Internal Code), 펌웨어, 마이크로-코드, 밀리-코드, 피코-코드 등이라고도 하며, 이들 중 어느 것이든 본 실시예에 부합함]에 의해 실시될 수 있다. 도 1a를 참조하면, 소프트웨어 프로그램 코드는 통상적으로, 시스템(50)의 CPU(Central Processing Unit)(1)라고도 하는 프로세서에 의해, CD-ROM 드라이브, 테이프 드라이브 또는 하드 드라이브 등의 장기 저장 매체(11)로부터 액세스된다. 소프트웨어 프로그램 코드는 디스켓, 하드 드라이브 또는 CD-ROM 등의 데이터 처리 시스템에서 사용하기 위한 각종의 공지된 매체 중 어느 것에도 구현될 수 있다. 이 코드는 이러한 매체를 통해 배포될 수 있거나, 하나의 컴퓨터 시스템의 컴퓨터 메모리(2) 또는 저장 장치로부터, 다른 컴퓨터 시스템의 사용자가 사용하기 위해, 이러한 다른 시스템으로의 네트워크(10)를 거쳐 사용자에게 배포될 수 있다.
다른 대안으로서, 프로그램 코드는 메모리(2)에 구현될 수 있고 프로세서 버스를 사용하여 프로세서(1)에 의해 액세스될 수있다. 이러한 프로그램 코드는 다양한 컴퓨터 구성요소 및 하나 이상의 응용 프로그램의 펑션 및 상호작용을 제어하는 운영 체제를 포함한다. 프로그램 코드는 보통 고밀도 저장 매체(11)로부터 고속 메모리(2)로 페이징되며, 고속 메모리(102)에서 프로세서(1)에 의해 처리될 수 있다. 메모리 내에, 물리 매체 상에 소프트웨어 프로그램 코드를 구현하고 및/또는 네트워크를 통해 소프트웨어 코드를 배포하는 기법 및 방법이 공지되어 있으며 본 명세서에서 더 기술하지 않을 것이다. 프로그램 코드는, 생성되어 유형의 매체(tangible medium)[전자 메모리 모듈(RAM), 플래시 메모리, CD(Compact Disc), DVD, 자기 테이프 등(이들로 제한되지 않음)을 포함함] 상에 저장될 때, 종종 "컴퓨터 프로그램 제품"이라고 한다. 컴퓨터 프로그램 제품 매체는 통상적으로 바람직하게는 컴퓨터 시스템 내의 처리 회로에 의해 실행하기 위해 그 처리 회로에 의해 판독가능하다.
도 1c는 대표적인 워크스테이션 또는 서버 하드웨어 시스템을 나타낸 것이다. 도 1c의 시스템(100)은 선택적인 주변 장치를 비롯하여 개인용 컴퓨터, 워크스테이션 또는 서버 등의 대표적인 컴퓨터 시스템(101)을 포함한다. 워크스테이션(101)은 하나 이상의 프로세서(106) 및 공지의 기법에 따라 프로세서(들)(106)와 시스템(101)의 다른 구성요소를 연결하여 이들 간의 통신을 가능하게 해주는 데 이용되는 버스를 포함한다. 버스는 프로세서(106)를 메모리(105) 및, 예를 들어, 하드 드라이브(예를 들어, 자기 매체, CD, DVD 및 플래시 메모리 중 임의의 것을 포함함) 및 테이프 드라이브를 포함할 수 있는 장기 저장 장치(107)에 연결시킨다. 시스템(101)은 또한 마이크로프로세서(106)를 버스를 통해 키보드(104), 마우스(103), 프린터/스캐너(110), 및/또는 기타 인터페이스 장치[터치 감응 스크린, 디지털화된 입력 패드(digitized entry pad) 기타 등등의 임의의 사용자 인터페이스 장치일 수 있음]와 같은 하나 이상의 인터페이스 장치에 연결시키는 사용자 인터페이스 어댑터를 포함할 수 있다. 버스는 또한 LCD 화면 또는 모니터 등의 디스플레이 장치(102)를 디스플레이 어댑터를 통해 마이크로프로세서(106)에 연결시킨다.
시스템(101)은 네트워크(109)와 통신(108)할 수 있는 네트워크 어댑터를 통해 다른 컴퓨터 또는 컴퓨터 네트워크와 통신할 수 있다. 예시적인 네트워크 어댑터는 통신 채널, 토큰 링, 이더넷 또는 모뎀이다. 다른 대안으로서, 워크스테이션(101)은 CDPD(cellular digital packet data) 카드 등의 무선 인터페이스를 사용하여 통신할 수 있다. 워크스테이션(101)은 LAN(Local Area Network) 또는 WAN(Wide Area Network) 내의 이러한 다른 컴퓨터와 연관될 수 있거나, 워크스테이션(101)은 다른 컴퓨터 등과의 클라이언트/서버 구성(client/server arrangement) 내의 클라이언트일 수 있다. 이들 구성 모두는 물론 적절한 통신 하드웨어 및 소프트웨어도 공지되어 있다.
도 2는 실시예가 실시될 수 있는 데이터 처리 네트워크(200)를 나타낸 것이다. 데이터 처리 네트워크(200)는 무선 네트워크 및 유선 네트워크 등의 복수의 개별 네트워크를 포함할 수 있으며, 이들 네트워크 각각은 복수의 개별 워크스테이션(101, 201, 202, 203, 204)을 포함할 수 있다. 그에 부가하여, 당업자라면 잘 알 것인 바와 같이, 하나 이상의 LAN이 포함될 수 있고, 여기서 LAN은 호스트 프로세서에 연결된 복수의 지능형 워크스테이션(intelligent workstation)을 포함할 수 있다.
여전히 도 2를 참조하면, 네트워크는 또한 게이트웨이 컴퓨터(gateway computer)[클라이언트 서버(206)] 또는 응용 프로그램 서버[데이터 저장소에 액세스할 수 있고 또한 워크스테이션(205)으로부터 직접 액세스될 수 있는 원격 서버(208)] 등의 메인 프레임 컴퓨터 또는 서버를 포함할 수 있다. 게이트웨이 컴퓨터(206)는 각각의 네트워크(207)에의 진입 지점(point of entry)으로서 역할한다. 하나의 네트워킹 프로토콜(networking protocol)을 다른 네트워킹 프로토콜에 연결할 때 게이트웨이가 필요하다. 게이트웨이(206)는 바람직하게는 통신 링크에 의해 다른 네트워크[예를 들어, 인터넷(207)]에 연결될 수 있다. 게이트웨이(206)는 또한 통신 링크를 사용하여 하나 이상의 워크스테이션(101, 201, 202, 203, 204)에 직접 연결될 수 있다. 게이트웨이 컴퓨터는 IBM Corp.로부터 입수가능한 IBM eServer™zSeries® z9® Server를 이용하여 구현될 수 있다.
소프트웨어 프로그래밍 코드는 통상적으로 CD-ROM 드라이브 또는 하드 드라이브 등의 장기 저장 매체(107)로부터 시스템(101)의 프로세서(106)에 의해 액세스된다. 소프트웨어 프로그램 코드는 디스켓, 하드 드라이브 또는 CD-ROM 등의 데이터 처리 시스템에서 사용하기 위한 각종의 공지된 매체 중 어느 것에도 구현될 수 있다. 이 코드는 이러한 매체를 통해 배포될 수 있거나, 하나의 컴퓨터 시스템의 메모리 또는 저장 장치로부터, 다른 컴퓨터 시스템의 사용자가 사용하기 위해, 이러한 다른 시스템으로의 네트워크를 거쳐 사용자(210, 211)에게 배포될 수 있다.
다른 대안으로서, 프로그래밍 코드(111)는 메모리(105)에 구현될 수 있고 프로세서 버스를 사용하여 프로세서(106)에 의해 액세스될 수있다. 이러한 프로그래밍 코드는 다양한 컴퓨터 구성요소 및 하나 이상의 응용 프로그램(112)의 펑션 및 상호작용을 제어하는 운영 체제를 포함한다. 프로그램 코드는 보통 고밀도 저장 매체(107)로부터 고속 메모리(105)로 페이징되며, 고속 메모리(102)에서 프로세서(106)에 의해 처리될 수 있다. 메모리 내에, 물리 매체 상에 소프트웨어 프로그래밍 코드를 구현하고 및/또는 네트워크를 통해 소프트웨어 코드를 배포하는 기법 및 방법이 공지되어 있으며 본 명세서에서 더 기술하지 않을 것이다. 프로그램 코드는, 생성되어 유형의 매체(tangible medium)[전자 메모리 모듈(RAM), 플래시 메모리, CD(Compact Disc), DVD, 자기 테이프 등(이들로 제한되지 않음)을 포함함] 상에 저장될 때, 종종 "컴퓨터 프로그램 제품"이라고 한다. 컴퓨터 프로그램 제품 매체는 통상적으로 양호하게는 컴퓨터 시스템 내의 처리 회로에 의해 실행하기 위해 그 처리 회로에 의해 판독가능하다.
프로세서에 의해 가장 쉽게 이용가능한 캐시(보통 프로세서의 다른 캐시보다 더 빠르고 소용량임)는 최하위(L1 또는 레벨 1) 캐시이고, 주 저장소(main store)(주 메모리)는 최상위 레벨 캐시(3개의 레벨이 있는 경우 L3)이다. 최하위 레벨 캐시는 종종 실행될 머신 명령어를 보유하는 명령어 캐시(I-캐시) 및 데이터 피연산자를 보유하는 데이터 캐시(D-캐시)로 나누어진다.
도 3을 참조하면, 프로세서(106)에 대해 예시적인 프로세서 실시예가 도시되어 있다. 통상적으로, 프로세서 성능을 향상시키기 위해 메모리 블록을 버퍼링하는 데 하나 이상의 레벨의 캐시(303)가 이용된다. 캐시(303)는 사용될 가능성이 있는 캐시 라인(cache line)의 메모리 데이터를 보유하는 고속 버퍼이다. 통상적인 캐시 라인은 64, 128 또는 256 바이트의 메모리 데이터이다. 데이터를 캐싱하는 것보다 명령어를 캐싱하기 위해 개별적인 캐시가 종종 이용된다. 공지된 다양한 "스누프(Snoop)" 알고리즘에 의해 캐시 일관성(cache coherence)(메모리와 캐시 내의 라인의 사본의 동기화)이 종종 제공된다. 프로세서 시스템의 주 저장소(main storage)(105)를 종종 캐시라고 한다. 4개의 레벨의 캐시(303)를 가지는 프로세서 시스템에서, 주 저장소(105)를 때때로 레벨 5(L5) 캐시라고 하는데, 그 이유는 L5 캐시가 통상적으로 더 빠르고 컴퓨터 시스템에 의해 이용가능한 비휘발성 저장 장치(DASD, 테이프 등)의 일부분만을 보유하기 때문이다. 주 저장소(105)는 운영 체제에 의해 주 저장소(105)에 페이징되어 들어가고 나오는 데이터의 페이지를 "캐싱"한다.
프로그램 카운터(명령어 카운터)(311)는 실행될 현재 명령어의 주소를 추적한다. z/Architecture 프로세서에서의 프로그램 카운터는 64 비트이고 이전의 어드레싱 한계를 지원하기 위해 31 또는 24 비트로 절단(truncate)될 수 있다. 프로그램 카운터는, 컨텍스트 전환 동안에 유지되도록, 통상적으로 컴퓨터의 PSW(program status word)에 구현된다. 따라서, 프로그램 카운터 값을 가지는 진행 중인 프로그램이, 예를 들어, 운영 체제에 의해 인터럽트될 수 있다(프로그램 환경에서 운영 체제 환경으로의 컨텍스트 전환). 프로그램이 활성이 아닌 동안 프로그램의 PSW가 프로그램 카운터 값을 유지하고, 운영 체제가 실행 중인 동안 운영 체제의 (PSW 내의) 프로그램 카운터가 사용된다. 통상적으로, 프로그램 카운터는 현재 명령어의 바이트 수와 동일한 양만큼 증분된다. RISC(Reduced Instruction Set Computing) 명령어는 통상적으로 고정 길이인 반면, CISC(Complex Instruction Set Computing) 명령어는 통상적으로 가변 길이이다. IBM z/Architecture의 명령어는 2, 4 또는 6 바이트의 길이를 가지는 CISC 명령어이다. 프로그램 카운터(311)는, 예를 들어, 컨텍스트 전환 동작 또는 분기 명령어의 분기 실행(Branch taken) 동작에 의해 수정된다. 컨텍스트 전환 동작에서, 현재 프로그램 카운터 값은 실행 중인 프로그램에 관한 다른 상태 정보[조건 코드(condition code) 등]와 함께 PSW(program status word)에 저장되고, 실행될 새로운 프로그램 모듈의 명령어를 가리키는 새로운 프로그램 카운터 값이 로드된다. 분기 명령어의 결과를 프로그램 카운터(311)에 로드함으로써 프로그램이 프로그램 내에서 결정을 하거나 루프를 돌 수 있게 해주기 위해 분기 실행 동작이 수행된다.
통상적으로, 프로세서(106)를 위해 명령어를 페치하기 위해 명령어 페치 유닛(305)이 이용된다. 페치 유닛은 "그 다음의 순차적 명령어", 분기 실행 명령어의 대상 명령어(target instruction), 또는 컨텍스트 전환 이후의 프로그램의 첫번째 명령어를 페치한다. 최근의 명령어 페치 유닛은 종종 프리페치된 명령어(prefetched instruction)가 사용될지도 모른다는 가능성에 기초하여 추론적으로 명령어를 프리페치하는 프리페치(prefetch) 기법을 이용한다. 예를 들어, 페치 유닛은 그 다음의 순차적 명령어를 포함하는 16 바이트의 명령어 및 부가의 바이트의 추가의 순차적 명령어를 페치할 수 있다.
페치된 명령어는 이어서 프로세서(106)에 의해 실행된다. 일 실시예에서, 페치된 명령어(들)는 페치 유닛의 디스패치 유닛(dispatch unit)(306)에 전달된다. 디스패치 유닛은 명령어(들)를 디코딩하고 디코딩된 명령어(들)에 관한 정보를 적절한 유닛(307, 308, 310)에 전달한다. 실행 유닛(307)은 통상적으로 명령어 페치 유닛(305)으로부터 디코딩된 산술 명령어에 관한 정보를 수신할 것이고, 명령어의 연산 코드에 따라 피연산자에 대해 산술 연산을 수행할 것이다. 피연산자가 바람직하게는 메모리(105), 구조적 레지스터(309)로부터 또는 실행 중인 명령어의 직접 필드(immediate field)로부터 실행 유닛(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(exclusive-or), 회전(rotate) 및 시프트와 같은 논리 함수(logical function)를 수행한다. 바람직하게는, ALU는 설계 의존적인 특수 연산을 지원한다. 기타 회로는, 예를 들어, 조건 코드 및 복구 지원 논리를 비롯한 기타 구조적 기능(408)을 제공할 수 있다. 통상적으로, ALU 연산의 결과는 출력 레지스터 회로(406)에 보유되고, 이 출력 레지스터 회로는 결과를 각종의 기타 처리 펑션에 전달할 수 있다. 많은 프로세서 유닛 구성이 있으며, 본 설명은 단지 대표적인 일 실시예의 이해를 제공하기 위한 것에 불과하다.
예를 들어, ADD 명령어는 산술 및 논리 기능을 가지는 실행 유닛(307)에서 실행될 것인 반면, 예를 들어, 부동 소수점 명령어는 특수 부동 소수점 능력을 가지는 부동 소수점 실행(Floating Point Execution)에서 실행될 것이다. 바람직하게는, 실행 유닛은 피연산자에 대해 연산 코드 정의 펑션을 수행함으로써 명령어에 의해 식별된 피연산자를 처리한다. 예를 들어, 명령어의 레지스터 필드에 의해 식별되는 2개의 레지스터(309)에서 발견되는 피연산자에 대해 ADD 명령어가 실행 유닛(307)에 의해 실행될 수 있다.
실행 유닛(307)은 2개의 피연산자에 대해 산술 덧셈(arithmetic addition)을 수행하고, 그 결과를 제3 피연산자에 저장하며, 여기서 제3 피연산자는 제3 레지스터 또는 2개의 소스 레지스터 중 하나의 소스 레지스터일 수 있다. 실행 유닛은 바람직하게는 시프트, 회전, AND, OR 및 XOR과 같은 각종의 논리 함수는 물론, 덧셈, 뺄셈, 곱셈, 나눗셈 중 임의의 것을 비롯한 각종의 대수 함수를 수행할 수 있는 산술 논리 유닛(ALU)(402)을 이용한다. 어떤 ALU(402)는 스칼라 연산용으로 설계되어 있고, 어떤 ALU는 부동 소수점용으로 설계되어 있다. 데이터는 아키텍처에 따라 빅 엔디안(Big Endian)(최하위 바이트가 최상위 바이트 주소에 있음) 또는 리틀 엔디안(Little Endian)(최하위 바이트가 최하위 바이트 주소에 있음)일 수 있다. IBM z/Architecture는 빅 엔디안(Big Endian)이다. 부호있는 필드(signed field)는 부호 및 크기일 수 있고, 아키텍처에 따라 1의 보수이거나 2의 보수일 수 있다. 2의 보수 숫자는 ALU가 뺄셈 기능을 설계할 필요가 없다는 점에서 유리한데, 그 이유는 2의 보수에서의 마이너스 값 또는 플러스 값이 ALU 내에서 단지 AND 덧셈만을 필요로 하기 때문이다. 숫자는 흔히 단축형으로(in shorthand) 기술되고, 여기서, 예를 들어, 12 비트 필드는 4,096 바이트 블록의 주소를 정의하고 흔히 4 Kbyte(Kilo-byte) 블록이라고 한다.
3-모드 어드레싱(Trimodal Addressing)
"3-모드 어드레싱"은 24-비트 어드레싱 모드, 31-비트 어드레싱 모드 및 64-비트 어드레싱 모드 간에 전환할 수 있음을 말한다. 이 전환은 이하의 명령어에 의해 행해질 수 있다:
Figure 112011039491462-pat00001
이전의 명령어 BRANCH AND SAVE AND SET MODE 및 BRANCH AND SET MODE. 이들 명령어 둘다는, R2 범용 레지스터의 비트 63이 1인 경우, 64-비트 어드레싱 모드를 설정한다. 비트 63이 0인 경우, 이들 명령어는, 그 레지스터의 비트 32가 0인지 1인지에 따라, 각각 24-비트 어드레싱 모드 또는 31-비트 어드레싱 모드를 설정한다.
Figure 112011039491462-pat00002
새로운 명령어 SET ADDRESSING MODE (SAM24, SAM31, 및 SAM64). 이 명령어는 연산 코드에 의해 결정되는 대로 24-비트, 31-비트 또는 64-비트 어드레싱 모드를 설정한다.
3-모드 명령어(Tri-Modal Instruction)
3-모드 어드레싱은 다음과 같은 경우를 제외하고는 논리 저장 주소(logical storage address)가 처리되는 방식으로만 일반 명령어에 영향을 미친다.
Figure 112011039491462-pat00003
명령어 BRANCH AND LINK, BRANCH AND SAVE, BRANCH AND SAVE AND SET MODE, BRANCH AND SET MODE, 및 BRANCH RELATIVE AND SAVE는 24-비트 또는 31-비트 어드레싱 모드에서 ESA/390에서와 같이 범용 레지스터 R1의 비트 위치 32-38에 정보를 배치하거나, 64-비트 어드레싱 모드에서 그 비트 위치에 주소 비트를 배치한다. 새로운 명령어 BRANCH RELATIVE AND SAVE LONG는 똑같은 일을 한다.
Figure 112011039491462-pat00004
명령어 BRANCH AND SAVE AND SET MODE 및 BRANCH AND SET MODE는 64-비트 어드레싱 모드에서 범용 레지스터 R1의 비트 위치 63에 1을 배치한다. 24-비트 또는 31-비트 모드에서, BRANCH AND SAVE AND SET MODE는 비트 63을 0으로 설정하고, BRANCH AND SET MODE는 비트 63을 그대로 둔다.
Figure 112011039491462-pat00005
특정 명령어는 24-비트 또는 31-비트 어드레싱 모드에서 범용 레지스터의 비트 0-31을 그대로 두지만, 64-비트 어드레싱 모드에서 비트 0-31에 주소 또는 길이 정보를 배치하거나 이를 업데이트한다. 이들은 페이지 7-7 상의 프로그래밍 유의점 1에 열거되어 있고, 때때로 모드 명령어(modal instruction)라고 한다.
범용 레지스터의 비트 0-31에 대한 효과:
범용 레지스터의 비트 0-31은 2가지 유형의 명령어에 의해 변경된다. 제1 유형은 모드 명령어(이전 섹션 참조)로서 이 명령어는 64-비트 어드레싱 모드에서 실행된다. 제2 유형은, 어드레싱 모드와 상관없이, 하나의 범용 레지스터에 64-비트 결과 피연산자를 가지거나 짝홀 범용 레지스터 쌍(even-odd general-register pair)에 128-비트 결과 피연산자를 가지는 명령어이다. 제2 유형의 명령어의 대부분은 그의 니모닉에서 "G"만으로 "GF"로 표시되어 있다. 제2 유형의 명령어 모두는 때때로 "G-형" 명령어("G-type” instruction)라고 한다. 프로그램이 64-비트 어드레싱 모드(대용량 GPR 모드)로 실행되지 않고 G-형 명령어를 포함하지 않는 경우, 이 프로그램은 임의의 범용 레지스터의 비트 0-31을 변경할 수 없다(소용량 GPR 모드). 어떤 환경에서, 응용 프로그램의 일부분이 소용량 GPR 모드에 있을 수 있고, 다른 부분이 대용량 GPR 모드에 있을 수 있다. 일 실시예에서, 특정 명령어는 소용량 GPR 모드 명령어일 수 있고, 다른 명령어는 대용량 GPR 모드 명령어일 수 있으며, 컴퓨터의 모드는 컴퓨터가 소용량 GPR 모드 명령어를 실행하는지 대용량 GPR 모드 명령어를 실행하는지에 달려 있다.
도 4b를 참조하면, 분기 명령어를 실행하기 위한 분기 명령어 정보는 통상적으로 분기 유닛(308)으로 전송되고, 이 분기 유닛은 종종 분기 이력 테이블(branch history table)(432) 등의 분기 예측 알고리즘(branch prediction algorithm)을 이용하여, 다른 조건 연산(conditional operation)이 완료되기 전에 분기의 결과를 예측한다. 현재 분기 명령어의 대상(target)이 페치되고, 조건 연산이 완료되기 전에, 추론적으로 실행될 것이다. 조건 연산이 완료될 때, 추론적으로 실행된 분기 명령어는, 조건 연산의 조건 및 추론된 실행의 결과(speculated outcome)에 기초하여, 완료되거나 무시된다. 통상적인 분기 명령어는 조건 코드를 테스트하고, 조건 코드가 분기 명령어의 분기 요건을 만족시키는 경우, 대상 주소(target address)로 분기할 수 있으며, 대상 주소는, 예를 들어, 레지스터 필드에서 발견된 숫자 또는 명령어의 직접 필드를 비롯한 몇개의 숫자에 기초하여 계산될 수 있다. 분기 유닛(308)은 복수의 입력 레지스터 회로(427, 428, 429) 및 출력 레지스터 회로(430)를 가지는 ALU(426)를 이용할 수 있다. 분기 유닛(308)은, 예를 들어, 범용 레지스터(309), 디코드/디스패치 유닛(306) 또는 기타 회로(425)와 통신할 수 있다.
예를 들어, 운영 체제에 의해 시작된 컨텍스트 전환, 컨텍스트 전환을 야기하는 프로그램 예외 또는 오류, 컨텍스트 전환을 야기하는 I/O 인터럽트 신호, 또는 (멀티-스레드 환경에서의) 복수의 프로그램의 멀티-스레딩 활동을 비롯한 각종의 이유로 일군의 명령어의 실행이 인터럽트될 수 있다. 바람직하게는, 컨텍스트 전환 동작은 현재 실행 중인 프로그램에 관한 상태 정보를 저장하고, 이어서 호출되고 있는 다른 프로그램에 관한 상태 정보를 로드한다. 상태 정보는, 예를 들어, 하드웨어 레지스터에 또는 메모리에 저장될 수 있다. 상태 정보는 바람직하게는 실행될 그 다음 명령어를 가리키는 프로그램 카운터 값, 조건 코드, 메모리 변환 정보(memory translation information) 및 구조적 레지스터 내용을 포함한다. 컨텍스트 전환 활동은 하드웨어 회로, 응용 프로그램, 운영 체제 프로그램 또는 펌웨어 코드[마이크로코드, 피코-코드, 또는 LIC(licensed internal code)]에 의해, 단독으로 또는 결합하여, 실시될 수 있다.
프로세서는 명령어-정의 방법에 따라 피연산자에 액세스한다. 명령어는 명령어의 일부분의 값을 사용하여 직접 피연산자(immediate operand)를 제공할 수 있고, 범용 레지스터 또는 전용 레지스터(special purpose register)(예를 들어, 부동 소수점 레지스터)를 명시적으로 가리키는 하나 이상의 레지스터 필드를 제공할 수 있다. 명령어는 연산 코드 필드에 의해 피연산자로서 식별되는 암시적 레지스터(implied register)를 이용할 수 있다. 명령어는 메모리 장소(memory location)를 피연산자로 이용할 수 있다. 피연산자의 메모리 장소는, z/Architecture 장변위 기능(long displacement facility)으로 예시되는 바와 같이, 레지스터, 직접 필드 또는 레지스터와 직접 필드의 조합에 의해 제공될 수 있고, 여기서 명령어는 베이스 레지스터(Base register), 인덱스 레지스터(Index register), 및 직접 필드(변위 필드)(예를 들어, 이들이 서로 가산되어 메모리에서의 피연산자의 주소를 제공함)를 정의한다. 여기에서의 장소는, 달리 언급하지 않는 한, 통상적으로 주 메모리(주 저장소) 내의 장소를 암시한다.
도 4c를 참조하면, 프로세서는 로드/저장 유닛(310)을 사용하여 저장소에 액세스한다. 로드/저장 유닛(310)은 메모리(303)에서의 대상 피연산자의 주소를 획득하고 피연산자를 레지스터(309) 또는 다른 메모리(303) 장소에 로드함으로써 로드 동작을 수행할 수 있거나, 메모리(303)에서의 대상 피연산자의 주소를 획득하고 레지스터(309) 또는 다른 메모리(303) 장소로부터 획득된 데이터를 메모리(303) 내의 대상 피연산자 장소에 저장함으로써 저장 동작을 수행할 수 있다. 로드/저장 유닛(310)은 추론적일 수 있고, 명령어 시퀀스에 대해 비순차적(out-of-order)인 순서로 메모리에 액세스할 수 있지만, 로드/저장 유닛(310)은 프로그램에 대해 명령어가 순서대로 실행되었다는 모습을 유지해야만 한다. 로드/저장 유닛(310)은 범용 레지스터(309), 디코드/디스패치 유닛(306), 캐시/메모리 인터페이스(303) 또는 기타 요소(455)와 통신할 수 있고, 저장 주소(storage address)를 계산하고 파이프라인 시퀀싱(pipeline sequencing)을 제공하여 동작을 순서대로 유지하기 위해 다양한 레지스터 회로, ALU(458) 및 제어 논리(463)를 포함한다. 일부 동작이 비순차적일 수 있지만, 로드/저장 유닛은 공지된 바와 같이 비순차적 동작이 프로그램에 대해 순서대로 수행된 것으로 보이게 하는 기능을 제공한다.
바람직하게는, 응용 프로그램이 "보는" 주소를 종종 가상 주소라고 한다. 가상 주소는 때때로 "논리 주소(logical address)" 및 "유효 주소(effective address)"라고 한다. 이 가상 주소는 가상 주소에 오프셋 값을 단순히 붙이는 것, 하나 이상의 변환 테이블을 통해 가상 주소를 변환하는 것[변환 테이블은 바람직하게는 적어도 세그먼트 테이블(segment table) 및 페이지 테이블(page table)을 단독으로 또는 결합하여 포함하고, 세그먼트 테이블은 페이지 테이블을 가리키는 항목을 가짐]을 비롯한 각종의 DAT(Dynamic Address Translation)(312) 기술 중 하나에 의해 물리 메모리 장소(physical memory location)로 리디렉션된다는 점에서 가상이다. z/Architecture에서, 영역 제1 테이블(region first table), 영역 제2 테이블(region second table), 영역 제3 테이블(region third table), 세그먼트 테이블 및 선택적인 페이지 테이블을 비롯한 변환의 계층구조가 제공된다. 주소 변환의 성능은 종종 가상 주소를 연관된 물리 메모리 장소에 매핑하는 항목을 포함하는 TLB(Translation Look-aside Buffer)를 이용함으로써 향상된다. DAT(312)가 변환 테이블을 사용하여 가상 주소를 변환할 때 항목이 생성된다. 그러면, 그 후의 가상 주소의 사용은 느린 순차적 변환 테이블 액세스보다는 빠른 TLB의 항목을 이용할 수 있다. LRU(Least Recently used)를 비롯한 각종의 대체 알고리즘(replacement algorithm)에 의해 TLB 내용이 관리될 수 있다.
프로세서가 멀티프로세서 시스템의 프로세서인 경우에, 각각의 프로세서는 I/O, 캐시, TLB 및 메모리 등의 공유 리소스를 일관성을 위해 연동되어 있도록 유지할 책임이 있다. 통상적으로, 캐시 일관성을 유지하는 데 "스누프" 기술이 이용될 것이다. 스누프 환경에서, 각각의 캐시 라인은, 공유를 용이하게 해주기 위해, 공유 상태(shared state), 배타적 상태(exclusive state), 변경된 상태(changed state), 유효하지 않은 상태(invalid state), 기타 중 임의의 하나의 상태에 있는 것으로 표시될 수 있다.
I/O 유닛(304)은, 예를 들어, 테이프, 디스크, 프린터, 디스플레이 및 네트워크를 비롯한 주변 장치에 연결하는 수단을 프로세서에게 제공한다. I/O 유닛은 종종 소프트웨어 드라이버에 의해 컴퓨터 프로그램에 제공된다. IBM의 z/Series 등의 메인 프레임에서, 채널 어댑터(Channel Adapter) 및 개방 시스템 어댑터(Open System Adapter)는 운영 체제와 주변 장치 간의 통신을 제공하는 메인 프레임의 I/O 유닛이다.
z/Architecture 동작 원리로부터의 이하의 설명은 컴퓨터 시스템의 아키텍처 보기(architectural view)에 대해 기술한다.
저장소:
컴퓨터 시스템은 주 저장소 내의 정보는 물론 어드레싱, 보호, 그리고 참조 및 변화 기록을 포함한다. 어드레싱의 일부 측면은 주소의 형식, 주소 공간의 개념, 다양한 주소 유형, 및 한 유형의 주소가 다른 유형의 주소로 변환되는 방식을 포함한다. 주 저장소의 일부는 영구적으로 할당된 저장 장소를 포함한다. 주 저장소는 직접 어드레싱가능 고속 액세스 데이터 저장(directly addressable fast-access storage of data)을 시스템에게 제공한다. 데이터 및 프로그램 둘다는 처리될 수 있기 전에 (입력 장치로부터) 주 저장소에 로드되어야 한다.
주 저장소는 하나 이상의 소용량 고속 액세스 버퍼 저장소(때때로 캐시라고 함)를 포함할 수 있다. 캐시는 통상적으로 CPU 또는 I/O 프로세서와 물리적으로 연관되어 있다. 개별적인 저장 매체의 물리적 구조 및 사용의 (성능을 제외한) 효과는 일반적으로 프로그램에 의해 관찰가능하지 않다.
명령어에 대해 그리고 데이터 피연산자에 대해 개별적인 캐시가 유지될 수 있다. 캐시 내의 정보는 캐시 블록(cache block) 또는 캐시 라인(또는 간단히 라인)이라고 하는 인테그럴 경계(integral boundary) 상의 연속적인 바이트에 유지된다. 한 모델은 캐시 라인의 크기(단위: 바이트)를 반환하는 EXTRACT CACHE ATTRIBUTE 명령어를 제공할 수 있다. 한 모델은 또한 저장소를 데이터 또는 명령어 캐시에 프리페치하는 것 또는 데이터를 캐시로부터 해제(release)시키는 것을 수행하는 PREFETCH DATA 및 PREFETCH DATA RELATIVE LONG 명령어를 제공할 수 있다.
저장소를 긴 수평 비트 열(string of bits)로 본다. 대부분의 동작에서, 저장소에의 액세스는 좌에서 우로의 순서로 진행된다. 비트열이 8 비트의 단위로 세분된다. 8-비트 단위는 바이트라고 하며, 모든 정보 형식의 기본 구성요소(basic building block)이다. 저장소에서의 각각의 바이트 장소는 그 바이트 장소의 주소 또는 간단히 바이트 주소인 고유의 음이 아닌 정수에 의해 식별된다. 인접한 바이트 장소는 좌측에서의 0부터 시작하여 좌측에서 우측의 순서로 계속되는 연속적인 주소를 가진다. 주소는 부호없는 이진 정수이고 24, 31 또는 64 비트이다.
정보는 저장소와 CPU 또는 채널 서브시스템 사이에서 한번에 한 바이트 또는 한 그룹의 바이트씩 전송된다. 달리 언급하지 않는 한, 저장소 내의 한 그룹의 바이트는 그 그룹의 가장 왼쪽 바이트(leftmost byte)에 의해 어드레싱된다. 그룹 내의 바이트의 수는 암시적이거나 수행될 동작에 의해 명시적으로 지정된다. CPU 동작에서 사용될 때, 한 그룹의 바이트는 필드라고 한다. 각 그룹의 바이트 내에서, 비트는 좌측에서 우측의 순서로 번호가 매겨진다. 가장 왼쪽 비트는 때때로 "상위" 비트라고 하고, 가장 오른쪽 비트는 "하위" 비트라고 한다. 그렇지만, 비트 번호가 저장 주소는 아니다. 바이트만이 어드레싱될 수 있다. 저장소 내의 바이트의 개별 비트를 처리하기 위해, 전체 바이트에 액세스할 필요가 있다. 바이트 내의 비트는 좌측에서 우측으로 0부터 7까지 번호가 매겨져 있다. 주소 내의 비트는 24-비트 주소의 경우 8-31 또는 40-63의 번호가 매겨져 있거나, 31-비트 주소의 경우 1-31 또는 33-63의 번호가 매겨져 있고, 64-비트 주소의 경우 0-63의 번호가 매겨져 있다. 다중 바이트의 임의의 다른 고정 길이 형식 내에서, 그 형식을 이루고 있는 비트는 0부터 시작하여 연속적으로 번호가 매겨져 있다. 오류 검출을 위해, 바람직하게는 정정을 위해, 각각의 바이트와 함께 또는 한 그룹의 바이트와 함께 하나 이상의 검사 비트(check bit)가 전송될 수 있다. 이러한 검사 비트는 머신에 의해 자동으로 생성되고, 프로그램에 의해 직접 제어될 수 없다. 저장 용량은 바이트의 수로 표현된다. 저장소-피연산자 필드(storage-operand field)의 길이가 명령어의 연산 코드(operation code)에 의해 암시될 때, 그 필드는 고정 길이(1 바이트, 2 바이트, 4 바이트, 8 바이트 또는 16 바이트일 수 있음)를 가진다고 말해진다. 일부 명령어의 경우 더 큰 필드가 암시될 수 있다. 저장소-피연산자 필드의 길이가 암시되지 않고 명시적으로 지정될 때, 그 필드는 가변 길이를 가진다고 말해진다. 가변 길이 피연산자는 1 바이트의 증분으로 길이가 변할 수 있다. 정보가 저장소에 배치될 때, 지정된 필드에 포함되어 있는 그 바이트 장소만의 내용이 대체되지만, 저장소까지의 물리 경로의 폭은 저장되어 있는 필드의 길이보다 더 클 수 있다.
특정의 정보 단위는 저장소에서 인테그럴 경계에 있어야만 한다. 정보 단위의 저장 주소가 정보 단위(바이트)의 길이의 배수일 때, 경계가 정보 단위에 대해 인테그럴(integral)이라고 말해진다. 인테그럴 경계에 있는 2, 4, 8 및 16 바이트의 필드에 특수한 이름이 주어진다. 하프워드(halfword)는 2-바이트 경계에 있는 2개의 연속적인 바이트의 그룹이고, 명령어의 기본 구성요소이다. 워드(word)는 4-바이트 경계에 있는 4개의 연속적인 바이트의 그룹이다. 더블워드(doubleword)는 8-바이트 경계에 있는 8개의 연속적인 바이트의 그룹이다. 쿼드워드(word)는 16-바이트 경계에 있는 16개의 연속적인 바이트의 그룹이다. 저장 주소가 하프워드, 워드, 더블워드 및 쿼드워드를 지정할 때, 주소의 이진 표현은 각각 1개, 2개, 3개, 또는 4개의 가장 오른쪽 0 비트를 포함한다. 명령어는 2-바이트 인테그럴 경계에 있어야만 한다. 대부분의 명령어에 대한 저장소 피연산자는 경계-정렬(boundary-alignment) 요건을 가지지 않는다.
명령어 및 데이터 피연산자에 대해 개별적인 캐시를 구현하는 모델에서, 프로그램이 캐시 라인에 저장을 하고, 이 저장이 그 후에 페치되는 명령어를 변경하는지 여부와 상관없이, 그 후에 캐시 라인으로부터 명령어가 페치되는 경우 상당한 지연을 경험할지도 모른다.
명령어:
통상적으로, CPU의 동작은 저장 주소의 오름차순으로 좌측에서 우측으로 한번에 하나씩 순차적으로 실행되는 저장소 내의 명령어에 의해 제어된다. 분기, LOAD PSW, 인터럽트, SIGNAL PROCESSOR 명령(SIGNAL PROCESSOR order), 또는 수동 개입에 의해 순차적인 동작의 변화가 야기될 수 있다.
바람직하게는, 명령어는 2개의 주요 부분을 포함한다:
Figure 112011039491462-pat00006
수행될 연산을 지정하는 연산 코드(op code)
Figure 112011039491462-pat00007
선택적으로, 참여하는 피연산자의 지정.
z/Architecture의 명령어 형식이 도 5a 내지 도 5f에 나타내어져 있다. 명령어는 단순히 연산 코드(501), 또는 연산 코드와 각종의 필드[직접 피연산자(immediate operand) 또는 피연산자를 레지스터에 또는 메모리에 위치시키기 위한 레지스터 지정자(register specifier)를 포함함]를 제공할 수 있다. 연산 코드는 하나 이상의 특정의 범용 레지스터(GPR) 등의 암시적 리소스(피연산자 등)가 사용되어야 한다는 것을 하드웨어에 알려줄 수 있다. 피연산자는 다음과 같이 3개의 부류로 그룹화될 수 있다: 레지스터에 위치한 피연산자, 직접 피연산자 및 저장소에 있는 피연산자. 피연산자는 명시적으로 또는 암시적으로 지정될 수 있다. 레지스터 피연산자는 범용 레지스터, 부동 소수점 레지스터, 액세스 레지스터 또는 제어 레지스터에 위치할 수 있으며, 레지스터의 유형은 연산 코드에 의해 식별된다. 명령어 내의 4-비트 필드(R 필드라고 함)에서 레지스터를 식별함으로써 피연산자를 포함하는 레지스터가 지정된다. 일부 명령어의 경우, 피연산자는 암시적으로 지정된 레지스터에 위치하며, 이 레지스터는 연산 코드에 의해 암시된다. 직접 피연산자는 명령어 내에 포함되어 있고, 직접 피연산자를 포함하는 8-비트, 16-비트 또는 32-비트 필드를 I 필드라고 한다. 저장소에 있는 피연산자는 암시된 길이를 가질 수 있거나, 비트 마스크에 의해 지정될 수 있거나, 명령어에서 4-비트 또는 8-비트 길이 지정(length specification)(L 필드라고 함)에 의해 지정될 수 있거나, 범용 레지스터의 내용에 의해 지정되는 길이를 가질 수 있다. 저장소에 있는 피연산자의 주소는 범용 레지스터의 내용을 주소의 일부로서 사용하는 형식에 의해 지정된다. 이것으로 인해 다음과 같은 것들이 가능하게 된다:
1. 단축 표기법을 사용하여 전체 주소를 지정하는 것
2. 피연산자에 대해 범용 레지스터를 이용하는 명령어를 사용하여 주소 조작을 수행하는 것
3. 명령어 스트림의 변경 없이 프로그램 수단에 의해 주소를 수정하는 것
4. 다른 프로그램으로부터 수신된 주소를 직접 사용함으로써 데이터 영역의 위치에 상관없이 연산하는 것
저장소를 말하는 데 사용되는 주소는 명령어 내의 R 필드에 의해 지정된 레지스터에 포함되어 있거나, 명령어 내의 B 필드, X 필드 및 D 필드에 의해 각각 지정되는 기준 주소(base address), 인덱스(index) 및 변위(displacement)로부터 계산된다. CPU가 액세스-레지스터 모드에 있을 때, B 또는 R 필드는, 주소를 지정하는데 사용되는 것에 부가하여, 액세스 레지스터를 지정할 수 있다. 명령어의 실행을 설명하기 위해, 피연산자는 바람직하게는 제1 및 제2 피연산자와, 어떤 경우에, 제3 및 제4 피연산자라고 지정된다. 일반적으로, 2개의 피연산자가 명령어 실행에 참여하고, 그 결과가 제1 피연산자를 대체한다.
명령어는 길이가 1, 2 또는 3 하프워드이고, 저장소에서 하프워드 경계에 위치해야만 한다. 명령어 형식을 나타내는 도 5a 내지 도 5f를 참조하면, 각각의 명령어는 다음과 같은 25개의 기본 형식들 중 하나로 되어 있다: E 501, I 502, RI 503 504, RIE 505 551 552 553 554, RIL 506 507, RIS 555, RR 510, RRE 511, RRF 512 513 514, RRS, RS 516 517, RSI 520, RSL 521, RSY 522 523, RX 524, RXE 525, RXF 526, RXY 527, S 530, SI 531, SIL 556, SIY 532, SS 533 534 535 536 537, SSE 541 및 SSF 542, 여기서 RRF의 변형이 3개, RI, RIL, RS, 및 RSY의 변형이 2개, 그리고 RIE 및 SS의 변형이 5개 있음.
형식 이름은, 일반적으로, 연산에 참여하는 피연산자의 부류 및 필드에 관한 어떤 상세를 나타낸다:
Figure 112013011840462-pat00008
RIS는 레지스터 및 직접 연산(register-and-immediate operation) 및 저장소 연산(storage operation)을 나타낸다.
Figure 112013011840462-pat00009
RRS는 레지스터 및 레지스터 연산(register-and-register operation) 및 저장소 연산을 나타낸다.
Figure 112013011840462-pat00010
SIL은 저장소 및 직접 연산(storage-and-immediate operation)을 나타내고, 16-비트 직접 필드를 가진다.
I, RR, RS, RSI, RX, SI, 및 SS 형식에서, 명령어의 첫번째 바이트는 연산 코드를 포함한다. E, RRE, RRF, S, SIL, 및 SSE 형식에서, S 형식에서의 일부 명령어의 경우, 연산 코드가 첫번째 바이트만으로 되어 있는 경우를 제외하고는, 명령어의 처음 2 바이트는 연산 코드를 포함한다. RI 및 RIL 형식에서, 연산 코드는 명령어의 첫번째 바이트 및 비트 위치 12-15에 있다. RIE, RIS, RRS, RSL, RSY, RXE, RXF, RXY, 및 SIY 형식에서, 연산 코드는 명령어의 첫번째 바이트 및 여섯번째 바이트에 있다. 연산 코드의 첫번째 바이트 또는 유일한 바이트의 처음 2 비트가 다음과 같이 명령어의 길이 및 형식을 지정한다:
RR, RRE, RRF, RRR, RX, RXE, RXF, RXY, RS, RSY, RSI, RI, RIE, 및 RIL 형식에서, R1 필드에 의해 지정된 레지스터의 내용을 제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 형식에서, 명령어의 I 필드인 8-비트 직접-데이터 필드의 내용이 피연산자로서 직접 사용된다. SI 형식에서, 명령어의 I2 필드인 8-비트 직접-데이터 필드의 내용이 제2 피연산자로서 직접 사용된다. B1 및 D1 필드는 길이가 1 바이트인 제1 피연산자를 지정한다. SIY 형식에서, DH1 및 DL1 필드가 D1 필드 대신에 사용되는 것을 제외하고는 연산이 동일하다. 명령어 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 형식에서의 상대-분기 명령어(relative-branch instruction)의 경우, 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 필드의 내용에 가산되어 제2 피연산자 주소를 형성한다. RIS 및 RRS 형식에서와 하나의 SS 형식에서, B4 필드에 의해 지정된 범용 레지스터의 내용이 D4 필드의 내용에 가산되어 제4 피연산자 주소를 형성한다.
하나의 8-비트 길이 필드를 가지는 SS 형식에서, 명령어 AND (NC), EXCLUSIVE OR (XC), MOVE (MVC), MOVE NUMERICS, MOVE ZONES, 및 OR (OC)의 경우, L은 제1 피연산자 주소에 의해 지정된 바이트의 우측에 있는 부가의 피연산자 바이트의 수를 지정한다. 따라서, 제1 피연산자의 길이(단위: 바이트)는 0-255의 L에서의 길이 코드에 대응하는 1-256이다. 저장소 결과는 제1 피연산자를 대체하고, 결코 주소 및 길이에 의해 지정되는 필드를 벗어나 저장되지 않는다. 이 형식에서, 제2 피연산자는 제1 피연산자와 동일한 길이를 가진다. EDIT, EDIT AND MARK, PACK ASCII, PACK UNICODE, TRANSLATE, TRANSLATE AND TEST, UNPACK ASCII, 및 UNPACK UNICODE에 적용되는 이전의 정의의 변형이 있다.
2개의 길이 필드를 가지는 SS 형식에서 그리고 RSL 형식에서, L1은 제1 피연산자 주소에 의해 지정되는 바이트의 오른쪽에 있는 부가의 피연산자 바이트의 수를 지정한다. 따라서, 제1 피연산자의 길이(단위: 바이트)는 0-15의 L1에서의 길이 코드에 대응하는 1-16이다. 이와 유사하게, L2는 제2 피연산자 주소에 의해 지정되는 장소의 오른쪽에 있는 부가의 피연산자 바이트의 수를 지정한다. 결과는 제1 피연산자를 대체하고, 결코 주소 및 길이에 의해 지정되는 필드를 벗어나 저장되지 않는다. 제1 피연산자가 제2 피연산자보다 긴 경우, 제1 피연산자의 길이까지 왼쪽에 0을 추가하여 제2 피연산자가 확장된다. 이 확장은 저장소에 있는 제2 피연산자를 수정하지 않는다. 2개의 R 필드를 가지는 SS 형식에서, MOVE TO PRIMARY, MOVE TO SECONDARY, 및 MOVE WITH KEY 명령어에서 사용되는 바와 같이, R1 필드에 의해 지정된 범용 레지스터의 내용은 실제 길이(true length)라고 하는 32-비트 부호없는 값이다. 피연산자는 둘다 유효 길이(effective length)라고 하는 길이를 가진다. 유효 길이는 실제 길이 또는 256 중 작은 쪽이다. 명령어는 실제 길이에 의해 지정된 총수의 바이트를 이동시키는 루프를 프로그래밍하는 것을 용이하게 해주기 위해 조건 코드를 설정한다. 2개의 R 필드를 가지는 SS 형식은 또한 LOAD MULTIPLE DISJOINT 명령어에 대한 일정 범위의 레지스터 및 2개의 저장소 피연산자를 지정하기 위해 그리고 PERFORM LOCKED OPERATION 명령어에 대한 하나 또는 2개의 레지스터 및 하나 또는 2개의 저장소 피연산자를 지정하기 위해 사용된다.
B1, B2, X2, 또는 B4 필드 중 임의의 필드에 있는 0은 대응하는 주소 성분이 없다는 것을 나타낸다. 없는 성분에 대해, 0은 범용 레지스터 0의 내용에 상관없이, 중간 합(intermediate sum)을 형성하는 데 사용된다. 0의 변위는 특별한 의미가 없다.
현재 PSW의 비트 31 및 32는 어드레싱-모드 비트이다. 비트 31은 확장-어드레싱 모드 비트(extended-addressing mode bit)이고, 비트 32는 기본 어드레싱-모드 비트(basic-addressing-mode bit)이다. 이들 비트는 주소 발생(address generation)에 의해 생성되는 유효 주소의 크기를 제어한다. 현재 PSW의 비트 31 및 32 둘다가 0일 때, CPU는 24-비트 어드레싱 모드에 있으며, 24-비트 명령어 및 피연산자 유효 주소가 발생된다. 현재 PSW의 비트 31이 0이고 비트 32가 1일 때, CPU는 31-비트 어드레싱 모드에 있으며, 31-비트 명령어 및 피연산자 유효 주소가 발생된다. 현재 PSW의 비트 31 및 32 둘다가 1일 때, CPU는 64-비트 어드레싱 모드에 있으며, 64-비트 명령어 및 피연산자 유효 주소가 발생된다. CPU에 의한 명령어의 실행은 명령어 및 피연산자의 주소의 발생을 수반한다.
명령어가 현재 PSW에 의해 지정된 장소로부터 페치될 때, 명령어 주소가 명령어에서의 바이트의 수만큼 증가되고, 명령어가 실행된다. 이어서, 시퀀스에서의 그 다음 명령어를 페치하기 위해 명령어 주소의 새로운 값을 사용하여 동일한 단계들이 반복된다. 24-비트 어드레싱 모드에서, 명령어 주소는 다시 처음으로 넘어가며(wrap around), 명령어 주소 224 - 2에 있는 하프워드 다음에 명령어 주소 0에 있는 하프워드가 온다. 따라서, 24-비트 어드레싱 모드에서, 명령어 주소를 업데이트한 결과로서, PSW 비트 위치 104로부터 캐리(carry)가 상실된다. 31-비트 또는 64-비트 어드레싱 모드에서도, 마찬가지로 명령어 주소는 다시 처음으로 넘어가며, 명령어 주소 231 - 2 또는 264 - 2에 있는 하프워드 다음에 각각 명령어 주소 0에 있는 하프워드가 온다. PSW 비트 위치 97 또는 64로부터 캐리가 각각 상실된다.
저장소를 참조하는 피연산자 주소는 명령어에서의 R 필드에 의해 지정되는 레지스터에 포함되어 있는 중간 값(intermediate value)으로부터 도출되거나, 3개의 이진 숫자, 즉 기준 주소, 인덱스 및 변위의 합으로부터 계산된다. 기준 주소(B)는 명령어 내의 4-비트 필드(B 필드라고 함)에 프로그램에 의해 지정되는 범용 레지스터에 포함된 64-비트 수이다. 기준 주소는 각각의 프로그램 및 데이터 영역을 독립적으로 어드레싱하는 수단으로서 사용될 수 있다. 어레이형 계산(array type calculation)에서, 기준 주소는 어레이의 위치를 지정할 수 있고, 레코드형 처리(record-type processing)에서, 기준 주소는 레코드를 식별해줄 수 있다. 기준 주소는 전체 저장소를 어드레싱하는 것을 제공한다. 기준 주소는 또한 인덱싱을 위해 사용될 수 있다.
인덱스(X)는 명령어 내의 4-비트 필드(X 필드라고 함)에 프로그램에 의해 지정되는 범용 레지스터에 포함된 64-비트 수이다. 인덱스는 RX-형식, RXE-형식, 및 RXY-형식 명령어에 의해 지정된 주소에만 포함되어 있다. RX-형식, RXE-형식, RXF-형식, 및 RXY-형식 명령어는 이중 인덱싱(double indexing)을 가능하게 해주며, 즉 어레이 내의 요소의 주소를 제공하는 데 인덱스가 사용될 수 있다.
변위(D)는 명령어 내의 필드(D 필드라고 함)에 포함된 12-비트 또는 20-비트 수이다. 12-비트 변위는 부호가 없고(unsigned), 기준 주소에 의해 지정된 장소를 넘어 최대 4,095 바이트의 상대 어드레싱(relative addressing)을 제공한다. 20-비트 변위는 부호가 있고(signed), 기준 주소 장소를 넘어 최대 524,287 바이트 또는 기준 주소 장소 이전의 최대 524,288 바이트의 상대 어드레싱(relative addressing)을 제공한다. 어레이형 계산에서, 변위는 요소와 연관된 많은 항목들 중 하나를 지정하는 데 사용될 수 있다. 레코드의 처리에서, 변위는 레코드 내의 항목을 식별하는 데 사용될 수 있다. 12-비트 변위는 특정 형식의 명령어의 비트 위치 20-31에 있다. 일부 형식의 명령어에서, 제2의 12-비트 변위가 또한 명령어에서 비트 위치 36-47에 있다.
20-비트 변위는 RSY, RXY, 또는 SIY 형식의 명령어에만 있다. 이들 명령어에서, D 필드는 비트 위치 20-31에 있는 DL(하위) 필드 및 비트 위치 32-39에 있는 DH(상위) 필드로 이루어져 있다. 장변위 기능이 설치되어 있을 때, DH 필드의 내용을 DL 필드의 내용의 좌측에 첨부함으로써 변위의 숫자 값이 형성된다. 장변위 기능이 설치되어 있지 않을 때, 8개의 0 비트를 DL 필드의 내용의 좌측에 첨부함으로써 변위의 숫자 값이 형성되고, DH 필드의 내용은 무시된다.
중간 합을 형성할 시에, 기준 주소 및 인덱스는 64-비트 이진 정수로서 취급된다. 12-비트 변위는 12-비트 부호없는 이진 정수로서 취급되고, 52개의 0 비트가 좌측에 첨부된다. 20-비트 변위는 20-비트 부호있는 이진 정수로서 취급되고, 부호 비트와 같은 44 비트가 좌측에 첨부된다. 이들 3개가 64-비트 이진 숫자로서 가산되고, 오버플로우를 무시한다. 합은 항상 길이가 64 비트이고, 발생된 주소를 형성하는 중간 값으로서 사용된다. 중간 값의 비트는 0-63의 번호가 매겨져 있다. B1, B2, X2, 또는 B4 필드 중 임의의 필드에 있는 0은 대응하는 주소 성분이 없다는 것을 나타낸다. 없는 성분에 대해, 0은 범용 레지스터 0의 내용에 상관없이, 중간 합을 형성하는 데 사용된다. 0의 변위는 특별한 의미가 없다.
명령어 설명이 R 필드에 의해 지정된 범용 레지스터의 내용이 저장소에 있는 피연산자를 어드레싱하는 데 사용된다는 것을 명시할 때, 레지스터 내용이 64-비트 중간 값으로서 사용된다.
명령어는 주소 계산을 위해서도 피연산자의 장소로서도 동일한 범용 레지스터를 지정할 수 있다. 레지스터(있는 경우)가 연산에 의해 변경되기 전에 주소 계산이 완료된다. 개별적인 명령어 정의에서 달리 언급하고 있지 않는 한, 발생된 피연산자 주소는 저장소에 있는 피연산자의 가장 왼쪽 바이트를 지정한다.
발생된 피연산자 주소는 항상 길이가 64 비트이고, 비트는 0-63의 번호가 매겨져 있다. 발생된 주소가 중간 값으로부터 획득되는 방식은 현재 어드레싱 모드에 따라 다르다. 24-비트 어드레싱 모드에서, 중간 값의 비트 0-39는 무시되고, 발생된 주소의 비트 0-39는 강제로 0으로 되며, 중간 값의 비트 40-63은 발생된 주소의 비트 40-63으로 된다. 31-비트 어드레싱 모드에서, 중간 값의 비트 0-32는 무시되고, 발생된 주소의 비트 0-32는 강제로 0으로 되며, 중간 값의 비트 33-63은 발생된 주소의 비트 33-63으로 된다. 64-비트 어드레싱 모드에서, 중간 값의 비트 0-63은 발생된 주소의 비트 0-63으로 된다. 인덱스 레지스터 및 기준-주소 레지스터(base-address register)에서 마이너스 값이 사용될 수 있다. 31-비트 어드레싱 모드에서 이들 값의 비트 0-32가 무시되고, 24-비트 어드레싱 모드에서 비트 0-39가 무시된다.
분기 명령어의 경우, 분기가 택해질 때 실행될 그 다음 명령어의 주소를 분기 주소라고 한다. 분기 명령어에 따라, 명령어 형식은 RR, RRE, RX, RXY, RS, RSY, RSI, RI, RIE, 또는 RIL일 수 있다. RS, RSY, RX, 및 RXY 형식에서는, 분기 주소가 기준 주소, 변위 및 인덱스(RX 및 RXY 형식에서)에 의해 지정된다. 이들 형식에서, 중간 값의 발생은 피연산자 주소 중간 값의 발생에 대한 것과 동일한 규칙을 따른다. RR 및 RRE 형식에서, R2 필드에 의해 지정된 범용 레지스터의 내용은 분기 주소가 형성되는 바탕이 되는 중간 값으로서 사용된다. 범용 레지스터 0는 분기 주소를 포함하는 것으로 지정될 수 없다. R2 필드 내의 0의 값은 명령어가 분기 없이 실행되게 한다.
상대-분기 명령어는 RSI, RI, RIE, 및 RIL 형식으로 되어 있다. 상대-분기 명령어에 대한 RSI, RI 및 RIE 형식에서, I2 필드의 내용이 하프워드의 수를 지정하는 16-비트 부호있는 이진 정수로서 취급된다. RIL 형식에서, I2 필드의 내용이 하프워드의 수를 지정하는 32-비트 부호있는 이진 정수로서 취급된다. 분기 주소는 상대-분기 명령어의 주소에 I2 필드에 의해 지정되는 하프워드의 수를 더한 것이다.
RSI, RI, RIE, 또는 RIL 형식에서의 상대 분기 명령어에 대한 64-비트 중간 값은 2개의 가수(addend)의 합이며, 비트 위치 0으로부터의 오버플로우는 무시된다. RSI, RI, 또는 RIE 형식에서, 제1 가수는 I2 필드의 내용이며 1개의 0 비트가 우측에 첨부되어 있고 내용의 부호 비트와 같은 47 비트가 좌측에 첨부되어 있으며, 다만 COMPARE AND BRANCH RELATIVE, COMPARE IMMEDIATE AND BRANCH RELATIVE, COMPARE LOGICAL AND BRANCH RELATIVE 및 COMPARE LOGICAL IMMEDIATE AND BRANCH RELATIVE의 경우, 제1 가수는 I4 필드의 내용이고 I2 필드에 대해 상기한 바와 같이 비트가 첨부되어 있다. RIL 형식에서, 제1 가수는 I2 필드의 내용이고 1개의 0 비트가 우측에 첨부되어 있고 내용의 부호 비트와 같은 31 비트가 좌측에 첨부되어 있다. 모든 형식에서, 제2 가수는 분기 명령어의 64-비트 주소이다. 분기 명령어의 주소는 그 다음 순차적 명령어를 어드레싱하기 위해 그 주소가 업데이트되기 전의 PSW에서의 명령어 주소이거나, EXECUTE가 사용되는 경우 EXECUTE 명령어의 대상의 주소이다. EXECUTE가 24-비트 또는 31-비트 어드레싱 모드에서 사용되는 경우, 분기 명령어의 주소는 각각 40 또는 33개의 0이 좌측에 첨부되어 있는 대상 주소이다.
분기 주소는 항상 길이가 64 비트이고, 비트는 0-63의 번호가 매겨져 있다. 분기 주소는 현재 PSW의 비트 64-127을 대체한다. 분기 주소가 중간 값으로부터 획득되는 방식은 어드레싱 모드에 따라 다르다. 어드레싱 모드를 변경하는 분기 명령어의 경우, 새로운 어드레싱 모드가 사용된다. 24-비트 어드레싱 모드에서, 중간 값의 비트 0-39는 무시되고, 분기 주소의 비트 0-39는 0으로 되며, 중간 값의 비트 40-63은 분기 주소의 비트 40-63으로 된다. 31-비트 어드레싱 모드에서, 중간 값의 비트 0-32는 무시되고, 분기 주소의 비트 0-32는 0으로 되며, 중간 값의 비트 33-63은 분기 주소의 비트 33-63으로 된다. 64-비트 어드레싱 모드에서, 중간 값의 비트 0-63은 분기 주소의 비트 0-63으로 된다.
몇개의 분기 명령어의 경우, 분기는 지정된 조건을 만족하느냐에 달려 있다. 조건이 만족되지 않을 때, 분기가 실행되지 않고, 보통의 순차적 명령어 실행이 계속되며, 분기 주소가 사용되지 않는다. 분기가 실행될 때, 분기 주소의 비트 0-63은 현재 PSW의 비트 64-127을 대체한다. 분기 동작의 일부로서 저장소에 액세스하기 위해 분기 주소가 사용되지 않는다. 홀수 분기 주소로 인한 지정 예외(specification exception) 및 분기 장소(branch location)에 있는 명령어를 페치하는 것으로 인한 액세스 예외(access exception)가 분기 동작의 일부로서 인식되지 않고 그 대신에 분기 장소에 있는 명령어의 실행과 연관된 예외로서 인식된다.
BRANCH AND SAVE 등의 분기 명령어는 분기 주소 계산을 위해서도 피연산자의 장소로서도 동일한 범용 레지스터를 지정할 수 있다. 나머지 연산이 수행되기 전에 분기 주소 계산이 완료된다.
제4장 "제어"에서 기술되는 PSW(program-status word)는 적절한 프로그램 실행에 필요한 정보를 포함한다. PSW는 명령어 시퀀싱(instruction sequencing)을 제어하고 현재 실행 중인 프로그램과 관련하여 CPU의 상태를 보유 및 표시하는 데 사용된다. 능동적 또는 제어측 PSW(active or controlling PSW)를 현재 PSW라고 한다. 분기 명령어는 의사 결정, 루프 제어 및 서브루틴 연결(subroutine linkage)의 기능을 수행한다. 분기 명령어는 현재 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 연산의 결과를 반영하는 조건 코드를 검사한다. 2 비트로 이루어져 있는 조건 코드는 다음과 같은 4가지 가능한 조건-코드 설정을 제공한다: 0, 1, 2 및 3.
임의의 설정의 구체적인 의미는 조건 코드를 설정하는 연산에 따라 다르다. 예를 들어, 조건 코드는 영(zero), 영이 아님(nonzero), 제1 피연산자 상위(first operand high), 같음(equal), 오버플로우 및 서브채널 사용중(subchannel 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에도 적용된다.) 이들 명령어 둘다는 새로운 명령어 주소의 도입 뿐만 아니라 복귀 주소(return address) 및 관련 정보의 유지도 가능하게 해준다. 복귀 주소는, 분기 명령어를 그의 대상으로서 가지는 EXECUTE 명령어 다음에 오는 명령어의 주소인 것을 제외하고는, 저장소에 있는 분기 명령어 다음에 오는 명령어의 주소이다.
BRANCH AND LINK 및 BRANCH AND SAVE 둘다는 R1 필드를 가진다. 이들은 명령어에 의존하는 필드에 의해 분기 주소를 형성한다. 명령어의 동작은 다음과 같이 요약된다:
Figure 112011039491462-pat00011
24-비트 어드레싱 모드에서, 이들 명령어 둘다는 복귀 주소를 범용 레지스터 R1의 비트 위치 40-63에 위치시키고 그 레지스터의 비트 0-31을 그대로 놔둔다. BRANCH AND LINK는 명령어에 대한 명령어-길이 코드 또한 현재 PSW로부터의 조건 코드 및 프로그램 마스크를 범용 레지스터 R1의 비트 위치 32-39에 위치시킨다. BRANCH AND SAVE는 그 비트 위치에 영을 위치시킨다.
Figure 112011039491462-pat00012
31-비트 어드레싱 모드에서, 이들 명령어 둘다는 복귀 주소를 범용 레지스터 R1의 비트 위치 33-63에 위치시키고 비트 위치 32에 1을 위치시키며 그 레지스터의 비트 0-31을 그대로 놔둔다.
Figure 112011039491462-pat00013
64-비트 어드레싱 모드에서, 이들 명령어 둘다는 복귀 주소를 범용 레지스터 R1의 비트 위치 0-63에 위치시킨다.
Figure 112011039491462-pat00014
임의의 어드레싱 모드에서, 이들 명령어 둘다는 현재 어드레싱 모드의 제어 하에서 분기 주소를 발생한다. 이들 명령어는 분기 주소의 비트 0-63을 PSW의 비트 위치 64-127에 위치시킨다. RR 형식에서, 명령어의 R2 필드가 0인 경우, 이들 명령어 둘다는 분기를 수행하지 않는다.
24-비트 또는 31-비트 어드레싱 모드에서, BRANCH AND SAVE가 PSW의 비트 32인 기본 어드레싱-모드 비트(basic addressing-mode bit)를 범용 레지스터 R1의 비트 위치 32에 위치시킨다는 것을 알 수 있다. 31-비트 어드레싱 모드에서 BRANCH AND LINK도 그렇게 한다. 명령어 BRANCH AND SAVE AND SET MODE 및 BRANCH AND SET MODE는, 연결 동안에 어드레싱 모드의 변경이 필요할 때, 사용하기 위한 것이다. 이들 명령어는 R1 및 R2 필드를 가진다. 명령어의 동작은 다음과 같이 요약된다:
Figure 112011039491462-pat00015
BRANCH AND SAVE AND SET MODE는 범용 레지스터 R1의 내용을 BRANCH AND SAVE와 동일하게 설정한다. 그에 부가하여, 이 명령어는 PSW의 비트 31인 확장-어드레싱 모드 비트를 그 레지스터의 비트 위치 63에 위치시킨다.
Figure 112011039491462-pat00016
BRANCH AND SET MODE는, R1이 영이 아닌 경우, 다음과 같이 수행된다. 24-비트 또는 31-비트 모드에서, 이 명령어는 PSW의 비트 32를 범용 레지스터 R1의 비트 위치 32에 위치시키고, 그 레지스터의 비트 0-31 및 33-63을 그대로 놔둔다. 유의할 점은, 그 레지스터가 명령어 주소를 포함하는 경우, 그 레지스터의 비트 63이 0이어야 한다는 것이다. 64-비트 모드에서, 이 명령어는 PSW의 비트 32(1)를 범용 레지스터 R1의 비트 위치 63에 위치시키고, 그 레지스터의 비트 0-62를 그대로 놔둔다.
Figure 112011039491462-pat00017
R2가 영이 아닐 때, 이들 명령어 둘다는 어드레싱 모드를 설정하고 다음과 같이 분기를 수행한다. 범용 레지스터 R2의 비트 63은 PSW의 비트 위치 31에 위치된다. 비트 63이 0인 경우, 그 레지스터의 비트 32는 PSW의 비트 위치 32에 위치된다. 비트 63이 1인 경우, PSW 비트 32는 1로 설정된다. 이어서, 그 레지스터의 내용으로부터 분기 주소가 발생되며, 다만 새로운 어드레싱 모드의 제어 하에서 그 레지스터의 비트 63이 0으로서 취급된다. 이들 명령어는 분기 주소의 비트 0-63을 PSW의 비트 위치 64-127에 위치시킨다. 범용 레지스터 R2의 비트 63은 그대로 있고, 따라서 호출된 프로그램에 진입 시에 1일 수 있다. R2가 R1과 동일한 경우, 지정된 범용 레지스터 내의 결과는 R1 레지스터에 대해 지정된 바와 같다.
인터럽트(컨텍스트 전환):
인터럽트 메커니즘은 CPU가 구성 외부의, 구성 내부의, 또는 CPU 자체 내의 조건의 결과로서 그의 상태를 변경할 수 있게 해준다. 상위 우선순위의 조건에 대한 빠른 응답 및 조건의 유형의 즉각적인 인식을 가능하게 해주기 위해, 인터럽트 조건(interruption condition)이 6개의 부류, 즉 외부(external), 입/출력(input/output), 머신 검사(machine check), 프로그램(program), 재시작(restart) 및 수퍼바이저 호출(supervisor call)로 그룹화되어 있다.
인터럽트는 현재 PSW를 이전 PSW로서 저장하는 것, 인터럽트의 원인을 식별해주는 정보를 저장하는 것, 및 새로운 PSW를 페치하는 것이다. 새로운 PSW에 의해 지정된 대로 처리가 재개된다. 인터럽트 시에 저장되는 이전 PSW는 보통 인터럽트가 발생하지 않았다면 그 다음에 실행되었을 명령어의 주소를 포함하며, 따라서 중단된 프로그램의 재개를 가능하게 해준다. 프로그램 및 수퍼바이저-호출 인터럽트의 경우, 저장된 정보는 또한 마지막으로 실행된 명령어의 길이를 식별해주는 코드를 포함하며, 따라서 프로그램이 인터럽트의 원인에 반응할 수 있게 해준다. 보통의 반응이 인터럽트를 야기하는 명령어의 재실행인 어떤 프로그램 조건의 경우에, 명령어 주소는 마지막으로 실행된 명령어를 직접 식별해준다.
재시작을 제외하고는, 인터럽트는 CPU가 동작 상태에 있을 때에만 일어날 수 있다. 재시작 인터럽트는 CPU가 정지(stopped) 또는 동작 상태에 있는 경우에 일어날 수 있다.
어떤 액세스 예외라도 그 예외와 연관되어 있는 명령어의 실행의 일부로서 인식된다. CPU가 이용가능하지 않은 장소로부터 프리페치하려고 시도하거나 어떤 다른 액세스 예외 조건을 검출할 때 액세스 예외가 인식되지 않지만, 분기 명령어 또는 인터럽트는 명령어가 실행되지 않도록 명령어 시퀀스를 변경한다. 모든 명령어는 명령어 페치로 인해 액세스 예외가 인식되게 할 수 있다. 그에 부가하여, 저장소에 있는 피연산자에 대한 액세스로 인해 명령어 실행과 연관된 액세스 예외가 일어날 수 있다. 예외를 만나지 않고는 제1 명령어 하프워드가 페치될 수 없을 때 명령어를 페치하는 것으로 인한 액세스 예외가 표시된다. 명령어의 제1 하프워드가 액세스 예외를 갖지 않을 때, 명령어의 처음 2 비트에 의해 지정되는 명령어 길이에 따라 부가의 하프워드에 대해 액세스 예외가 표시될 수 있지만, 명령어의 제2 또는 제3 하프워드에 액세스하지 않고 동작이 수행될 수 있을 때, 미사용된 부분에 대해 액세스 예외가 표시되는지는 예측가능하지 않다. 명령어 페치에 대한 액세스 예외의 표시가 모든 명령어에 공통이기 때문에, 개별적인 명령어 정의에서 이에 대해 언급하지 않는다.
개별적인 명령어 설명에서 달리 언급하는 경우를 제외하고는, 피연산자 장소에 대한 액세스와 연관된 예외에 대해 이하의 규칙이 적용된다. 페치형 피연산자(fetch-type operand)의 경우, 연산을 완료하는 데 필요한 피연산자의 그 부분에 대해서만 액세스 예외가 표시되면 된다. 연산을 완료하는 데 필요하지 않은 페치형 피연산자의 그 부분에 대해 액세스 예외가 표시되는지가 예측가능하지 않다.
저장소형 피연산자(store-type operand)의 경우에, 피연산자의 액세스가능하지 않은 부분을 사용하지 않고 연산이 완료될 수 있더라도 피연산자 전체에 대해 액세스 예외가 인식된다. 저장소형 피연산자의 값이 예측가능하지 않은 것으로 정의되는 상황에서, 액세스 예외가 표시되는지가 예측가능하지 않다. 피연산자 장소에 대한 액세스로 인해 액세스 예외가 인식될 수 있을 때마다, 명령어의 설명에서 프로그램 예외의 리스트에 "액세스"라는 단어가 포함된다. 이 항목은 또한 어느 피연산자로 인해 예외가 인식될 수 있는지 및 그 피연산자 장소에 대한 페치 또는 저장 액세스 시에 예외가 인식되는지를 나타낸다. 각각의 특정 명령어에 대해 정의된 대로 피연산자의 일부분에 대해서만 액세스 예외가 인식된다.
CPU가 유효하지 않은 연산 코드를 가지는 명령어를 실행하려고 시도할 때 연산 예외(operation exception)가 인식된다. 연산 코드가 미할당될 수 있거나, 그 연산 코드를 가지는 명령어가 CPU에 설치되어 있지 않을 수 있다. 연산이 억제된다. 명령어-길이 코드는 1, 2 또는 3이다. 연산 예외는 0001 hex(또는 동시적인 PER 이벤트가 표시되는 경우 0081 hex)의 프로그램 인터럽트 코드(program interruption code)로 표시된다.
일부 모델은 본 명세서에 기술되지 않은 명령어(보조를 위해 또는 특수 또는 커스텀 기능의 일부로서 제공되는 것 등)를 제공할 수 있다. 결과적으로, 연산 코드가 본 명세서에 기술되어 있지 않다는 것으로 인해 꼭 연산 예외가 인식되는 것은 아니다. 게다가, 이들 명령어는 연산 모드(mode of operation)가 설정되게 할 수 있거나, 차후의 명령어의 실행에 영향을 주기 위해 다른 방식으로 머신을 변경할 수 있다. 이러한 연산을 야기하는 것을 피하기 위해, 본 명세서에 기술되지 않은 연산 코드를 가지는 명령어는 연산 코드와 연관된 특정의 기능이 요망될 때에만 실행되어야 한다.
다음과 같은 것들 중 임의의 것이 참일 때, 지정 예외가 인식된다.
1. PSW의 미할당된 비트 위치(즉, 비트 위치 0, 2-4, 24-30 또는 33-63 중 임의의 비트 위치)에 1이 도입된다. 이것은 조기 PSW 지정 예외(early PSW specification exception)로서 취급된다.
2. PSW의 비트 위치 12에 1이 도입된다. 이것은 조기 PSW 지정 예외로서 취급된다.
3. 이하의 방식들 중 임의의 방식으로 PSW가 유효하지 않다: a. PSW의 비트 31이 1이고, 비트 32가 0이다. b. PSW의 비트 31 및 32가 0이고(24-비트 어드레싱 모드를 나타냄), PSW의 비트 64-103이 모두 0은 아니다. c. PSW의 비트 31이 0이고 비트 32가 1이며(31-비트 어드레싱 모드를 나타냄), PSW의 비트 64-96이 모두 0은 아니다. 이것은 조기 PSW 지정 예외로서 취급된다.
4. PSW는 홀수 명령어 주소를 포함한다.
5. 피연산자 주소가 인테그럴 경계 지정을 필요로 하는 명령어에서 이러한 인테그럴 경계를 지정하지 않는다.
6. 홀수 범용 레지스터(odd-numbered general register)가 짝수 레지스터 지정(even-numbered register designation)을 필요로 하는 명령어의 R 필드에 의해 지정된다.
7. 확장 피연산자(extended operand)에 대해 0, 1, 4, 5, 8, 9, 12, 또는 13 이외의 부동 소수점 레지스터가 지정된다.
8. 10진 산술(decimal arithmetic)에서의 승수(multiplier) 또는 제수(divisor)가 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에 있는 펑션 코드(function code)가 미할당된 또는 미설치된 펑션 코드를 포함한다.
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 피연산자 길이가 지정된 펑션의 데이터 블록 크기의 배수가 아니다. 이 지정 예외 조건이 쿼리 펑션(query function)에는 적용되지 않는다.
13. COMPARE AND FORM CODEWORD의 실행이 시도되고, 범용 레지스터 1, 2 및 3이 처음에 짝수 값을 포함하지 않는다.
32. COMPARE AND SWAP AND STORE의 실행이 시도되고, 다음과 같은 조건들 중 임의의 조건이 존재한다:
Figure 112013011840462-pat00018
펑션 코드가 미할당된 값을 지정한다.
Figure 112011039491462-pat00019
저장 특성이 미할당된 값을 지정한다.
Figure 112013011840462-pat00020
펑션 코드가 0이고, 제1 피연산자가 워드 경계(word boundary) 상에 지정되어 있지 않다.
Figure 112013011840462-pat00021
펑션 코드가 1이고, 제1 피연산자가 더블워드 경계(doubleword boundary) 상에 지정되어 있지 않다.
Figure 112013011840462-pat00022
제2 피연산자가 저장 값(store value)의 크기에 대응하는 인테그럴 경계 상에 지정되어 있지 않다.
33. COMPARE LOGICAL LONG UNICODE 또는 MOVE LONG UNICODE의 실행이 시도되고, 범용 레지스터 R1 + 1 또는 R3 + 1의 내용이 짝수의 바이트를 지정하지 않는다.
34. COMPARE LOGICAL STRING, MOVE STRING 또는 SEARCH STRING의 실행이 시도되고, 범용 레지스터 0의 비트 32-55가 모두 0은 아니다.
35. COMPRESSION CALL의 실행이 시도되고, 범용 레지스터 0의 비트 48-51이 이진 값 0000 및 0110-1111 중 임의의 것을 가진다.
36. COMPUTE INTERMEDIATE MESSAGE DIGEST, COMPUTE LAST MESSAGE DIGEST, 또는 COMPUTE MESSAGE AUTHENTICATION CODE의 실행이 시도되고, 다음과 같은 것들 중 어느 하나가 참이다:
Figure 112011039491462-pat00023
R2 필드가 홀수 레지스터 또는 범용 레지스터 0을 지정한다.
Figure 112011039491462-pat00024
범용 레지스터 0의 비트 56이 0이 아니다.
37. CONVERT HFP TO BFP, CONVERT TO FIXED (BFP 또는 HFP), 또는 LOAD FP INTEGER (BFP)의 실행이 시도되고, M3 필드가 유효한 수정자(valid modifier)를 지정하지 않는다.
38. DIVIDE TO INTEGER의 실행이 시도되고, M4 필드가 유효한 수정자를 지정하지 않는다.
39. EXECUTE의 실행이 시도되고, 대상 주소가 홀수이다.
40. EXTRACT STACKED STATE의 실행이 시도되고, 범용 레지스터 R2의 비트 위치 56-63에 있는 코드는 ASN-및-LX-재사용(ASN-and-LX-reuse) 기능이 설치되어 있지 않을 때 4보다 크거나, 기능이 설치되어 있을 때 5보다 크다.
41. FIND LEFTMOST ONE의 실행이 시도되고, R1 필드는 홀수 레지스터를 지정한다.
42. INVALIDATE DAT TABLE ENTRY의 실행이 시도되고, 범용 레지스터 R2의 비트 44-51이 모두 0은 아니다.
43. LOAD FPC의 실행이 시도되고, FPC 레지스터에서 지원되지 않는 비트에 대응하는 제2 피연산자의 하나 이상의 비트가 1이다.
44. LOAD PAGE-TABLE-ENTRY ADDRESS의 실행이 시도되고, 명령어의 M4 필드는 이진 0000-0100 이외의 임의의 값을 포함한다.
45. LOAD PSW의 실행이 시도되고, 제2 피연산자 주소에 있는 더블워드의 비트 12가 0이다. 이 예외가 인식되는지 여부는 모델 의존적이다.
46. MONITOR CALL의 실행이 시도되고, 명령어의 비트 위치 8-11이 0을 포함하지 않는다.
47. MOVE PAGE의 실행이 시도되고, 범용 레지스터 0의 비트 위치 48-51이 0을 포함하지 않거나, 레지스터의 비트 52 및 53이 둘다 1이다.
48. PACK ASCII의 실행이 시도되고, L2 필드는 31보다 크다.
49. PACK UNICODE의 실행이 시도되고, L2 필드가 63보다 크거나 짝수이다.
50. PERFORM FLOATING POINT OPERATION의 실행이 시도되고, 범용 레지스터 0의 비트 32가 0이며, 비트 33-63에 있는 하나 이상의 필드가 유효하지 않거나 미설치된 펑션을 지정한다.
51. PERFORM LOCKED OPERATION의 실행이 시도되고, 다음과 같은 것들 중 임의의 것이 참이다:
Figure 112013011840462-pat00025
범용 레지스터 0의 비트 55인 T 비트가 0이고, 레지스터의 비트 56-63에 있는 펑션 코드가 유효하지 않다.
Figure 112011039491462-pat00026
범용 레지스터 0의 비트 32-54가 모두 0은 아니다.
Figure 112013011840462-pat00027
액세스-레지스터 모드에서, ALET를 포함하는 파라미터 리스트를 사용하게 하는 펑션 코드에 대해, R3 필드가 0이다.
52. PERFORM TIMING FACILITY FUNCTION의 실행이 시도되고, 다음과 같은 것들 중 어느 하나가 참이다:
Figure 112011039491462-pat00028
범용 레지스터 0의 비트 56이 0이 아니다.
Figure 112013011840462-pat00029
범용 레지스터 0의 비트 57-63이 미할당된 또는 미설치된 펑션 코드를 지정한다.
53. PROGRAM TRANSFER 또는 PROGRAM TRANSFER WITH INSTANCE의 실행이 시도되고, 다음과 같은 것들 모두가 참이다:
Figure 112011039491462-pat00030
PSW에서의 확장-어드레싱 모드 비트가 0이다.
Figure 112011039491462-pat00031
명령어의 R2 필드에 의해 지정되는 범용 레지스터에서의 비트 32인 기본 어드레싱-모드 비트가 0이다.
Figure 112011039491462-pat00032
동일한 레지스터에서의 명령어 주소의 비트 33-39가 모두 0은 아니다.
54. RESUME PROGRAM의 실행이 시도되고, 다음과 같은 것들 중 어느 하나가 참이다:
Figure 112011039491462-pat00033
제2 피연산자에서의 PSW 필드의 비트 31, 32 및 64-127이 현재 PSW에서의 배치에 유효하지 않다. 다음과 같은 것들 중 임의의 것이 참일 때, 예외가 인식된다.
- 비트 31 및 32 둘다가 0이고, 비트 64-103이 모두 0은 아니다.
- 비트 31 및 32이 각각 0과 1이고, 비트 64-96이 모두 0은 아니다.
- 비트 31 및 32가 각각 1과 0이다.
- 비트 127이 1이다.
Figure 112011039491462-pat00034
파라미터 리스트의 비트 0-12가 모두 0은 아니다.
55. SEARCH STRING UNICODE의 실행되고, 범용 레지스터 0의 비트 32-47이 모두 0은 아니다.
56. SET ADDRESS SPACE CONTROL 또는 SET ADDRESS SPACE CONTROL FAST의 실행이 시도되고, 제2 피연산자 주소의 비트 52 및 53이 둘다 0은 아니다.
57. SET ADDRESSING MODE (SAM24)의 실행이 시도되고, PSW에서의 미업데이트된 명령어 주소의 비트 0-39, PSW의 비트 64-103이 모두 0은 아니다.
58. SET ADDRESSING MODE (SAM31)의 실행이 시도되고, PSW에서의 미업데이트된 명령어 주소의 비트 0-32, PSW의 비트 64-96이 모두 0은 아니다.
59. SET CLOCK PROGRAMMABLE FIELD의 실행이 시도되고, 범용 레지스터 0의 비트 32-47이 모두 0은 아니다.
60. SET FPC의 실행이 시도되고, FPC 레지스터에서 지원되지 않는 비트에 대응하는 제1 피연산자의 하나 이상의 비트가 1이다.
61. STORE SYSTEM INFORMATION의 실행이 시도되고, 범용 레지스터 0에서의 펑션 코드가 유효하며, 다음과 같은 것들 중 어느 하나가 참이다:
Figure 112013011840462-pat00035
범용 레지스터 0의 비트 36-55 및 범용 레지스터 1의 비트 32-47이 모두 0은 아니다.
Figure 112011039491462-pat00036
제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의 초기 내용이 24-비트 또는 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이다. 예외가 SET ADDRESSING MODE (SAM24, SAM31)에 의해 도입될 때, ILC는 1이거나, SET ADDRESSING MODE가 EXECUTE의 대상인 경우, ILC가 2이다. 예외가 SET SYSTEM MASK에 의해 또는 STORE THEN OR SYSTEM MASK에 의해 도입될 때, ILC는 2이다.
프로그램의 실행 동안에 일어나는 예외 및 이벤트를 보고하는 데 프로그램 인터럽트가 사용된다. 프로그램 인터럽트는 이전 PSW가 실제 장소 336-351에 저장되게 하고 새로운 PSW가 실제 장소 464-479로부터 페치되게 한다. 인터럽트의 원인은 인터럽트 코드(interruption code)에 의해 식별된다. 인터럽트 코드는 실제 장소 142-143에 위치되고, 명령어-길이 코드는 실제 장소 141에 있는 바이트의 비트 위치 5 및 6에 위치되며, 나머지 비트는 0으로 설정되며, 0은 실제 장소 140에 저장된다. 몇몇 이유로 인해, 인터럽트의 원인을 식별해주는 추가 정보가 실제 장소 144-183에 저장된다. PER-3 기능이 설치되어 있는 경우, 프로그램 인터럽트 동작의 일부로서, BEAR(breaking-event-address register)의 내용이 실제 저장 장소 272-279에 위치된다. PER 이벤트 및 암호-연산 예외(crypto-operation exception)를 제외하고는, 인터럽트를 야기하는 조건이 인터럽트 코드의 가장 오른쪽 7개 비트 위치에 위치된 코드 값(coded value)으로 표시된다. 한번에 단지 하나의 조건이 표시될 수 있다. 인터럽트 코드의 비트 0-7은 0으로 설정되어 있다. PER 이벤트는 인터럽트 코드의 비트 8을 1로 설정함으로써 표시된다. 이것이 유일한 조건일 때, 비트 0-7 및 9-15도 역시 0으로 설정된다. PER 이벤트가 다른 프로그램 인터럽트 조건과 동시에 표시될 때, 비트 8은 1이고, 비트 0-7 및 9-15는 다른 조건에 대한 것으로서 설정된다. 암호-연산 예외는 0119 hex 또는, PER 이벤트도 표시되는 경우, 0199 hex의 인터럽트 코드로 표시된다.
대응하는 마스크 비트가 있는 경우, 그 마스크 비트가 1일 때에만 프로그램 인터럽트가 발생할 수 있다. PSW 내의 프로그램 마스크는 예외들 중 4개를 제어하고, FPC 레지스터 내의 IEEE 마스크는 IEEE 예외를 제어하며, 제어 레지스터 0 내의 비트 33은 SET SYSTEM MASK가 특수-연산 예외(special-operation exception)를 야기하는지를 제어하고, 제어 레지스터 8 내의 비트 48-63은 모니터 이벤트로 인한 인터럽트를 제어하며, 마스크의 계층구조는 PER 이벤트로 인한 인터럽트를 제어한다. 임의의 제어 마스크 비트가 0일 때, 조건이 무시되고, 조건이 보류 중인 채로 있지 않다.
프로그램 인터럽트에 대한 새로운 PSW가 PSW-형식 오류를 가지거나 명령어 페치 도중에 예외가 인식되게 할 때, 일련의 프로그램 인터럽트가 발생할 수 있다.
프로그램 예외로서 표시된 조건들 중 일부가 채널 서브시스템에 의해서도 인식될 수 있으며, 이 경우에 예외는 서브채널-상태 워드(subchannel-status word) 또는 확장-상태 워드(extended-status word)에 표시된다.
데이터 예외(data exception)가 프로그램 인터럽트를 야기할 때, 데이터-예외 코드(data-exception code)(DXC)가 장소 147에 저장되고, 0이 장소 144-146에 저장된다. DXC는 다양한 유형의 데이터-예외 조건들을 구분한다. 제어 레지스터 0의 비트 45인 AFP-레지스터(부가의 부동 소수점 레지스터) 제어 비트가 1일 때, DXC도 역시 부동 소수점 제어(floating-point-control, FPC) 레지스터의 DXC 필드에 위치된다. 임의의 다른 프로그램 예외가 보고될 때, FPC 레지스터 내의 DXC 필드는 그대로 있다. DXC는 데이터 예외의 특정 원인을 나타내는 8-비트 코드이다.
DXC 2 및 3은 상호 배타적(mutually exclusive)이며, 임의의 다른 DXC보다 높은 우선순위를 가진다. 따라서, 예를 들어, DXC 2(BFP 명령어)는 임의의 IEEE 예외보다 우선권을 가지며, DXC 3(DFP 명령어)은 임의의 IEEE 예외 또는 시뮬레이트된 IEEE 예외보다 우선권을 가진다. 다른 일례로서, DXC 3(DFP 명령어) 및 DXC 1(AFP 레지스터) 둘다에 대한 조건이 존재하는 경우, DXC 3가 보고된다. 지정 예외 및 AFP 레지스터 데이터 예외 둘다가 적용될 때, 어느 것이 보고되는지는 예측가능하지 않다.
CPU가 구성에서 이용가능하지 않은 주 저장소 장소(main-storage location)를 참조하려고 시도할 때, 어드레싱 예외(addressing exception)가 인식된다. 주 저장소 장소가 설치되어 있지 않을 때, 저장 장치가 구성에 있지 않을 때, 또는 저장 장치의 전원이 꺼져 있을 때, 주 저장소 장소가 구성에서 이용가능하지 않다. 구성에서 이용가능하지 않은 저장 장소를 지정하는 주소는 유효하지 않은 주소라고 한다. 명령어의 주소가 유효하지 않을 때 연산이 억제된다. 이와 유사하게, EXECUTE의 대상 명령어의 주소가 유효하지 않을 때도 연산이 억제된다. 또한, 테이블 또는 테이블 항목에 액세스하는 데 어드레싱 예외를 만날 때 연산 단위(unit of operation)가 억제된다. 이 규칙이 적용되는 테이블 및 테이블 항목은 디스패치가능 단위 제어 테이블(dispatchable-unit-control table), 1차 ASN 제2 테이블 항목(primary ASN second- table entry), 및 액세스 리스트, 영역 제1 테이블, 영역 제2 테이블, 영역 제3 테이블, 세그먼트 테이블, 페이지 테이블, 연결 테이블(linkage table), 연결 제1 테이블, 연결 제2 테이블, 항목 테이블(entry table), ASN 제1 테이블, ASN 제2 테이블, 권한 테이블(authority table), 연결 스택(linkage stack) 및 추적 테이블(trace table) 내의 항목이다. 동적 주소 변환에 대한 암시적 참조 및 LOAD PAGE-TABLE-ENTRY ADDRESS, LOAD REAL ADDRESS, STORE REAL ADDRESS, 및 TEST PROTECTION의 실행과 연관된 참조 둘다에서, 영역 제1 테이블, 영역 제2 테이블, 영역 제3 테이블, 세그먼트 테이블, 및 페이지 테이블에 대한 참조에 대해 어드레싱 예외를 만날 때 어드레싱 예외로 인해 억제가 일어난다. 이와 유사하게, 암시적으로 또는 LOAD PAGE-TABLE-ENTRY ADDRESS, LOAD REAL ADDRESS, STORE REAL ADDRESS, TEST ACCESS, 또는 TEST PROTECTION의 일부로서 행해진 액세스-레지스터 변환에서 어드레싱 예외를 만날 때, 디스패치가능-단위 제어 테이블, 1차 ASN 제2 테이블 항목, 액세스 리스트, ASN 제2 테이블 또는 권한 테이블에의 액세스에 대한 어드레싱 예외로 인해 억제가 일어난다. 실행이 억제되는 일부 특정의 명령어를 제외하고는, 변환될 수 있지만 이용가능하지 않은 장소를 지정하는 피연산자 주소에 대해 연산이 종료된다. 종료를 위해, 결과 필드(result field)에 대해서만 변경이 행해질 수 있다. 이와 관련하여, "결과 필드"라는 용어는 제공되고 명령어에 의해 변경되도록 지정되어 있는 조건 코드, 레지스터, 및 임의의 저장 장소를 포함한다.
이상의 내용은 한 컴퓨터 시스템 실시예의 용어 및 구조를 이해하는 데 유용하다. 실시예가 z/Architecture 또는 그에 대해 제공된 설명으로 제한되지 않는다. 실시예는 유익하게도 본 명세서에서의 개시 내용을 사용하여 다른 컴퓨터 제조업체의 다른 컴퓨터 아키텍처에 적용될 수 있다.
다른 프로세서 아키텍처는 구조적 명령어 세트의 명령어에 의해 명시적으로(및/또는 암시적으로) 식별되는 제한된 수의 범용 레지스터(general register)(GR)[때때로 범용 레지스터(general purpose register)라고 함]를 제공한다. IBM z/Architecture 및 그의 이전 아키텍처(1964년경의 최초의 System 360으로 거슬러 올라감)는 각각의 CPU(central processing unit)마다 16개의 범용 레지스터(GR)를 제공한다. GR은 프로세서[CPU(central processing unit)] 명령어에 의해 다음과 같이 사용될 수 있다:
Figure 112011039491462-pat00037
산술 또는 논리 연산의 소스 피연산자로서
Figure 112011039491462-pat00038
산술 또는 논리 연산의 대상 피연산자로서
Figure 112011039491462-pat00039
메모리 피연산자의 주소로서(베이스 레지스터, 인덱스 레지스터, 또는 직접)
Figure 112011039491462-pat00040
메모리 피연산자의 길이로서
Figure 112013011840462-pat00041
명령어로/로부터 펑션 코드 또는 기타 정보를 제공하는 등의 기타 용도.
2000년에 IBM z/Architecture 메인 프레임이 도입될 때까지, 메인 프레임 범용 레지스터는 32 비트로 이루어져 있었으며, z/Architecture의 도입으로, 범용 레지스터는 64 비트로 이루어졌지만, 호환성 이유로, 많은 z/Architecture 명령어는 계속하여 32 비트를 지원한다.
이와 유사하게, 예를 들어, Intel®의 x86 등의 다른 아키텍처는, 예를 들어, 32 비트 레지스터를 가지는 현재 머신이 명령어가 32 비트 GR의 처음 8 비트 또는 16 비트에만 액세스하는 모드를 제공하도록, 호환성 모드를 제공한다.
초기 IBM® System 360 환경에서도, (예를 들어, 명령어 내의 4 비트 레지스터 필드에 의해 식별되는) 16개의 레지스터가 어셈블러 프로그래머 및 컴파일 디자이너에게는 너무 위압적인 것이었다. 보통 크기의 프로그램은 코드 및 데이터를 어드레싱하는 데 몇개의 베이스 레지스터를 필요로 할 수 있으며, 활성 변수를 보유하기 위해 이용가능한 레지스터의 수를 제한한다. 제한된 수의 레지스터를 어드레싱하는 데 특정 기법이 사용되어 왔다:
Figure 112011039491462-pat00042
프로그램 설계(모듈화 프로그래밍만큼 간단함)가 베이스 레지스터 과잉 사용을 최소화하는 데 도움을 주었다.
Figure 112011039491462-pat00043
컴파일러가 레지스터의 동적 재할당(dynamic reassignment)을 관리하는 데 레지스터 "컬러링"(register "coloring")과 같은 기법을 사용하였다.
Figure 112011039491462-pat00044
다음과 같은 것들에 의해 베이스 레지스터 사용이 감소될 수 있다:
Figure 112011039491462-pat00045
(명령어 내에) 직접 상수(immediate constant)를 갖는 새로운 산술 및 논리 명령어.
Figure 112011039491462-pat00046
상대-직접 피연산자 주소(relative-immediate operand address)를 가지는 새로운 명령어
Figure 112011039491462-pat00047
장변위(long displacement)를 가지는 새로운 명령어.
그렇지만, CPU 내의 레지스터의 수에 의해 대처될 수 있는 것보다 더 많은 유효 변수(live variable) 및 어드레싱 범위(addressing scope)가 있을 때 일정한 레지스터 압박이 있다.
z/Architecture는 다음과 같은 프로그램-선택가능 어드레싱 모드를 제공한다: 24-비트, 31-비트 및 64-비트 어드레싱. 그렇지만, 64-비트 값을 필요로 하지도 않고 64-비트 메모리 어드레싱도 이용하지 않는 프로그램의 경우, 64-비트 GR을 갖는 것은 제한된 이점을 가진다. 이하의 개시 내용은 64-비트 어드레싱 또는 변수를 일반적으로 사용하지 않는 프로그램에 대해 64-비트 레지스터를 이용하는 기법에 대해 기술한다.
본 개시 내용 내에서, 레지스터의 비트 위치가 좌측에서 우측으로 오름차순으로(빅 엔디안) 번호가 매겨진다는 규약이 사용된다. 64-비트 레지스터에서, 비트 0(가장 왼쪽 비트)는 최상위 값(most significant value)(263)을 나타내고, 비트 63(가장 오른쪽 비트)은 최하위 값(least significant value)(20)을 나타낸다. 이러한 레지스터의 가장 왼쪽 32 비트(비트 0-31)는 상위 워드(high word)라고 하고, 레지스터의 가장 오른쪽 32 비트(비트 32-63)는 하위 워드(low word)라고 한다(단, 워드가 32 비트임).
상위-워드 기능:
CPU가 32 비트 모드에 있을 때 64-비트 범용 레지스터의 상위 워드(최상위 32 비트)를 이용하기 위해 새로운 계열의 일반 명령어(즉, 응용 프로그램에서 이용가능한 명령어)가 도입된다. 프로그램은, 계속하여 하위 워드로 제한되어 있는 이전 명령어에 부가하여, GPR의 숨겨진(이전에 이용가능하지 않았던) 상위 워드에 액세스하기 위해 새로운 명령어를 이용할 수 있다.
도 8을 참조하면, 16 또는 32 비트 레지스터를 갖는 아키텍처에 맞게 작성된 프로그램이 64 비트 레지스터를 지원하는 아키텍처의 새 버전 상에서 실행될 수 있다. 예를 들어, 32 비트 모드용으로 작성된 프로그램은 32 비트 레지스터, 및 통상적으로 32개 또는 그 이하의 논리 주소 비트만을 인식한다. 64 비트 아키텍처의 컴퓨터 시스템에서의 운영 체제(OS)(801)는 64 비트 모드용으로 작성된 프로그램(803)은 물론 32 비트 모드용으로 작성된 프로그램(802)도 지원할 수 있다. 이러한 머신에서의 컨텍스트 전환 동작(804)은, 응용 프로그램(802, 803)이 32 비트 모드에 있는지 64 비트 모드에 있는지에 상관없이 프로그램 및/또는 운영 체제 간에 전환할 때, 64 비트 레지스터는 물론 PSW(Program Status Word)도 저장할 것이다(805). 따라서, 64 비트 운영 체제의 제어 하에서 64 비트 머신 상에서 32 비트 모드로 실행 중인 32 비트 프로그램은 특정 컨텍스트 전환 동안 그의 레지스터를 저장하고 복원할 것이다. 컨텍스트 전환을 겪는 프로그램이 32 비트 모드에서 실행 중에 있더라도, 컴퓨터 시스템 및 운영 체제는 실제로 컨텍스트 전환 동안에 범용 레지스터의 64 비트 전부를 저장하고 복원할 수 있다. 따라서, 프로그램은 레지스터의 절반만, 즉 각각의 레지스터의 64 비트 중 32 비트만을 본다. 구현된 레지스터의 나머지 32 비트는 32 비트 프로그램에 대해 "숨겨져" 있다. 기지의 레지스터의 32 비트는 어드레싱을 위해 사용될 수 있고, 컴퓨터 시스템이 64 비트의 어드레싱을 지원하고 있더라도, OS는 32 비트 모드에서 32 비트 프로그램에 의해 32 비트의 주소만이 조작되도록 동적 주소 변환을 통해 관리할 수 있다. 32 비트 모드는 하위 워드 모드로 생각될 수 있는데, 그 이유는 프로그램이 더블워드(64 비트) 레지스터의 하위 워드(32 비트 워드)만을 이용하기 때문이다. 응용 프로그램은 OS의 제어 하에서 동작하며, OS가 특정 펑션을 수행하게 하기 위해 OS를 호출한다. 이 "호출"은 응용 프로그램의 상태를 저장하고 수행될 OS의 상태를 로드하는(804) 컨텍스트 전환(804)에 의해 수행되며, 여기서 OS는 컨텍스트 전환에 의해 제공된 주소에서 실행을 시작한다. 이어서, OS는 응용 프로그램이 실행될 수 있게 해주기 위해 컨텍스트 전환(804)에 의해 응용 프로그램들 중 하나를 호출할 수 있다. 일부 응용 프로그램에서, 각각의 응용 프로그램에게 동작 타임 슬라이스(time-slice of operation)를 허용함으로써 리소스의 사용이 지원되고, 컨텍스트 전환(804)은 OS가 다른 타임 슬라이스 동안 다른 응용 프로그램을 디스패치하기 위해 일정 시간의 경과 후에 활성 프로그램을 "인터럽트"하는 데 사용된다.
상위-워드 기능의 이용가능성은 머신에서 상위-워드 기능을 활성화시키도록 설정되어야만 하는 비트 또는 필드에 의해 제어될 수 있다. 상위 워드 기능이 활성화되어 있을 때, 32 비트 프로그램은 새로운 "상위-워드 기능" 명령어를 실행함으로써 레지스터의 "숨겨진" 부분을 이용할 수 있다. 하위 워드 레지스터를 사용하여 명령어에게 새로운 펑션을 제공하는 다른 새로운 "상위-워드 기능" 명령어가 제공될 수 있다.
이들 명령어 대부분에서, 레지스터의 상위 워드만이 조작된다. 특정 명령어에서, 한 소스 레지스터의 상위 워드를 다른 소스 레지스터의 하위 워드로 조작하기 위해 변형이 제공되며, 그 결과가 대상 레지스터(예를 들어, AHHLR)의 상위 워드에 위치된다. RISBLG는 상위-워드 RISBHG 명령어와 유사한 하위 워드 명령어를 제공한다. RISBHG 및 RISBLG는 (어셈블러 프로그램의 도움으로) 다수의 의사 명령어를 구현하는 데 많은 유연성을 제공한다.
앞서 언급한 바와 같이, 프로세서 아키텍처는 그 아키텍처의 명령어 세트에 의해 이용가능한 범용 레지스터(GPR)를 이용한다. 데이터를 저속의 주 저장소(종종 복잡한 동적 주소 변환 메커니즘에 의해 구현됨)에 가지는 것보다 빠른 성능을 위해, 프로그램은 칩 상의 임베디드 래치(embedded latch) 등의 고속 메모리에 구현될 수 있는 GPR에 있는 데이터를 이용할 수 있다. 64개의 GPR을 가지는 x86 등의 일부 아키텍처에서, 각각의 GPR의 크기가 8 비트에서 16비트, 32 비트, 그리고 현재 64 비트로 엄청나게 증가되었다. 그렇지만, 예를 들어, 8 비트 GPR을 가지는 이전 명령어용으로 작성된 프로그램이, 예를 들어, 32 비트 GPR을 가지는 새로운 아키텍처에서 여전히 실행되도록, 명령어에 의해 이용가능한 GPR의 수[명령어 내의 GPR 필드의 비트 수(x86의 경우 6)에 의해 결정됨(x86의 경우 64)]가 동일하게 유지된다. 따라서, 8 비트 모드로 동작하는 32 비트 GPR을 가지는 머신은 각각의 32 비트 GPR의 하위 8 비트에 대한 액세스만을 제공할 것이다. 그렇지만, 컨텍스트 전환 동안에, 32 비트 운영 체제(OS)는 각각의 GPR의 32 비트 전체를 항상 저장하고 복원할 것이다.
IBM z/Architecture 구현에서, 머신은 16개의 GPR[각각의 GPR은 64 비트(비트 0-63)로 이루어져 있음]을 가질 수 있지만, 32 비트 모드에서 32 비트 레지스터용으로 작성된 응용 프로그램을 실행할 수 있다. 32 비트는 GPR의 하위 32 비트(비트 32-63)일 수 있으며, 여기서 상위 32 비트(비트 0-31)는 32 비트 동작 모드에서 이용가능하지 않다(숨겨져 있다). 응용 프로그램은 GPR의 상위 32 비트를 이용할 방법이 없는데, 그 이유는 상위 32 비트가 응용 프로그램에 보이지 않기 때문이다. 한 일례에서, 응용 프로그램이 단지 32 비트 레지스터를 가지고 24 또는 32 비트의 논리 주소를 메모리에 어드레싱하는 머신의 이전 세대의 32 비트 머신용으로 작성되었을지도 모른다. 32 비트 모드는, 64 비트의 GPR을 지원하는 아키텍처를 가지고 64 비트 운영 체제(OS)를 가지며 64 비트 응용 프로그램을 64 비트 모드에서 지원하는 새로운 머신에서, 예시적인 32 비트 응용 프로그램이 실행될 수 있게 해준다. 32 비트 GPR에 대해 정의된 다른 머신 아키텍처에서, 응용 프로그램에게 보이지 않는 일련의 32 비트 "숨겨진 GPR"이 제공될 수 있다.
명령어들 중 일부가 숨겨진 또는 상위 GPR에 액세스할 수 있게 해주면서 나머지 일련의 명령어가 구조적 또는 하위 GPR에 액세스할 수 있는 "상위-워드 기능 모드"가 제공된다.
바람직하게는, "상위-워드 기능 모드"에서, 한 구현에서는 명령어들 중 일부만이 상위 GPR에 액세스할 수 있지만, 다른 구현에서는 명령어들 중 일부가 GPR 필드를 상위 GPR에 관련되어 있는 것으로 정의하고 다른 GPR 필드를 하위 GPR에 관련되어 있는 것으로 정의할 수 있다.
다른 바람직한 구현에서, "상위-워드 기능 모드"에서, 하위 GPR만이 주 메모리 주소를 발생하는 데 사용될 수 있다.
한 구현에서, "상위-워드 기능 모드"에서 실행되는 응용 프로그램은 "상위-워드 기능 모드"에서 실행되지 않는 응용 프로그램과 공존할 수 있다. 상위-워드 기능 모드에 있지 않은 응용 프로그램은 32 비트 GPR 응용 프로그램 또는 64 비트 GPR 응용 프로그램일 수 있다. 이 일례에서, 32 비트를 이용하는 GPR용으로 작성된 응용 프로그램에서 64 비트를 가지는 머신의 GPR이 이용되지만, 본 실시예는 임의의 수의 비트(16, 24, 32, 48, 64, 128)를 가지는 머신의 GPR이 보다 적은 수의 비트(8, 16, 24, 32, 48, 64)를 가지는 GPR용으로 작성된 응용 프로그램을 실행할 시에 이점을 제공할 것이다. 게다가, 상위-워드 기능 모드의 숨겨진 레지스터는 숨겨진 GPR의 지정된 부분만을 이용할 수 있으며, 그로써, 예를 들어, 이전의 일례의 32 비트 응용 프로그램에서, 일부 명령어에 대해 상위-워드 기능 모드에서 이용가능한 숨겨진 레지스터가 64 비트 GPR의 상위 32 비트의 하위 8 또는 16 비트일 수 있는 반면, 다른 숨겨진 레지스터가 64 비트 GPR의 상위 32 비트의 상위 8 또는 16 비트일 수 있다. z/Architecture 및/또는 x86 아키텍처를 사용하는 실시예의 개시 내용이 제시되어 있지만, 본 명세서의 개시 내용을 고려하면 당업자에게는 다른 구현이 명백하게 될 것이다.
예시적인 z/Architecture 실시예에서, 선택된 32-비트 명령어에 대해, 상위-워드 기능은, 16개의 64-비트 범용 레지스터(비트 0-63)의 이전에 이용가능하지 않았던 상위 비트 0-31을 이용함으로써, 사실상 16개의 부가의 32-비트 레지스터(상위 워드 레지스터)를 제공한다. 일 실시예에서, 상위-워드 기능은 펑션을 나타내는 니모닉을 가지는 이하의 명령어를 가능하게 해줄 수 있다(예를 들어, ADD HIGH에 대한 AHHHR).
Figure 112011039491462-pat00048
ADD HIGH (AHHHR, AHHLR)
Figure 112011039491462-pat00049
ADD IMMEDIATE HIGH (AIH)
Figure 112011039491462-pat00050
ADD LOGICAL HIGH (ALHHHR, ALHHLR)
Figure 112011039491462-pat00051
ADD LOGICAL WITH SIGNED IMMEDIATE HIGH (ALSIH, ALSIHN)
Figure 112011039491462-pat00052
BRANCH RELATIVE ON COUNT HIGH (BRCTH)
Figure 112011039491462-pat00053
COMPARE HIGH (CHHR, CHLR, CHF)
Figure 112011039491462-pat00054
COMPARE IMMEDIATE HIGH (CIH)
Figure 112011039491462-pat00055
COMPARE LOGICAL HIGH (CLHHR, CLHLR, CLHF)
Figure 112011039491462-pat00056
COMPARE LOGICAL IMMEDIATE HIGH (CLIH)
Figure 112011039491462-pat00057
LOAD BYTE HIGH (LBH)
Figure 112011039491462-pat00058
LOAD HALFWORD HIGH (LHH)
Figure 112011039491462-pat00059
LOAD HIGH (LFH)
Figure 112011039491462-pat00060
LOAD LOGICAL CHARACTER HIGH (LLCH)
Figure 112011039491462-pat00061
LOAD LOGICAL HALFWORD HIGH (LLHH)
Figure 112011039491462-pat00062
ROTATE THEN INSERT SELECTED BITS HIGH (RISBHG)
Figure 112011039491462-pat00063
ROTATE THEN INSERT SELECTED BITS LOW (RISBLG)
Figure 112011039491462-pat00064
STORE CHARACTER HIGH (STCH)
Figure 112011039491462-pat00065
STORE HALFWORD HIGH (STHH)
Figure 112011039491462-pat00066
STORE HIGH (STFH)
Figure 112011039491462-pat00067
SUBTRACT HIGH (SHHHR, SHHLR)
Figure 112011039491462-pat00068
SUBTRACT LOGICAL HIGH (SLHHHR, SLHHLR)
연동된 액세스 기능(interlocked-access facility)이 설치되어 있을 때 이하의 부가의 일반 명령어가 이용가능할 수 있다:
Figure 112011039491462-pat00069
LOAD AND ADD (LAA, LAAG)
Figure 112011039491462-pat00070
LOAD AND ADD LOGICAL (LAAL, LAALG)
Figure 112011039491462-pat00071
LOAD AND AND (LAN, LANG)
Figure 112011039491462-pat00072
LOAD AND EXCLUSIVE OR (LAX, LAXG)
Figure 112011039491462-pat00073
LOAD AND OR (LAO, LAOG)
Figure 112011039491462-pat00074
LOAD PAIR DISJOINT (LPD, LPDG)
조건부 로드/저장 기능(load/store-on-condition facility)이 설치되어 있을 때 이하의 부가의 일반 명령어가 이용가능할 수 있다:
Figure 112011039491462-pat00075
LOAD ON CONDITION (LOC, LGOC, LGROC, LROC)
Figure 112011039491462-pat00076
STORE ON CONDITION (STOC, STGOC)
개별 피연산자 기능(distinct-operands facility)이 설치되어 있을 때 이하의 부가의 일반 명령어가 이용가능할 수 있다:
Figure 112011039491462-pat00077
ADD (ARK, AGRK)
Figure 112011039491462-pat00078
ADD IMMEDIATE (AHIK, AGHIK)
Figure 112011039491462-pat00079
ADD LOGICAL (ALRK, ALGRK)
Figure 112011039491462-pat00080
ADD LOGICAL WITH SIGNED IMMEDIATE (ALHSIK, ALGHSIK)
Figure 112011039491462-pat00081
AND (NRK, NGRK)
Figure 112011039491462-pat00082
EXCLUSIVE OR (XRK, XGRK)
Figure 112011039491462-pat00083
OR (ORK, OGRK)
Figure 112011039491462-pat00084
SHIFT LEFT SINGLE (SLAK)
Figure 112011039491462-pat00085
SHIFT LEFT SINGLE LOGICAL (SLLK)
Figure 112011039491462-pat00086
SHIFT RIGHT SINGLE (SRAK)
Figure 112011039491462-pat00087
SHIFT RIGHT SINGLE LOGICAL (SRLK)
Figure 112011039491462-pat00088
SUBTRACT (SRK, SGRK)
Figure 112011039491462-pat00089
SUBTRACT LOGICAL (SLRK, SLGRK)
예시적인 상위-워드 명령어:
이하는 상위-워드 기능을 이용할 수 있는 예시적인 명령어이다.
ADD HIGH (RRF 형식)
명령어가 컴퓨터 시스템에 의해 실행될 때, 제2 피연산자가 제3 피연산자에 가산되고, 합이 제1 피연산자 장소에 위치된다. 피연산자 및 합이 32-비트 부호있는 이진 정수로서 취급된다. 제1 및 제2 피연산자는 각각 범용 레지스터 R1 및 R2의 비트 0-31에 있고, 범용 레지스터 R1의 비트 32-63은 그대로 있으며, 범용 레지스터 R2의 비트 32-63은 무시된다. AHHHR 연산 코드의 경우, 제3 피연산자는 범용 레지스터 R3의 비트 0-31에 있고, 레지스터의 비트 32-63은 무시된다. AHHLR 연산 코드의 경우, 제3 피연산자는 범용 레지스터 R3의 비트 32-63에 있고, 레지스터의 비트 0-31은 무시된다. 오버플로우가 있을 때, 부호-비트 위치로 임의의 캐리 인을 허용하고 부호-비트 위치로부터 캐리를 무시함으로써 결과가 얻어지고, 조건 코드 3이 설정된다. 고정 소수점 오버플로우 마스크(fixed-point-overflow mask)가 1인 경우, 고정 소수점 오버플로우(fixed-point overflow)에 대한 프로그램 인터럽트가 발생한다.
얻어지는 조건 코드:
0 결과가 0임, 오버플로우 없음
1 결과가 0보다 작음, 오버플로우 없음
2 결과가 0보다 큼, 오버플로우 없음
3 오버플로우
프로그램 예외:
Figure 112011039491462-pat00090
고정 소수점 오버플로우
Figure 112011039491462-pat00091
연산(상위-워드 기능이 설치되어 있지 않은 경우)
ADD IMMEDIATE HIGH (RIL 형식)
명령어가 컴퓨터 시스템에 의해 실행될 때, 제2 피연산자가 제1 피연산자에 가산되고, 합이 제1 피연산자 장소에 위치된다. 피연산자 및 합이 32-비트 부호있는 이진 정수로서 취급된다. 제1 피연산자가 범용 레지스터 R1의 비트 0-31에 있고, 레지스터의 비트 32-63이 그대로 있다. 오버플로우가 있을 때, 부호-비트 위치로 임의의 캐리 인을 허용하고 부호-비트 위치로부터 캐리를 무시함으로써 결과가 얻어지고, 조건 코드 3이 설정된다. 고정 소수점 오버플로우 마스크(fixed-point-overflow mask)가 1인 경우, 고정 소수점 오버플로우(fixed-point overflow)에 대한 프로그램 인터럽트가 발생한다.
얻어지는 조건 코드:
0 결과가 0임, 오버플로우 없음
1 결과가 0보다 작음, 오버플로우 없음
2 결과가 0보다 큼, 오버플로우 없음
3 오버플로우
프로그램 예외:
Figure 112011039491462-pat00092
고정 소수점 오버플로우
Figure 112011039491462-pat00093
연산(상위-워드 기능이 설치되어 있지 않은 경우)
ADD LOGICAL HIGH (RRF 형식)
명령어가 컴퓨터 시스템에 의해 실행될 때, 제2 피연산자가 제3 피연산자에 가산되고, 합이 제1 피연산자 장소에 위치된다. 피연산자 및 합이 32-비트 부호없는 이진 정수로서 취급된다. 제1 및 제2 피연산자는 각각 범용 레지스터 R1 및 R2의 비트 0-31에 있고, 범용 레지스터 R1의 비트 32-63은 그대로 있으며, 범용 레지스터 R2의 비트 32-63은 무시된다. ALHHHR 연산 코드의 경우, 제3 피연산자는 범용 레지스터 R3의 비트 0-31에 있고, 레지스터의 비트 32-63은 무시된다. ALHHLR 연산 코드의 경우, 제3 피연산자는 범용 레지스터 R3의 비트 32-63에 있고, 레지스터의 비트 0-31은 무시된다.
얻어지는 조건 코드:
0 결과가 0임, 캐리 없음
1 결과가 0이 아님, 캐리 없음
2 결과가 0임, 캐리
3 결과가 0이 아님, 캐리
프로그램 예외:
Figure 112011039491462-pat00094
연산(상위-워드 기능이 설치되어 있지 않은 경우)
ADD LOGICAL WITH SIGNED IMMEDIATE HIGH (RIL 형식)
명령어가 컴퓨터 시스템에 의해 실행될 때, 제2 피연산자가 제1 피연산자에 가산되고, 합이 제1 피연산자 장소에 위치된다. 제1 피연산자 및 합이 32-비트 부호없는 이진 정수로서 취급된다. 제2 피연산자가 32-비트 부호있는 이진 정수로서 취급된다. 제1 피연산자가 범용 레지스터 R1의 비트 0-31에 있고, 레지스터의 비트 32-63이 그대로 있다.
얻어지는 조건 코드:
ALSIH의 경우, 코드는 다음과 같이 설정된다:
0 결과가 0임, 캐리 없음
1 결과가 0이 아님, 캐리 없음
2 결과가 0임, 캐리
3 결과가 0이 아님, 캐리
ALSIHN의 경우, 코드가 그대로 있다.
프로그램 예외:
Figure 112011039491462-pat00095
연산(상위-워드 기능이 설치되어 있지 않은 경우)
BRANCH RELATIVE ON COUNT HIGH (RI, RIL 형식)
명령어가 컴퓨터 시스템에 의해 실행될 때, 제1 피연산자로부터 1이 감산되고, 결과가 제1 피연산자 장소에 위치된다. BRANCH RELATIVE ON COUNT (BRCT 연산 코드)의 경우, 제1 피연산자 및 결과가 범용 레지스터 R1의 비트 32-63에 있는 32-비트 이진 정수로서 취급되고, 오버플로우가 무시되며, 레지스터의 비트 0-31은 그대로 있다. BRANCH RELATIVE ON COUNT HIGH (BRCTH 연산 코드)의 경우, 제1 피연산자 및 결과가 범용 레지스터 R1의 비트 0-31에 있는 32-비트 이진 정수로서 취급되고, 오버플로우가 무시되며, 레지스터의 비트 32-63은 그대로 있다. BRANCH RELATIVE ON COUNT (BRCTG 연산 코드)의 경우, 제1 피연산자 및 결과가 64-비트 이진 정수로서 취급되고, 오버플로우가 무시된다. 결과가 0일 때, 보통의 명령어 시퀀싱는 업데이트된 명령어 주소에서 계속된다. 결과가 0이 아닐 때, 현재 PSW에서의 명령어 주소가 분기 주소로 대체된다. I2 필드의 내용이 하프워드의 수를 지정하는 부호있는 이진 정수이며, 이는 명령어의 주소에 가산되어 분기 주소를 발생한다.
조건 코드: 이 코드는 그대로 있다.
프로그램 예외:
Figure 112011039491462-pat00096
연산(BRCTH, 상위-워드 기능이 설치되어 있지 않은 경우)
프로그래밍 유의점:
1. 분기 주소를 지정하는 수단을 제외하고는 연산이 BRANCH ON COUNT 명령어와 동일하다.
2. 제1 피연산자 및 결과가 부호있는 또는 부호없는 이진 정수로서 간주될 수 있는데, 그 이유는 이진 뺄셈(binary subtraction)의 결과가 양 경우에 동일하기 때문이다.
3. 1의 초기 카운트로부터 0이 얻어지고, 분기가 일어나지 않으며, 0의 초기 카운트로부터 -1이 얻어지고 그로 인해 분기가 실행되며, -1의 초기 카운트로부터 -2가 얻어지고 그로 인해 분기가 실행되며, 이하 마찬가지이다. 루프에서, 결과가 다시 0이 될 때까지 명령어가 실행될 때마다 분기가 일어난다.
유의할 점은, BRCT의 경우, 숫자 범위로 인해, -231의 초기 카운트로부터 231 - 1의 플러스 값이 얻어지거나, BRCTG의 경우, -263의 초기 카운트로부터 263 - 1.4의 플러스 값이 얻어진다. 명령어가 실행형 명령어(execute type instruction)의 대상일 때, 분기는 대상 주소에 상대적이다:
COMPARE HIGH (RRE, RXY 형식), COMPARE IMMEDIATE HIGH (RIL 형식)
명령어가 컴퓨터 시스템에 의해 실행될 때, 제1 피연산자가 제2 피연산자와 비교되고, 결과가 조건 코드에 표시된다. 피연산자가 32-비트 부호있는 이진 정수로서 취급된다. 제1 피연산자가 범용 레지스터 R1의 비트 위치 0-31에 있고, 레지스터의 비트 위치 32-63은 무시된다. COMPARE HIGH (CHHR 연산 코드)의 경우, 제2 피연산자가 범용 레지스터 R2의 비트 위치 0-31에 있고, 레지스터의 비트 위치 32-63은 무시된다. COMPARE HIGH (CHLR 연산 코드)의 경우, 제2 피연산자가 범용 레지스터 R2의 비트 위치 32-63에 있고, 레지스터의 비트 위치 0-31은 무시된다. CHF의 변위가 20-비트 부호있는 이진 정수로서 취급된다.
얻어지는 조건 코드:
0 피연산자가 같음
1 제1 피연산자가 낮음
2 제1 피연산자가 높음
3 --
프로그램 예외:
Figure 112013011840462-pat00097
액세스(CHF의 피연산자 2만(only))
Figure 112011039491462-pat00098
연산(상위-워드 기능이 설치되어 있지 않은 경우)
COMPARE LOGICAL HIGH (RRE, RXY 형식), COMPARE LOGICAL IMMEDIATE HIGH (RIL 형식)
명령어가 컴퓨터 시스템에 의해 실행될 때, 제1 피연산자가 제2 피연산자와 비교되고, 결과가 조건 코드에 표시된다. 피연산자가 32-비트 부호없는 이진 정수로서 취급된다. 제1 피연산자가 범용 레지스터 R1의 비트 위치 0-31에 있고, 레지스터의 비트 위치 32-63은 무시된다. COMPARE LOGICAL HIGH (CLHHR 연산 코드)의 경우, 제2 피연산자가 범용 레지스터 R2의 비트 위치 0-31에 있고, 레지스터의 비트 위치 32-63은 무시된다. COMPARE LOGICAL HIGH (CLHLR 연산 코드)의 경우, 제2 피연산자가 범용 레지스터 R2의 비트 위치 32-63에 있고, 레지스터의 비트 위치 0-31은 무시된다. CLHF의 변위가 20-비트 부호있는 이진 정수로서 취급된다.
얻어지는 조건 코드:
0 피연산자가 같음
1 제1 피연산자가 낮음
2 제1 피연산자가 높음
3 --
프로그램 예외:
Figure 112013011840462-pat00099
액세스(CLHF의 피연산자 2만)
Figure 112011039491462-pat00100
연산(상위-워드 기능이 설치되어 있지 않은 경우)
LOAD BYTE HIGH (RXY 형식)
명령어가 컴퓨터 시스템에 의해 실행될 때, 제2 피연산자가 부호 확장(sign extended)되고, 제1 피연산자 장소에 위치된다. 제2 피연산자는 길이가 1 바이트이고, 8-비트 부호있는 이진 정수로서 취급된다. 제1 피연산자는 범용 레지스터 R1의 비트 0-31에 있는 32-비트 부호있는 이진 정수로서 취급되고, 레지스터의 비트 32-63은 그대로 있다. 변위가 20-비트 부호있는 이진 정수로서 취급된다.
조건 코드: 이 코드는 그대로 있다.
프로그램 예외:
Figure 112013011840462-pat00101
액세스(페치, 피연산자 2)
Figure 112011039491462-pat00102
연산(상위-워드 기능이 설치되어 있지 않은 경우)
LOAD HALFWORD HIGH (RXY 형식)
명령어가 컴퓨터 시스템에 의해 실행될 때, 제2 피연산자가 부호 확장되고, 제1 피연산자 장소에 위치된다. 제2 피연산자는 길이가 2 바이트이고, 16-비트 부호있는 이진 정수로서 취급된다. 제1 피연산자는 범용 레지스터 R1의 비트 0-31에 있는 32-비트 부호있는 이진 정수로서 취급되고, 레지스터의 비트 32-63은 그대로 있다. 변위가 20-비트 부호있는 이진 정수로서 취급된다.
조건 코드: 이 코드는 그대로 있다.
프로그램 예외:
Figure 112013011840462-pat00103
액세스(페치, 피연산자 2)
Figure 112011039491462-pat00104
연산(상위-워드 기능이 설치되어 있지 않은 경우)
LOAD HIGH (RXY 형식)
명령어가 컴퓨터 시스템에 의해 실행될 때, 제2 피연산자가 제1 피연산자 장소에 그대로 위치된다. 제2 피연산자는 32 비트이고, 제1 피연산자는 범용 레지스터 R1의 비트 0-31에 있으며, 레지스터의 비트 32-63은 그대로 있다. 변위가 20-비트 부호있는 이진 정수로서 취급된다.
조건 코드: 이 코드는 그대로 있다.
프로그램 예외:
Figure 112013011840462-pat00105
액세스(페치, 피연산자 2)
Figure 112011039491462-pat00106
연산(상위-워드 기능이 설치되어 있지 않은 경우)
LOAD LOGICAL CHARACTER HIGH (RXY 형식)
명령어가 컴퓨터 시스템에 의해 실행될 때, 1-바이트 제2 피연산자가 범용 레지스터 R1의 비트 위치 24-31에 위치되고, 0이 범용 레지스터 R1의 비트 위치 0-23에 위치되며, 범용 레지스터 R1의 비트 위치 32-63은 그대로 있다. 변위가 20-비트 부호있는 이진 정수로서 취급된다.
조건 코드: 이 코드는 그대로 있다.
프로그램 예외:
Figure 112013011840462-pat00107
액세스(페치, 피연산자 2)
Figure 112011039491462-pat00108
연산(상위-워드 기능이 설치되어 있지 않은 경우)
LOAD LOGICAL HALFWORD HIGH (RXY 형식)
명령어가 컴퓨터 시스템에 의해 실행될 때, 2-바이트 제2 피연산자가 범용 레지스터 R1의 비트 위치 16-31에 위치되고, 0이 범용 레지스터 R1의 비트 위치 0-15에 위치되며, 범용 레지스터 R1의 비트 위치 32-63은 그대로 있다. 변위가 20-비트 부호있는 이진 정수로서 취급된다.
조건 코드: 이 코드는 그대로 있다.
프로그램 예외:
Figure 112013011840462-pat00109
액세스(페치, 피연산자 2)
Figure 112011039491462-pat00110
연산(상위-워드 기능이 설치되어 있지 않은 경우)
ROTATE THEN INSERT SELECTED BITS HIGH (RIE 형식), ROTATE THEN INSERT SELECTED BITS LOW (RIE 형식)
명령어가 컴퓨터 시스템에 의해 실행될 때, 64-비트 제2 피연산자가 제5 피연산자에 지정된 비트의 수만큼 좌측으로 회전된다. 피연산자의 가장 왼쪽의 비트 위치로부터 시프트된 각각의 비트는 피연산자의 가장 오른쪽 비트 위치에 다시 들어간다. 회전된 제2 피연산자의 선택된 비트가 제1 피연산자의 대응하는 비트 위치의 내용을 대체한다. ROTATE THEN INSERT SELECTED BITS HIGH의 경우, 제1 피연산자는 범용 레지스터 R1의 비트 0-31에 있으며, 레지스터의 비트 32-63은 그대로 있다. ROTATE THEN INSERT SELECTED BITS LOW의 경우, 제1 피연산자는 범용 레지스터 R1의 비트 32-63에 있으며, 레지스터의 비트 0-31은 그대로 있다. 제2 피연산자는 범용 레지스터 R2에서 그대로 있다. ROTATE THEN INSERT SELECTED BITS HIGH의 경우, I3 및 I4 필드의 비트 3-7(각각 명령어의 비트 19-23 및 27-31)(각각의 좌측에 이진 0이 첨부됨)은 회전 이후의 제1 피연산자 및 제2 피연산자에서의 선택된 비트 범위의 시작 및 종료 비트 위치(경계 포함)를 지정하는 6-비트 부호없는 이진 정수를 형성한다. 종료 비트 위치가 시작 비트 위치보다 작을 때, 선택된 비트 범위는 비트 31로부터 비트 0으로 다시 넘어간다. 따라서, 선택된 비트 범위의 시작 및 종료 비트 위치는 항상 0과 31 사이에 있다. ROTATE THEN INSERT SELECTED BITS LOW의 경우, I3 및 I4 필드의 비트 3-7(각각의 좌측에 이진 1이 첨부됨)은 회전 이후의 제1 피연산자 및 제2 피연산자에서의 선택된 비트 범위의 시작 및 종료 비트 위치(경계 포함)를 지정하는 6-비트 부호없는 이진 정수를 형성한다. 종료 비트 위치가 시작 비트 위치보다 작을 때, 선택된 비트 범위는 비트 63으로부터 비트 32로 다시 넘어간다. 따라서, 선택된 비트 범위의 시작 및 종료 비트 위치는 항상 32와 63 사이에 있다.I5 필드의 비트 2-7(명령어의 비트 34-39)은 제2 피연산자가 좌측으로 회전되는 비트의 수를 지정하는 부호없는 이진 정수를 포함한다. I4 필드의 비트 0(명령어의 비트 24)은 0 나머지 비트 제어(zero-remaining-bits control)(Z)를 포함한다. Z 비트 제어는 제1 피연산자의 나머지 비트가 설정되어 있음을 나타낸다(즉, 있는 경우, 지정된 범위 밖에 있는 비트). Z 비트가 0일 때, 제1 피연산자의 나머지 비트가 그대로 있다. Z 비트가 1일 때, 제1 피연산자의 나머지 비트가 0으로 설정된다. 앞서 기술된 직접 필드는 다음과 같다: I3 필드의 비트 0-2 및 I4 필드의 비트 1-2(명령어의 비트 16-19 및 25-26)는 예약되어 있으며, 0을 포함하고 있어야 하고, 그렇지 않으면, 프로그램이 장래에 호환가능하게 동작하지 않을 수 있다. I5 필드의 비트 0-1(명령어의 비트 32-33)은 무시된다.
조건 코드: 이 코드는 그대로 있다.
프로그램 예외:
Figure 112011039491462-pat00111
연산(상위-워드 기능이 설치되어 있지 않은 경우)
프로그래밍 유의점:
1. I5 필드의 비트 2-7이 제2 피연산자가 좌측으로 회전되는 비트의 수를 지정하는 부호없는 이진 정수를 포함하지만, 사실상 우측 회전량(rotate-right amount)을 지정하는 마이너스 값이 코딩될 수 있다.
2. 제1 피연산자는 항상 그의 비회전된 형태로 사용된다. R1 및 R2 필드가 동일한 레지스터를 지정할 때, 레지스터에 포함된 값이 먼저 회전되고, 이어서 회전된 값의 선택된 비트가 비회전된 레지스터 내용의 대응하는 비트에 삽입된다.
3. 어셈블러 구문(assembler syntax)에서, 회전량을 포함하는 I5 피연산자는 선택적인 것으로 간주된다. I5 필드가 코딩되어 있지 않을 때, 0의 회전량이 암시된다.
4. I4 필드는 0 나머지 비트 제어(비트 0에 있음) 및 종료 비트 위치 값(비트 2-7에 있음) 둘다를 포함한다. 예를 들어, 레지스터 7의 비트 40-43을 레지스터 5의 대응하는 비트에 삽입하고(회전 없음) 0을 레지스터 5의 우반부 내의 나머지 비트에 삽입하기 위해, 프로그래머는 다음과 같이 코딩할 수 있다: X'80'은 0 나머지 비트 제어를 나타내며, 이는 종료 비트 위치에 가산되어 I4 필드를 형성한다. 상위 레벨 어셈블러(high-level assembler, HLASM)는 RISBHG 및 RISBLG의 0 나머지 비트 버전에 대한 대안의 니모닉을 각각 RISBHGZ 및 RISBLHZ의 형태로 제공한다. 니모닉에 대한 "Z" 접미사(suffix)는, 오브젝트 코드(object code)를 발생할 때, 지정된 I4 필드가 X'80'의 값과 OR된다는 것을 나타낸다. Z-접미사가 붙은 니모닉을 사용하는 상기한 일례에 대한 등가물은 다음과 같다:
5. 일부 모델에서, 0 나머지 비트 제어를 1로 설정함으로써(또는 Z 니모닉 접미사를 사용함으로써) RISBHG 및 RISBLG의 향상된 성능이 실현될 수 있다.
6. 조건 코드를 설정하는 ROTATE THEN INSERT SELECTEDBITS와 달리, ROTATETHEN INSERT SELECTED BITS HIGH 및 ROTATE THEN INSERT SELECTED BITS LOW는 조건 코드를 설정하지 않는다.
STORE CHARACTER HIGH (RXY 형식)
명령어가 컴퓨터 시스템에 의해 실행될 때, 범용 레지스터 R1의 비트 24-31은 제2 피연산자 장소에 그대로 위치된다. 제2 피연산자는 길이가 1 바이트이다. 변위가 20-비트 부호있는 이진 정수로서 취급된다.
조건 코드: 이 코드는 그대로 있다.
프로그램 예외:
Figure 112013011840462-pat00112
액세스(저장, 피연산자 2)
Figure 112011039491462-pat00113
연산(상위-워드 기능이 설치되어 있지 않은 경우)
STORE HALFWORD HIGH (RXY 형식)
명령어가 컴퓨터 시스템에 의해 실행될 때, 범용 레지스터 R1의 비트 16-31은 제2 피연산자 장소에 그대로 위치된다. 제2 피연산자는 길이가 2 바이트이다. 변위가 20-비트 부호있는 이진 정수로서 취급된다.
조건 코드: 이 코드는 그대로 있다.
프로그램 예외:
Figure 112013011840462-pat00114
액세스(저장, 피연산자 2)
Figure 112011039491462-pat00115
연산(상위-워드 기능이 설치되어 있지 않은 경우)
STORE HIGH (RXY 형식)
명령어가 컴퓨터 시스템에 의해 실행될 때, 제1 피연산자가 제2 피연산자 장소에 그대로 위치된다. 제1 피연산자는 범용 레지스터 R1의 비트 0-31에 있고, 제2 피연산자는 저장소에 있는 32 비트이다. 변위가 20-비트 부호있는 이진 정수로서 취급된다.
조건 코드: 이 코드는 그대로 있다.
프로그램 예외:
Figure 112013011840462-pat00116
액세스(저장, 피연산자 2)
Figure 112011039491462-pat00117
연산(상위-워드 기능이 설치되어 있지 않은 경우)
SUBTRACT HIGH (RRF 형식)
명령어가 컴퓨터 시스템에 의해 실행될 때, 제3 피연산자가 제2 피연산자로부터 감산되고, 차가 제1 피연산자 장소에 위치된다. 피연산자 및 차가 32-비트 부호있는 이진 정수로서 취급된다. 제1 및 제2 피연산자는 각각 범용 레지스터 R1 및 R2의 비트 0-31에 있고, 범용 레지스터 R1의 비트 32-63은 그대로 있으며, 범용 레지스터 R2의 비트 32-63은 무시된다. SHHHR 연산 코드의 경우, 제3 피연산자는 범용 레지스터 R3의 비트 0-31에 있고, 레지스터의 비트 32-63은 무시된다. SHHLR 연산 코드의 경우, 제3 피연산자는 범용 레지스터 R3의 비트 32-63에 있고, 레지스터의 비트 0-31은 무시된다. 오버플로우가 있을 때, 부호-비트 위치로 임의의 캐리 인을 허용하고 부호-비트 위치로부터 캐리를 무시함으로써 결과가 얻어지고, 조건 코드 3이 설정된다. 고정 소수점 오버플로우 마스크(fixed-point-overflow mask)가 1인 경우, 고정 소수점 오버플로우(fixed-point overflow)에 대한 프로그램 인터럽트가 발생한다.
얻어지는 조건 코드:
0 결과가 0임, 오버플로우 없음
1 결과가 0보다 작음, 오버플로우 없음
2 결과가 0보다 큼, 오버플로우 없음
3 오버플로우
프로그램 예외들:
Figure 112011039491462-pat00118
고정 소수점 오버플로우
Figure 112011039491462-pat00119
연산(상위-워드 기능이 설치되어 있지 않은 경우)
SUBTRACT LOGICAL HIGH (RRF 형식)
명령어가 컴퓨터 시스템에 의해 실행될 때, 제3 피연산자가 제2 피연산자로부터 감산되고, 차가 제1 피연산자 장소에 위치된다. 피연산자 및 차가 32-비트 부호없는 이진 정수로서 취급된다. 제1 및 제2 피연산자는 각각 범용 레지스터 R1 및 R2의 비트 0-31에 있고, 범용 레지스터 R1의 비트 32-63은 그대로 있으며, 범용 레지스터 R2의 비트 32-63은 무시된다. SLHHHR 연산 코드의 경우, 제3 피연산자는 범용 레지스터 R3의 비트 0-31에 있고, 레지스터의 비트 32-63은 무시된다. SLHHLR 연산 코드의 경우, 제3 피연산자는 범용 레지스터 R3의 비트 32-63에 있고, 레지스터의 비트 0-31은 무시된다.
얻어지는 조건 코드:
0 --
1 결과가 0이 아님, 바로우(borrow)
2 결과가 0임, 바로우 없음
3 결과가 0이 아님, 바로우 없음
프로그램 예외:
Figure 112011039491462-pat00120
연산(상위-워드 기능이 설치되어 있지 않은 경우)
도 6을 참조하면, 예시적인 범용 레지스터(GPR)가 16개의 GPR을 가지는 것으로 도시되어 있다(각각의 GPR은 소용량 GPR 모드에 있는 비트 32-63 및 대용량 GPR 모드에 있는 비트 0-63을 포함함). 프로그램의 명령어에 의해 이용가능한 범용 레지스터(GPR)의 유효 수가 제1 수(16개)의 대용량 GPR을 가지는 컴퓨터에서 확장될 수 있으며, 각각의 명령어는 연산 코드 및 대응하는 GPR을 지정하는 하나 이상의 GPR 필드를 포함하고, 각각의 대용량 GPR은 제1 부분(31-63) 및 제2 부분(0-31)으로 이루어져 있다. 도 7a를 참조하면, 컴퓨터는 제1 세트(701), 제2 세트(702) 또는 제3 세트(710)로부터의 명령어를 포함하는 실행하기 위한 명령어를 페치한다. 제1 세트는 임의의 GPR의 제1 부분에만 액세스하고, 제2 세트는 임의의 GPR의 제2 부분에 액세스하며, 제3 세트는 제1 부분 및 제2 부분을 포함하는 전체 GPR에 액세스한다. 703에서 컴퓨터가, 예를 들어, 소용량 GPR 모드에 있고 제1 부분에 액세스하기 위해 제1 명령어 세트의 명령어를 실행할 때(707), 이 실행은 상기 제2 소용량 GPR에 기초하여 메모리 피연산자에 액세스하거나 소용량 GPR 피연산자에 액세스하기 위한 메모리 주소를 생성하는 단계를 포함하고, 상기 소용량 GPR 각각은 상기 제1 부분으로 이루어져 있으며(707), 703에서 컴퓨터가 소용량 GPR 모드에 있을 때, 705에서 컴퓨터가 상위-워드 명령어를 실행할 때, 명령어 지정 제2 부분(instruction specified second portion)에 액세스하는 제2 명령어 세트의 명령어를 실행하고(706), 708에서 이 실행은 상기 소용량 GPR에 기초하여 메모리 피연산자에 액세스하거나 소용량 GPR 피연산자에 액세스하기 위한 메모리 주소를 생성하는 단계를 포함하며, 상기 소용량 GPR은 상기 명령어 지정 제2 부분으로 이루어져 있다. 704에서 컴퓨터가 대용량 GPR 모드에 있을 때 - 각각의 대용량 GPR은 제1 부분 및 제2 부분으로 이루어져 있음 -, 컴퓨터는 제3 명령어 세트의 명령어를 실행하고, 이 실행은 상기 대용량 GPR에 기초하여 메모리 피연산자에 액세스하거나 대용량 GPR 피연산자에 액세스하기 위한 메모리 주소를 생성하는 단계를 포함하고, 상기 대용량 GPR 각각은 상기 제1 부분 및 상기 제2 부분으로 이루어져 있다.
컴퓨터가 소용량 GPR 모드에 있는 것에 응답하여, 컴퓨터는 제2 명령어 세트의 명령어를 실행한 것에 응답하여 연산 예외를 발생할 수 있다(709).
제2 명령어 세트의 명령어의 실행은 2개의 피연산자에 기초하여 대응하는 연산 코드 정의 펑션(opcode defined function)을 수행할 수 있고(751), 결과를 저장하며, 대응하는 연산 코드 정의 펑션은 2개의 피연산자의 ADD 펑션, 2개의 피연산자의 COMPARE 펑션, 또는 2개의 피연산자의 OR 펑션으로 이루어져 있다(752).
제2 명령어 세트의 명령어의 실행은 2개의 피연산자에 기초하여 대응하는 연산 코드 정의 펑션을 수행할 수 있고, 결과를 저장하며, 대응하는 연산 코드 정의 펑션은 메모리로부터의 피연산자의 LOAD 펑션 또는 메모리에 피연산자의 STORE 펑션으로 이루어져 있다(753).
제2 명령어 세트의 명령어의 실행은 2개의 피연산자에 기초하여 대응하는 연산 코드 정의 펑션을 수행할 수 있고, 결과를 저장하며, 대응하는 연산 코드 정의 펑션은 소스 피연산자를 명령어 지정 양만큼 회전시키고 이어서 회전된 소스 피연산자의 선택된 부분을 대상 피연산자의 선택된 부분에 삽입하는 것(754)을 포함하는 ROTATE THEN INSERT SELECTED BITS 펑션이다.
바람직한 실시예가 본 명세서에 예시되고 기술되어 있지만, 실시예가 본 명세서에 개시된 정확한 구성으로 제한되지 않으며 첨부된 특허청구범위에서 한정된 본 발명의 범위 내에 속하는 모든 변경 및 수정에 대한 권리도 유보되어 있다는 것을 잘 알 것이다.
1: CPU
2: 메인 저장소
10: 네트워크
50: 호스트 컴퓨터

Claims (24)

  1. 제1 수의 대용량 GPR(General Purpose Register, 범용 레지스터)을 가지는 컴퓨터에서 프로그램의 명령어에 의해 이용가능한 GPR의 유효 수(effective number)를 확장하는 컴퓨터 구현 방법으로서,
    각각의 명령어는 연산 코드(opcode) 및 대응하는 GPR을 지정하는 하나 이상의 GPR 필드를 포함하고, 각각의 대용량 GPR은 제1 부분 및 제2 부분을 포함하며, 상기 대용량 GPR은 제1 부분으로 이루어진 제1 소용량 GPR(small GPR) 및 제2 부분으로 이루어진 제2 소용량 GPR을 포함하고,
    상기 방법이,
    상기 컴퓨터가 소용량 GPR 모드에 있는 것에 응답하여,
    a) 상기 제1 소용량 GPR에 액세스하는 제1 명령어 세트의 명령어를 실행하는 단계 - 이 실행하는 단계는 상기 제1 소용량 GPR에 기초하여 메모리 피연산자에 액세스하거나 제1 소용량 GPR 피연산자에 액세스하기 위한 메모리 주소를 생성하는 단계를 포함하고, 상기 제1 소용량 GPR은 상기 제1 부분으로 이루어져 있음 -, 및
    상기 제2 소용량 GPR에 액세스하는 제2 명령어 세트의 명령어를 실행하는 단계 - 이 실행하는 단계는 상기 제2 소용량 GPR에 기초하여 메모리 피연산자에 액세스하거나 제2 소용량 GPR 피연산자에 액세스하기 위한 메모리 주소를 생성하는 단계를 포함하고, 상기 제2 소용량 GPR은 상기 제2 부분으로 이루어져 있음 - 를 수행하는 단계, 및
    상기 컴퓨터가 대용량 GPR 모드에 있는 것에 응답하여,
    제3 명령어 세트의 명령어를 실행하는 단계 - 이 실행하는 단계는 상기 대용량 GPR에 기초하여 메모리 피연산자에 액세스하거나 상기 제1 부분 및 상기 제2 부분을 포함하는 대용량 GPR 피연산자에 액세스하기 위한 메모리 주소를 생성하는 단계를 포함함 - 를 포함하는 것인 방법.
  2. 제1항에 있어서, 상기 소용량 GPR 모드가 24 비트 어드레싱 모드(addressing mode) 또는 31 비트 어드레싱 모드 중 하나에 있는 것인 방법.
  3. 제2항에 있어서, 상기 제1 부분이 32 비트이고, 상기 제2 부분이 32 비트이며, 상기 제3 부분이 64 비트인 방법.
  4. 제2항에 있어서, 상기 제2 명령어 세트의 명령어를 실행하는 단계가 2개의 피연산자에 기초하여 대응하는 연산 코드 정의 펑션(opcode defined function)을 수행하는 단계, 및 결과를 저장하는 단계를 포함하며, 상기 대응하는 연산 코드 정의 펑션은 2개의 피연산자의 ADD 펑션 또는 2개의 피연산자의 COMPARE 펑션으로 이루어져 있는 것인 방법.
  5. 제2항에 있어서, 상기 제2 명령어 세트의 명령어를 실행하는 단계가 2개의 피연산자에 기초하여 대응하는 연산 코드 정의 펑션을 수행하는 단계, 및 결과를 저장하는 단계를 포함하며, 상기 대응하는 연산 코드 정의 펑션은 메모리로부터의 피연산자의 LOAD 펑션 또는 메모리에 피연산자의 STORE 펑션으로 이루어져 있는 것인 방법.
  6. 제2항에 있어서, 상기 제2 명령어 세트의 명령어를 실행하는 단계가 2개의 피연산자에 기초하여 대응하는 연산 코드 정의 펑션을 수행하는 단계, 및 결과를 저장하는 단계를 포함하며, 상기 대응하는 연산 코드 정의 펑션은 ROTATE THEN INSERT SELECTED BITS 펑션으로 이루어져 있고,
    상기 ROTATE THEN INSERT SELECTED BITS 펑션은
    명령어 지정 양(instruction specified amount)만큼 소스 피연산자(source operand)를 회전시키는 단계, 및
    상기 회전된 소스 피연산자의 선택된 부분을 대상 피연산자(target operand)의 선택된 부분에 삽입하는 단계를 포함하는 것인 방법.
  7. 제2항에 있어서, 대용량 GPR 모드에서 동작하는 운영 체제를 지원하는 단계를 포함하고, 소용량 GPR 모드에서 실행 중인 응용 프로그램에 대한 컨텍스트 전환 동안에 상기 대용량 GPR이 저장되고 복원되는 것인 방법.
  8. 제7항에 있어서, 상기 제3 명령어 세트가 상기 제1 명령어 세트 및 상기 제2 명령어 세트를 포함하는 것인 방법.
  9. 컴퓨터 판독가능 매체에 있어서,
    상기 컴퓨터 판독가능 매체는, 제1 수의 대용량 GPR(General Purpose Register, 범용 레지스터)을 가지는 컴퓨터에서 프로그램의 명령어에 의해 이용가능한 GPR의 유효 수를 확장하는 컴퓨터 프로그램을 포함하고,
    각각의 명령어는 연산 코드(opcode) 및 대응하는 GPR을 지정하는 하나 이상의 GPR 필드를 포함하고, 각각의 대용량 GPR은 제1 부분 및 제2 부분을 포함하며, 상기 대용량 GPR은 제1 부분으로 이루어진 제1 소용량 GPR(small GPR) 및 제2 부분으로 이루어진 제2 소용량 GPR을 포함하고,
    상기 컴퓨터 프로그램은 처리 회로에 의해 판독가능하고 상기 처리 회로에 의해,
    상기 컴퓨터가 소용량 GPR 모드에 있는 것에 응답하여,
    a) 상기 제1 소용량 GPR에 액세스하는 제1 명령어 세트의 명령어를 실행하는 단계 - 이 실행하는 단계는 상기 제1 소용량 GPR에 기초하여 메모리 피연산자에 액세스하거나 제1 소용량 GPR 피연산자에 액세스하기 위한 메모리 주소를 생성하는 단계를 포함하고, 상기 제1 소용량 GPR은 상기 제1 부분으로 이루어져 있음 -, 및
    상기 제2 소용량 GPR에 액세스하는 제2 명령어 세트의 명령어를 실행하는 단계 - 이 실행하는 단계는 상기 제2 소용량 GPR에 기초하여 메모리 피연산자에 액세스하거나 제2 소용량 GPR 피연산자에 액세스하기 위한 메모리 주소를 생성하는 단계를 포함하고, 상기 제2 소용량 GPR은 상기 제2 부분으로 이루어져 있음 - 를 수행하는 단계, 및
    상기 컴퓨터가 대용량 GPR 모드에 있는 것에 응답하여,
    제3 명령어 세트의 명령어를 실행하는 단계 - 이 실행하는 단계는 상기 대용량 GPR에 기초하여 메모리 피연산자에 액세스하거나 상기 제1 부분 및 상기 제2 부분을 포함하는 대용량 GPR 피연산자에 액세스하기 위한 메모리 주소를 생성하는 단계를 포함함 - 를 포함하는 방법을 실행하기 위한 명령어를 저장하는
    컴퓨터 판독가능 매체.
  10. 제9항에 있어서, 상기 소용량 GPR 모드가 24 비트 어드레싱 모드(addressing mode) 또는 31 비트 어드레싱 모드 중 하나에 있는 것인 컴퓨터 판독가능 매체.
  11. 제10항에 있어서, 상기 제1 부분이 32 비트이고, 상기 제2 부분이 32 비트이며, 상기 제3 부분이 64 비트인 컴퓨터 판독가능 매체.
  12. 제10항에 있어서, 상기 제2 명령어 세트의 명령어를 실행하는 단계가 2개의 피연산자에 기초하여 대응하는 연산 코드 정의 펑션을 수행하는 단계, 및 결과를 저장하는 단계를 포함하며, 상기 대응하는 연산 코드 정의 펑션은 2개의 피연산자의 ADD 펑션 또는 2개의 피연산자의 COMPARE 펑션으로 이루어져 있는 것인 컴퓨터 판독가능 매체.
  13. 제10항에 있어서, 상기 제2 명령어 세트의 명령어를 실행하는 단계가 2개의 피연산자에 기초하여 대응하는 연산 코드 정의 펑션을 수행하는 단계, 및 결과를 저장하는 단계를 포함하며, 상기 대응하는 연산 코드 정의 펑션은 메모리로부터의 피연산자의 LOAD 펑션 또는 메모리에 피연산자의 STORE 펑션으로 이루어져 있는 것인 컴퓨터 판독가능 매체.
  14. 제10항에 있어서, 상기 제2 명령어 세트의 명령어를 실행하는 단계가 2개의 피연산자에 기초하여 대응하는 연산 코드 정의 펑션을 수행하는 단계, 및 결과를 저장하는 단계를 포함하며, 상기 대응하는 연산 코드 정의 펑션은 ROTATE THEN INSERT SELECTED BITS 펑션으로 이루어져 있고,
    상기 ROTATE THEN INSERT SELECTED BITS 펑션은
    명령어 지정 양(instruction specified amount)만큼 소스 피연산자(source operand)를 회전시키는 단계, 및
    상기 회전된 소스 피연산자의 선택된 부분을 대상 피연산자(target operand)의 선택된 부분에 삽입하는 단계를 포함하는 것인 컴퓨터 판독가능 매체.
  15. 제10항에 있어서, 대용량 GPR 모드에서 동작하는 운영 체제를 지원하는 단계를 포함하고, 소용량 GPR 모드에서 실행 중인 응용 프로그램에 대한 컨텍스트 전환 동안에 상기 대용량 GPR이 저장되고 복원되는 것인 컴퓨터 판독가능 매체.
  16. 제15항에 있어서, 상기 제3 명령어 세트가 상기 제1 명령어 세트 및 상기 제2 명령어 세트를 포함하는 것인 컴퓨터 판독가능 매체.
  17. 제1 수의 대용량 GPR(General Purpose Register, 범용 레지스터)을 가지는 컴퓨터에서 프로그램의 명령어에 의해 이용가능한 GPR의 유효 수(effective number)를 확장하는 컴퓨터 시스템으로서,
    각각의 명령어는 연산 코드(opcode) 및 대응하는 GPR을 지정하는 하나 이상의 GPR 필드를 포함하고, 각각의 대용량 GPR은 제1 부분 및 제2 부분을 포함하며, 상기 대용량 GPR은 제1 부분으로 이루어진 제1 소용량 GPR(small GPR) 및 제2 부분으로 이루어진 제2 소용량 GPR을 포함하고,
    상기 컴퓨터 시스템은, 메모리와, 상기 메모리와 통신하는 프로세서 - 상기 프로세서는 메모리로부터 명령어를 페치하기 위한 명령어 페치 구성요소와 페치된 명령어를 실행하기 위한 하나 이상의 실행 구성요소를 포함함 - 를 포함하고,
    상기 컴퓨터가 소용량 GPR 모드에 있는 것에 응답하여,
    a) 상기 제1 소용량 GPR에 액세스하는 제1 명령어 세트의 명령어를 실행하는 단계 - 이 실행하는 단계는 상기 제1 소용량 GPR에 기초하여 메모리 피연산자에 액세스하거나 제1 소용량 GPR 피연산자에 액세스하기 위한 메모리 주소를 생성하는 단계를 포함하고, 상기 제1 소용량 GPR은 상기 제1 부분으로 이루어져 있음 -, 및
    b) 상기 제2 소용량 GPR에 액세스하는 제2 명령어 세트의 명령어를 실행하는 단계 - 이 실행하는 단계는 상기 제2 소용량 GPR에 기초하여 메모리 피연산자에 액세스하거나 제2 소용량 GPR 피연산자에 액세스하기 위한 메모리 주소를 생성하는 단계를 포함하고, 상기 제2 소용량 GPR은 상기 제2 부분으로 이루어져 있음 - 를 수행하는 단계, 및
    상기 컴퓨터가 대용량 GPR 모드에 있는 것에 응답하여,
    제3 명령어 세트의 명령어를 실행하는 단계 - 이 실행하는 단계는 상기 대용량 GPR에 기초하여 메모리 피연산자에 액세스하거나 상기 제1 부분 및 상기 제2 부분을 포함하는 대용량 GPR 피연산자에 액세스하기 위한 메모리 주소를 생성하는 단계를 포함함 - 를 포함하는 방법을 수행하도록 구성된 컴퓨터 시스템.
  18. 제17항에 있어서, 상기 소용량 GPR 모드가 24 비트 어드레싱 모드 또는 31 비트 어드레싱 모드 중 하나에 있는 것인 컴퓨터 시스템.
  19. 제18항에 있어서, 상기 제1 부분이 32 비트이고, 상기 제2 부분이 32 비트이며, 상기 제3 부분이 64 비트인 컴퓨터 시스템.
  20. 제18항에 있어서, 상기 제2 명령어 세트의 명령어를 실행하는 단계가 2개의 피연산자에 기초하여 대응하는 연산 코드 정의 펑션(opcode defined function)을 수행하는 단계, 및 결과를 저장하는 단계를 포함하며, 상기 대응하는 연산 코드 정의 펑션은 2개의 피연산자의 ADD 펑션 또는 2개의 피연산자의 COMPARE 펑션으로 이루어져 있는 것인 컴퓨터 시스템.
  21. 제18항에 있어서, 상기 제2 명령어 세트의 명령어를 실행하는 단계가 2개의 피연산자에 기초하여 대응하는 연산 코드 정의 펑션을 수행하는 단계, 및 결과를 저장하는 단계를 포함하며, 상기 대응하는 연산 코드 정의 펑션은 메모리로부터의 피연산자의 LOAD 펑션 또는 메모리에 피연산자의 STORE 펑션으로 이루어져 있는 것인 컴퓨터 시스템.
  22. 제18항에 있어서, 상기 제2 명령어 세트의 명령어를 실행하는 단계가 2개의 피연산자에 기초하여 대응하는 연산 코드 정의 펑션을 수행하는 단계, 및 결과를 저장하는 단계를 포함하며, 상기 대응하는 연산 코드 정의 펑션은 ROTATE THEN INSERT SELECTED BITS 펑션으로 이루어져 있고,
    상기 ROTATE THEN INSERT SELECTED BITS 펑션은
    명령어 지정 양(instruction specified amount)만큼 소스 피연산자(source operand)를 회전시키는 단계, 및
    상기 회전된 소스 피연산자의 선택된 부분을 대상 피연산자(target operand)의 선택된 부분에 삽입하는 단계를 포함하는 것인 컴퓨터 시스템.
  23. 제18항에 있어서, 대용량 GPR 모드에서 동작하는 운영 체제를 지원하는 단계를 포함하고, 소용량 GPR 모드에서 실행 중인 응용 프로그램에 대한 컨텍스트 전환 동안에 상기 대용량 GPR이 저장되고 복원되는 것인 컴퓨터 시스템.
  24. 제23항에 있어서, 상기 제3 명령어 세트가 상기 제1 명령어 세트 및 상기 제2 명령어 세트를 포함하는 것인 컴퓨터 시스템.
KR1020110050027A 2010-06-22 2011-05-26 명령어가 이용할 수 있는 범용 레지스터의 수를 확장하는 상위-워드 기능 KR101464808B1 (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US12/820,735 US8914619B2 (en) 2010-06-22 2010-06-22 High-word facility for extending the number of general purpose registers available to instructions
US12/820,735 2010-06-22

Publications (2)

Publication Number Publication Date
KR20110139098A KR20110139098A (ko) 2011-12-28
KR101464808B1 true KR101464808B1 (ko) 2014-11-27

Family

ID=43334493

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020110050027A KR101464808B1 (ko) 2010-06-22 2011-05-26 명령어가 이용할 수 있는 범용 레지스터의 수를 확장하는 상위-워드 기능

Country Status (14)

Country Link
US (2) US8914619B2 (ko)
EP (1) EP2430521A1 (ko)
JP (2) JP5379825B2 (ko)
KR (1) KR101464808B1 (ko)
CN (1) CN102314333A (ko)
AU (1) AU2010355817B2 (ko)
BR (1) BRPI1103516B1 (ko)
CA (1) CA2786049C (ko)
IL (1) IL223587A (ko)
MX (1) MX2012014533A (ko)
RU (1) RU2562430C2 (ko)
SG (1) SG186078A1 (ko)
WO (1) WO2011160726A1 (ko)
ZA (1) ZA201209644B (ko)

Families Citing this family (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8914619B2 (en) 2010-06-22 2014-12-16 International Business Machines Corporation High-word facility for extending the number of general purpose registers available to instructions
US8635430B2 (en) 2010-06-23 2014-01-21 International Business Machines Corporation Translation of input/output addresses to memory addresses
US8468284B2 (en) 2010-06-23 2013-06-18 International Business Machines Corporation Converting a message signaled interruption into an I/O adapter event notification to a guest operating system
US8572635B2 (en) 2010-06-23 2013-10-29 International Business Machines Corporation Converting a message signaled interruption into an I/O adapter event notification
US8615645B2 (en) 2010-06-23 2013-12-24 International Business Machines Corporation Controlling the selectively setting of operational parameters for an adapter
US9696975B2 (en) * 2010-09-03 2017-07-04 International Business Machines Corporation Allocating register halves independently
US9317285B2 (en) * 2012-04-30 2016-04-19 Apple Inc. Instruction set architecture mode dependent sub-size access of register with associated status indication
US20130339656A1 (en) * 2012-06-15 2013-12-19 International Business Machines Corporation Compare and Replace DAT Table Entry
US9639369B2 (en) 2013-11-11 2017-05-02 Apple Inc. Split register file for operands of different sizes
US10671391B2 (en) * 2014-02-25 2020-06-02 MIPS Tech, LLC Modeless instruction execution with 64/32-bit addressing
US20150293767A1 (en) * 2014-04-11 2015-10-15 Fujitsu Limited Rotating register file with bit expansion support
WO2016034087A1 (en) * 2014-09-03 2016-03-10 Mediatek Inc. Method for handling mode switching with less unnecessary register data access and related non-transitory machine readable medium
CN107145334B (zh) * 2017-04-26 2020-10-09 龙芯中科技术有限公司 常量获取方法、装置、处理器及计算机可读存储介质
WO2022067510A1 (zh) * 2020-09-29 2022-04-07 华为技术有限公司 一种处理器、处理方法及相关设备
US12014198B2 (en) 2021-03-25 2024-06-18 International Business Machines Corporation Running smaller memory-address width program code in a larger memory-address width address space

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20000048531A (ko) * 1996-09-23 2000-07-25 맥케이 데이비드 니겔 데이터 처리장치에서의 입력 오퍼랜드 제어
KR20030024850A (ko) * 2000-08-09 2003-03-26 어드밴스드 마이크로 디바이시즈, 인코포레이티드 확장 레지스터 모드에서 확장 레지스터 세트를 액세스하는중앙 처리 장치
US7284092B2 (en) 2004-06-24 2007-10-16 International Business Machines Corporation Digital data processing apparatus having multi-level register file

Family Cites Families (29)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP3432532B2 (ja) * 1992-08-03 2003-08-04 株式会社日立製作所 データ処理装置
JP2686011B2 (ja) * 1992-01-27 1997-12-08 富士通株式会社 レジスタ制御装置
WO1994027215A1 (en) 1993-05-07 1994-11-24 Apple Computer, Inc. Method for decoding guest instructions for a host computer
US5546557A (en) 1993-06-14 1996-08-13 International Business Machines Corporation System for storing and managing plural logical volumes in each of several physical volumes including automatically creating logical volumes in peripheral data storage subsystem
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
GB2289353B (en) * 1994-05-03 1997-08-27 Advanced Risc Mach Ltd Data processing with multiple instruction sets
US5551013A (en) 1994-06-03 1996-08-27 International Business Machines Corporation Multiprocessor for hardware emulation
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
TW343318B (en) * 1996-09-23 1998-10-21 Advanced Risc Mach Ltd Register addressing in a data processing apparatus
GB2317467B (en) 1996-09-23 2000-11-01 Advanced Risc Mach Ltd Input operand control in data processing systems
US5838960A (en) 1996-09-26 1998-11-17 Bay Networks, Inc. Apparatus for performing an atomic add instructions
US5864703A (en) 1997-10-09 1999-01-26 Mips Technologies, Inc. Method for providing extended precision in SIMD vector arithmetic operations
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
US6343356B1 (en) * 1998-10-09 2002-01-29 Bops, Inc. Methods and apparatus for dynamic instruction controlled reconfiguration register file with extended precision
US6463582B1 (en) 1998-10-21 2002-10-08 Fujitsu Limited Dynamic optimizing object code translator for architecture emulation and dynamic optimizing object code translation method
US6857061B1 (en) * 2000-04-07 2005-02-15 Nintendo Co., Ltd. Method and apparatus for obtaining a scalar value directly from a vector register
JP3659252B2 (ja) 2003-03-28 2005-06-15 セイコーエプソン株式会社 ベクトルデータのアドレス参照方法およびベクトルプロセッサ
US7627723B1 (en) 2006-09-21 2009-12-01 Nvidia Corporation Atomic memory operators in a parallel processor
US7840783B1 (en) * 2007-09-10 2010-11-23 Netlogic Microsystems, Inc. System and method for performing a register renaming operation utilizing hardware which is capable of operating in at least two modes utilizing registers of multiple widths
US8694758B2 (en) 2007-12-27 2014-04-08 Intel Corporation Mixing instructions with different register sizes
US20090182982A1 (en) * 2008-01-11 2009-07-16 International Business Machines Corporation Rotate Then Insert Selected Bits Facility and Instructions Therefore
US20090182983A1 (en) * 2008-01-11 2009-07-16 International Business Machines Corporation Compare and Branch Facility and Instruction Therefore
US7877582B2 (en) * 2008-01-31 2011-01-25 International Business Machines Corporation Multi-addressable register file
US20100100692A1 (en) 2008-10-21 2010-04-22 International Business Machines Corporation Exploiting Register High-Words
US8386754B2 (en) * 2009-06-24 2013-02-26 Arm Limited Renaming wide register source operand with plural short register source operands for select instructions to detect dependency fast with existing mechanism
US8850166B2 (en) 2010-02-18 2014-09-30 International Business Machines Corporation Load pair disjoint facility and instruction therefore
US8438340B2 (en) 2010-02-18 2013-05-07 International Business Machines Corporation Executing atomic store disjoint instructions
US8914619B2 (en) 2010-06-22 2014-12-16 International Business Machines Corporation High-word facility for extending the number of general purpose registers available to instructions

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20000048531A (ko) * 1996-09-23 2000-07-25 맥케이 데이비드 니겔 데이터 처리장치에서의 입력 오퍼랜드 제어
KR20030024850A (ko) * 2000-08-09 2003-03-26 어드밴스드 마이크로 디바이시즈, 인코포레이티드 확장 레지스터 모드에서 확장 레지스터 세트를 액세스하는중앙 처리 장치
US7284092B2 (en) 2004-06-24 2007-10-16 International Business Machines Corporation Digital data processing apparatus having multi-level register file

Also Published As

Publication number Publication date
IL223587A (en) 2017-07-31
RU2012149004A (ru) 2014-05-27
US20110314260A1 (en) 2011-12-22
AU2010355817A1 (en) 2012-07-05
CN102314333A (zh) 2012-01-11
US9459872B2 (en) 2016-10-04
EP2430521A1 (en) 2012-03-21
AU2010355817B2 (en) 2014-04-03
MX2012014533A (es) 2013-01-29
JP5379825B2 (ja) 2013-12-25
BRPI1103516A2 (pt) 2016-05-17
WO2011160726A1 (en) 2011-12-29
US8914619B2 (en) 2014-12-16
BRPI1103516B1 (pt) 2021-01-12
JP2012009020A (ja) 2012-01-12
CA2786049A1 (en) 2011-12-29
KR20110139098A (ko) 2011-12-28
US20130117545A1 (en) 2013-05-09
CA2786049C (en) 2018-02-13
JP2013242918A (ja) 2013-12-05
RU2562430C2 (ru) 2015-09-10
JP5657074B2 (ja) 2015-01-21
ZA201209644B (en) 2013-08-28
SG186078A1 (en) 2013-01-30

Similar Documents

Publication Publication Date Title
KR101464808B1 (ko) 명령어가 이용할 수 있는 범용 레지스터의 수를 확장하는 상위-워드 기능
US9250904B2 (en) Modify and execute sequential instruction facility and instructions therefor
KR101464809B1 (ko) 두 개의 피연산자에 대해 연산을 수행하고 후속적으로 피연산자의 원래 값을 저장시키는 명령어
US9135004B2 (en) Rotate then operate on selected bits facility and instructions therefor
US7870339B2 (en) Extract cache attribute facility and instruction therefore
US20090182983A1 (en) Compare and Branch Facility and Instruction Therefore
US20090182988A1 (en) Compare Relative Long Facility and Instructions Therefore
US9280480B2 (en) Extract target cache attribute facility and instruction therefor
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: 20171026

Year of fee payment: 4

FPAY Annual fee payment

Payment date: 20191029

Year of fee payment: 6