УВЕЛИЧЕНИЕ ЧИСЛА ДОСТУПНЫХ ДЛЯ КОМАНД РЕГИСТРОВ ОБЩЕГО НАЗНАЧЕНИЯ
INCREASING NUMBER OF GENERAL PURPOSE REGISTERS AVAILABLE TO INSTRUCTIONS

Настоящее изобретение относится к компьютерным системам, точнее, к функциональным возможностям команд процессора компьютерной системы.
Товарные знаки: IBM является зарегистрированным товарным знаком International Business Machines Corporation (Армонк, штат Нью-Йорк, США). S/390, Z900, z990 и z10, а также названия других продуктов, используемые в описании, могут являться зарегистрированными товарными знаками или названиями продуктов International Business Machines Corporation или других компаний.
Начиная с появившихся в 60-х годах машин, известных как IBM System 360, и до настоящего времени усилиями множества высокоодаренных инженеров IBM была создана особая архитектура, которая получила известность как "мэйнфрейм" в силу своей неотъемлемой принадлежности к вычислительной системе и принципы работы которой определяют архитектуру машины путем описания команд, которые могут выполняться путем реализации в "мэйнфрейме" созданных изобретателями IBM команд, которые с учетом их существенной роли в течение многих лет включены в руководство IBM Principles of Operation. Восьмое издание руководства IBM z/Architecture Principles of Operation, опубликованное в феврале 2009 г., стало стандартным справочным материалом SA22-7832-07 и включено в описание серверов на основе мэйнфреймов IBM z10, включая серверы корпоративного класса на основе системы IBM z10.
На фиг. 1А представлены характерные элементы известной из техники главной компьютерной системы 50. В компьютерной системе также могут применяться другие варианты размещения элементов, которые хорошо известны из техники. Характерный главный компьютер 50 содержит один или несколько ЦП 1, связанных с основным запоминающим устройством (памятью 2 компьютера), а также интерфейсы ввода-вывода для сопряжения с запоминающими устройствами 11 и подключения к сетям 10 для связи с другими компьютерами или SAN и т.п. ЦП 1 совместим с архитектурой, содержащей структурированную систему команд и структурированные функциональные возможности. ЦП 1 может осуществлять динамическую трансляцию 3 адреса (DAT) с целью преобразования адресов программ (виртуальных адресов) в действительный адрес памяти. DAT обычно содержит буфер 7 быстрого преобразования адреса (TLB) для кэширования преобразований, чтобы при последующих доступах к блоку памяти 2 компьютера не требовалась задержка трансляции адреса. Обычно между памятью 2 компьютера и процессором 1 используется кэш-память 9. Кэш-память 9 может являться иерархической и состоящей из кэша большой емкости, доступного для нескольких ЦП, и более быстродействующих кэшей (низкого уровня) меньшей емкости между кэшем большой емкости и каждым ЦП. В некоторых случаях реализации кэши низкого уровня разделены на отдельные кэши низкого уровня для выборки команд и доступа к данным. В одном из вариантов осуществления блок 4 выборки команд вызывает из памяти 2 команду посредством кэш-памяти 9. Команда декодируется в блоке 6 декодирования команд и отправляется (с другими командами в некоторых вариантах осуществления) в блоки 8 выполнения команд. Обычно используется несколько блоков 8 выполнения команд, например, блок выполнения арифметических команд, блок выполнения команд с плавающей точкой и блок выполнения команд перехода. Команда выполняется блоком, который в зависимости от необходимости осуществляет доступ к операндам из определяемых командами регистров или памяти. Если доступ (загрузка или сохранение) к операнду должен осуществляться из памяти 2, блок 5 загрузки/сохранения обычно обрабатывает процедуру доступа под управлением выполняемой команды. Команды могут выполняться в аппаратных схемах или во внутреннем микрокоде (аппаратно-программном обеспечении) или с использованием сочетания того и другого.
На фиг. 1Б проиллюстрирован один из примеров известной из техники главной компьютерной системы 21 эмуляции, которая эмулирует главную компьютерную систему 50, имеющую главную архитектуру. Главным центральным процессором (ЦП) 1 в главной компьютерной системе 21 эмуляции является главный процессор (или виртуальный главный процессор) эмуляции, представляющий собой процессор 27 эмуляции со структурой собственных команд, отличающейся от структуры команд процессора 1 главного компьютера 50. Главная компьютерная система 21 эмуляции имеет память 22, доступную для процессора 27 эмуляции. В примере осуществления память 22 разделена на память 2 главного компьютера и память 23 программ эмуляции. Память 2 главного компьютера доступна для программ главного компьютера 21 эмуляции в зависимости от архитектуры главного компьютера. Процессор 27 эмуляции выполняет собственные команды структурированной системы команд, структура которых отличается от структуры команд эмулируемого процессора 1 и которые извлекаются из памяти 23 программ эмуляции, и может осуществлять выборку главной команды для выполнения из программы в памяти 2 главного компьютера путем применения одной или нескольких команд из программы контроля последовательности и выборки/декодирования (Sequence & Access/Decode), которая может декодировать выбранную главную команду(-ы) и определять программу выполнения собственных команд с целью эмуляции функции выбранной главной команды. Другие средства, которые предусмотрены в архитектуре главной компьютерной системы 50, могут эмулироваться программами структурированных средств (Architected Facilities Routines), включая такие средства, как, например, регистры общего назначения, управляющие регистры, поддержка подсистемы динамической трансляции адреса и ввода-вывода и кэш-память процессора. Программы эмуляции также могут использовать функции, доступные в процессоре 27 эмуляции (такие как регистры общего назначения и динамическая трансляция виртуальных адресов) для повышения производительности программ эмуляции. Также может быть предусмотрено особое программное обеспечение и механизмы разгрузки, облегчающие процессору 27 эмуляцию функции главного компьютера 50.
В мэйнфрейме структурированные машинные команды используются программаторами, обычно современными программаторами на языке "С" посредством компилирующего приложения. Эти команды, хранящиеся в запоминающей среде, могут выполняться в собственной системе команд сервера IBM на основе z/Architecture или в качестве альтернативы в машинах на основе других архитектур. Они могут эмулироваться в существующих и будущих серверах на основе мэйнфреймов IBM и в других машинах IBM (например, серверах pSeries и xSeries). Они могут выполняться в операционной системе Linux разнообразными машинами, использующими аппаратное обеспечение производства IBM, Intel, AMD™, Sun Microsystems и других компаний. Помимо выполнения этим аппаратным обеспечением на основе системы Z/Architecture, может использоваться Linux, а также машины, использующие эмуляцию, как описано на сайтах http://www.turbohercules.com, http://www.hercules-390.org и http://www.funsoft.com. В режиме эмуляции эмулирующее программное обеспечение выполняется собственным процессором, эмулирующим архитектуру эмулируемого процессора.
Собственный процессор 27 обычно выполняет эмулирующее программное обеспечение 23, представляющее собой аппаратно-программное обеспечение или собственную операционную систему для эмуляции эмулируемого процессора. Эмулирующее программное обеспечение 23 отвечает за выборку и выполнение команд архитектуры эмулируемого процессора. Эмулирующее программное обеспечение 23 поддерживает счетчик эмулируемых команд для слежения за границами команд. Эмулирующее программное обеспечение 23 может осуществлять выборку одной или нескольких эмулируемых машинных команд за один раз и преобразование одной или нескольких эмулируемых машинных команд в соответствующую группу собственных машинных команд для выполнения собственным процессором 27. Эти преобразованные команды могут помещаться в кэш, что позволяет ускорять преобразование. Тем не менее, эмулирующее программное обеспечение должно поддерживать правила архитектуры эмулируемого процессора с тем, чтобы обеспечивать правильную работу операционных систем и приложений, написанных для эмулируемого процессора. Кроме того, эмулирующее программное обеспечение должно обеспечивать ресурсы, указанные архитектурой эмулируемого процессора 1, включая без ограничения управляющие регистры, регистры общего назначения, регистры с плавающей точкой, функцию динамической трансляции адреса, включая таблицы сегментов и таблицы страниц, например, механизмы прерывания, механизмы переключения контекста, часы истинного времени (TOD) и структурированные интерфейсы с подсистемами ввода-вывода с тем, чтобы операционная система или прикладная программа, рассчитанная на работу в эмулируемом процессоре, могла быть запущена в собственном процессоре, имеющем эмулирующее программное обеспечение.
Декодируется конкретная эмулируемая команда, и вызывается подпрограмма для выполнения функции отдельной команды. Функция 23 эмулирующего программного обеспечения, эмулирующая функцию эмулируемого процессора 1, реализуется, в подпрограмме или драйвере на языке "С" или каким-либо другим способом обеспечения драйвера для конкретного аппаратного обеспечения, доступным для специалистов в данной области техники, ознакомившихся в описанием предпочтительного варианта осуществления. В различных патентах, в которых предложена эмуляция программного и аппаратного обеспечения, включая без ограничения патент US 5551013 под названием "Multiprocessor for hardware emulation", выданный на имя Beausoleil и др., патент US 6009261 под названием "Preprocessing of stored target routines for emulating incompatible instructions on a target processor", выданный на имя Scalzi и др.; патент US 5574873 под названием "Decoding guest instruction to directly access emulation routines that emulate the guest instructions", выданный на имя Davidian и др.; патент US 6308255 под названием "Symmetrical multiprocessing bus and chipset used for coprocessor support allowing non-native code to run in a system", выданный на имя Gorishek и др.; патент US 6463582 под названием "Dynamic optimizing object code translator for architecture emulation and dynamic optimizing object code translation method", выданный на имя Lethin и др.; патент US 5790825 под названием "Method for emulating guest instructions on a host computer through dynamic recompilation of host instructions", выданный на имя Eric Traut, проиллюстрированы разнообразные известные способы эмуляции формата команд, структурированного для отличающейся машины, в целевой машине, доступные для специалистов в данной области техники, а также используемые ими промышленные средства программного обеспечения.
В публикации заявки US 2009/0249039 А1 от 1 октября 2009 г. (заявитель -Hook и др.) под названием" Providing Extended Precision in SIMD Vector Arithmetic Operations" предложена повышенная точность арифметических операций SIMD в процессоре, имеющем регистровый файл и аккумулятор. В первый и второй векторные регистры, соответственно, загружаются первый набор элементов данных и второй набор элементов данных. Каждый элемент данных содержит N разрядов. Затем из памяти вызывается команда арифметической операции. Команда арифметической операции декодируется. Затем из регистрового файла считываются первый векторный регистр и второй векторный регистр. В первом и втором векторных регистрах выполняется команда арифметической операции с соответствующими элементами данных. Затем полученный в результате выполнения элемент записывается в аккумулятор. После этого полученный элемент трансформируется в N-разрядный элемент и записывается в третий регистр для последующего оперирования или хранения в памяти. Трансформации полученного элемента может включать, например, округление, фиксацию и/или сдвиг элемента.
Существует потребность в командах с новыми функциональными возможностями, согласующимися с существующей архитектурой, уменьшающими зависимость от ресурсов архитектуры, таких как регистры общего назначения, и улучшающими функциональные возможности и производительность версий программного обеспечения, в которых применяется новая команда.
В руководстве International Business Machines Corporation под названием z/Architecture Principles of Operation, SA22-7832-07, опубликованном в феврале 2009 г., описан порядок обработки сигналов с переключением между (24- или 31-разрядным) режимом архитектуры ESA/390 и (64-разрядным) режимом z/Architecture. Команда, оперирующая в режиме ESA/390 с двоичными разрядами 0-31 32-битового разряда, вместо этого оперирует в z/Architecture с двоичными разрядами 32-63 64-разрядного регистра. В режиме ESA/390 не используются разряды 0-31 64-разрядных регистров z/Architecture.
В заявке WO 98/12627 А1 описаны слова команды, имеющие поле разрядов исходного регистра с указанием исходного регистра множества 32-разрядных регистров, в которых хранится слово данных входных операндов. В слове команды также содержится разряд размера, указывающий, должны ли считываться все 32 разряда регистра или только 16 младших разрядов или 16 старших разрядов.
В соответствии с изобретением, на основе функции старшего слова (High-Word) в компьютере, имеющем первое число больших регистров общего назначения (РОН), увеличено эффективное число РОН, доступных для команд программы, при этом каждая команда содержит код операции и одно или несколько полей РОН для указания соответствующих РОН, каждый большой РОН содержит первую часть и вторую часть, упомянутые большие РОН содержат первые малые РОН, состоящие из первых частей, и вторые малые РОН, состоящие из вторых частей, компьютер имеет режим малых РОН, в котором в качестве основанных на РОН адресов операндов в основной памяти используются только операнды первых малых РОН, и режим больших РОН, в котором в качестве основанных на РОН адресов операндов в основной памяти используются операнды, перекрывающие как первые малые РОН, так и вторые малые РОН. При этом способ увеличения эффективного числа РОН, доступных для команд программы в компьютере, включает: (а) выполняемое на основании слова состояния программы определение того, находится ли компьютер в режиме малых РОН или в режиме больших РОН, причем в режиме малых РОН разрешается выполнение программ, написанных для компьютера с архитектурой малых РОН, в которой адреса памяти и регистровые операнды ограничены размером малого РОН, (б) выполняемое, если функция старшего слова на компьютере включена (разрешена), блокирование выполнения второго набора команд, причем в компьютере имеется поле, управляющее включением или отключением функции старшего слова, (в) выполняемое при нахождении компьютера в режиме малых РОН выполнение команд из первого набора команд, предназначенного для доступа к первым малым РОН, включающее генерирование адресов памяти для доступа к хранимым в памяти операндам на основании первых малых РОН или доступа к операндам первых малых РОН, состоящих из упомянутых первых частей, и выполняемое при включенной функции старшего слова выполнение команд из второго набора команд, предназначенного для доступа ко вторым малым РОН, включающее генерирование адресов памяти для доступа к хранимым в памяти операндам на основании вторых малых РОН или доступа к операндам вторых малых РОН, состоящих из упомянутых вторых частей, и (г) выполняемое при нахождении компьютера в режиме больших РОН выполнение команд из третьего набора команд, включающее генерирование адресов памяти для доступа к хранимым в памяти операндам на основании больших РОН или доступа к операндам больших РОН, содержащих упомянутые первые части и упомянутые вторые части.
В одном из вариантов осуществления, режим малых РОН предусматривает нахождение в режиме 24-разрядной адресации или режиме 31-разрядной адресации.
В одном из вариантов осуществления, первая часть содержит 32 разряда, вторая часть содержит 32 разряда, а третья часть содержит 64 разряда.
В одном из вариантов осуществления выполнение команды из второго набора команд включает в себя выполнение заданной соответствующим кодом операции функции на основании двух операндов и сохранение результата, при этом заданная соответствующим кодом операции функция состоит из функции сложения двух операндов или функции сравнения двух операндов.
В одном из вариантов осуществления выполнение команды из второго набора команд включает в себя выполнение заданной соответствующим кодом операции функции на основании двух операндов и сохранение результата, при этом заданной соответствующим кодом операции функцией является функция загрузки операнда из памяти или функция сохранения операнда в памяти.
В одном из вариантов осуществления выполнение команды из второго набора команд включает в себя выполнение заданной соответствующим кодом операции функции на основании двух операндов и сохранение результата, при этом заданной соответствующим кодом операции функцией является функция поворота с последующей вставкой выбранных разрядов (ROTATE THEN INSERT SELECTED BITS), включающая поворот исходного операнда на заданную командой величину и вставку выбранной части повернутого исходного операнда в выбранную часть целевого операнда.
В одном из вариантов осуществления поддерживается операционная система, действующая в режиме больших РОН, при этом большие РОН сохраняются и восстанавливаются при переключениях контекста приложений, действующих в режиме малых РОН.
В одном из вариантов осуществления операционная система действует в режиме больших РОН, при этом большие РОН сохраняются и восстанавливаются при переключениях контекста приложений, действующих в режиме малых РОН.
Перечисленные, а также дополнительные задачи, признаки и выгодные варианты осуществления станут ясны из следующего далее описания.
Далее лишь в качестве примера будут описаны варианты осуществления изобретения со ссылкой на сопровождающие чертежи, на которых:
на фиг. 1А показана блок-схема, иллюстрирующая один из примеров главной компьютерной системы,
на фиг. 1Б - блок-схема, иллюстрирующая один из примеров эмулирующей главной компьютерной системы,
на фиг. 1В - блок-схема, иллюстрирующая один из примеров компьютерной системы,
на фиг. 2 - блок-схема, иллюстрирующая один из примеров компьютерной сети,
на фиг. 3 - блок-схема, иллюстрирующая элементы компьютерной системы,
на фиг. 4А-4В - подробные элементы компьютерной системы,
на фиг. 5А-5Е - формат машинных команд компьютерной системы,
на фиг. 6 - один из примеров большого РОН,
на фиг. 7А-7Б - один из примеров потока согласно варианту осуществления старшего слова, и
на фиг. 8 - один из примеров потока переключений контекста.
Варианты осуществления могут быть реализованы на практике посредством программного обеспечения (иногда называемого лицензионным внутренним кодом, аппаратно-программным обеспечением, микрокодом, милликодом, пикокодом и т.п., что во всех случаях согласуется с настоящим изобретением). Как показано на фиг. 1А, обычно процессор, также известный как ЦП (центральный процессор) 1 системы 50, получает доступ к программному коду системы программного обеспечения, в котором воплощено настоящее изобретение, посредством долговременных запоминающих сред 11, таких как ПЗУ на компакт-дисках, накопитель на магнитной ленте или накопитель на жестких дисках. Программный код системы программного обеспечения может быть воплощен в любой из разнообразных известных сред для применения с системой обработки данных, такой как дискета, накопитель на жестких дисках или ПЗУ на компакт-дисках. Код может распределяться в таких средах или может распределяться пользователям из памяти 2 компьютера или запоминающего устройства одной компьютерной системы по сети 10 другим компьютерным системам для применения пользователями таких других систем.
В качестве альтернативы, программный код может быть воплощен в памяти 2 с возможностью доступа к нему для процессора 1, использующего процессорную шину. В таком программном коде содержится операционная система, которая управляет функцией и взаимодействием различных узлов вычислительной машины и одной или нескольких прикладных программ. Обычно подкачка страниц программного кода осуществляется из плотных запоминающих сред 11 в быстродействующее запоминающее устройство 2, в котором он доступен для обработки процессором 1. Методы и способы воплощения программного кода системы программного обеспечения в памяти, в физических средах и/или распределения программного кода посредством сетей хорошо известны и не будут дополнительно рассматриваться в описании. Программный код, созданный и хранящийся в материальной среде (включая без ограничения такие машиночитаемые носители информации, как модули электронной памяти (ОЗУ), флэш-память, компакт-диски (CD), DVD, магнитную ленту и т.п.) часто именуется "компьютерным программным продуктом". Содержащая компьютерный программный продукт среда обычно может считываться устройством обработки данных предпочтительно в компьютерной системе для выполнения устройством обработки данных.
На фиг.1В проиллюстрирована характерная рабочая станция или аппаратная серверная система. В показанную на фиг.1В систему 100 входит характерная компьютерная система 101, такая как персональный компьютер, рабочая станция или сервер, включая необязательные периферийные устройства. Рабочая станция 101 имеет один или несколько процессоров 106 и шину для соединения процессора(-ов) 106 и других компонентов системы 101 и обеспечения связи между ними известными способами. Шина соединяет процессор 106 с памятью 105 и долговременным запоминающим устройством 107, которое может содержать накопитель на жестких дисках (например, включая любое из следующего: магнитный носитель, компакт-диск, цифровой многофункциональный диск и флэш-память) или, например, накопитель на магнитной ленте. В систему 101 также может входить адаптер пользовательского интерфейса, который посредством шины соединяет микропроцессор 106 с одним или несколькими устройствами сопряжения, такими как клавиатура 104, мышь 103, принтер/сканер 110 и/или другие устройства сопряжения, которыми могут являться любое пользовательское устройство сопряжения, такое как сенсорный экран, дополнительная цифровая клавиатура и т.д. Шина посредством дисплейного адаптера также соединяет дисплей 102, такой как ЖК-дисплей или монитор с микропроцессором 106.
Система 101 может поддерживать связь с другими компьютерами или компьютерными сетями посредством сетевого адаптера, способного поддерживать связь 108 с сетью 109. Примерами сетевых адаптеров являются каналы связи, кольцевая сеть с эстафетным доступом, сеть Ethernet или модемы. В качестве альтернативы, рабочая станция 101 может поддерживать связь с использованием беспроводного интерфейса, такого как карта CDPD (сотовой системы передачи пакетов цифровых данных). Рабочая станция 101 может быть связана с другими такими компьютерами в локальной вычислительной сети (ЛВС) или глобальной вычислительной сети (ГВС), или рабочей станцией 101 может являться клиент, связанный отношениями клиент-сервер с другим компьютером и т.д. Все эти конфигурации, а также соответствующее коммуникационное оборудование и программное обеспечение известны из техники.
На фиг.2 проиллюстрирована сеть 200 обработки данных, в которой может быть реализован на практике один из вариантов осуществления. В сеть 200 обработки данных может входить множество отдельных сетей, таких как беспроводная сеть и проводная сеть, в каждую из которых может входить множество отдельных рабочих станций 101, 201, 202, 203, 204. Кроме того, как известно специалистам в данной области техники, в нее может входить одна или несколько ЛВС, в которую может входить множество интеллектуальных рабочих станций, связанных с главным процессором.
Как также показано на фиг.2, в сети также могут входить мэйнфреймы или серверы, такие как шлюз (клиент-сервер 206) или сервер приложений (удаленный сервер 208, который может осуществлять доступ к хранилищу данных, а также может быть доступен непосредственно с рабочей станции 205). Шлюз 206 служит точкой входа в каждую сеть 207. Шлюз необходим при подсоединении одного сетевого протокола к другому. Шлюз 206 предпочтительно может быть связан с другой сетью (например, сетью Интернет 207) линией связи. Шлюз 206 также может быть непосредственно связан с одной или несколькими рабочими станциями 101, 201, 202, 203, 204 с использованием линии связи. Шлюз может быть реализован с использованием сервера IBM eServer™ zSeries z10™ производства IBM Corp.
Доступ к программному коду системы программного обеспечения обычно осуществляет процессор 106 системы 101 посредством долговременных запоминающих сред 107, таких как ПЗУ на компакт-дисках, или накопитель на жестких дисках. Программный код системы программного обеспечения может быть воплощен в любой из разнообразных известных сред для применения с системой обработки данных, такой как дискета, накопитель на жестких дисках или ПЗУ на компакт-дисках. Код может распределяться в таких средах или может распределяться пользователям 210, 211 из памяти компьютера или запоминающего устройства одной компьютерной системы по сети другим компьютерным системам для применения пользователями таких других систем.
В качестве альтернативы, программный код 111 может быть воплощен в памяти 105 с возможностью доступа к нему для процессора 106 с использованием процессорной шины. В таком программном коде реализована операционная система, которая управляет функцией и взаимодействием различных узлов вычислительной машины и одной или нескольких прикладных программ 112. Обычно подкачка страниц программного кода осуществляется из плотных запоминающих сред 107 в быстродействующее запоминающее устройство 105, в котором он доступен для обработки процессором 106. Методы и способы воплощения программного кода системы программного обеспечения в памяти, в физических средах и/или распределения программного кода посредством сетей хорошо известны и не будут дополнительно рассматриваться в описании. Программный код, созданный и хранящийся в материальной среде (включая без ограничения модули электронной памяти (ОЗУ), флэш-память, компакт-диски, цифровые многофункциональные диски, магнитную ленту и т.п.) часто именуется "компьютерным программным продуктом". Содержащая компьютерный программный продукт среда обычно может считываться устройством обработки данных предпочтительно в компьютерной системе для выполнения устройством обработки данных.
Кэш, который является наиболее легкодоступным для процессора (обычно более быстродействующим и менее объемным, чем другие кэши процессора), представляет собой кэш низшего уровня (L1 или уровня 1), а основное запоминающее устройство (основная память) представляет собой кэш высшего уровня (L3 в случае 3 уровней). Кэш низшего уровня часто поделен кэш команд (I-кэш), в котором хранятся машинные команды для выполнения, и кэш данных (D-кэш), в котором хранятся операнды, хранимые в памяти.
На фиг.3 проиллюстрирован один из примеров осуществления процессора 106. Обычно с целью помещения в буфер блоков памяти и повышения производительности процессора используется один или несколько уровней кэша 303. Кэш 303 представляет собой высокоскоростной буфер, в котором в строках данных кэша хранятся данные в памяти, которые вероятно будут использоваться. Типичные строки данных кэша содержат 64, 128 или 256 байтов данных в памяти. Для кэширования команд и для кэширования данных часто используются раздельные кэши. Согласованность кэшей (синхронизация копий строк в памяти и в кэшах) часто обеспечивается различными алгоритмами слежения ("snoop"), хорошо известными из техники. Основное запоминающее устройство 105 процессорной системы часто называют кэшем. В процессорной системе, имеющей 4 уровня кэша 303, основное запоминающее устройство 105 иногда называют кэшем уровня 5 (L5), поскольку оно обычно является более быстродействующими и представляет собой лишь часть энергонезависимого запоминающего устройство (ЗУПД, ЗУ на ленте и т.д.), которое доступно для компьютерной системы. Основное запоминающее устройство 105 "кэширует" страницы данных, которые подкачиваются в основное запоминающее устройство 105 и откачиваются из него операционной системой.
Программный счетчик (счетчик команд) 311 отслеживает адрес текущей команды для выполнения. Счетчиком команд в процессоре на основе z/Architecture является 64-разрядным, при этом он может быть усечен до 31 или 24 разрядов с целью поддержки ранее существовавших ограничений адресации. Поскольку счетчик команд обычно воплощен в слове состояния программы (PSW) компьютера, оно сохраняется при переключении контекста.
Соответственно, выполняемая программа с показанием счетчика команд может прерываться, например, операционной системой (при переключении контекста из программной среды в среду операционной системы). PSW программы поддерживает показание счетчика команд, пока программа неактивна, а во время выполнения операционной системы используется счетчик команд (в PSW) операционной системы. Обычно показание счетчика команд приращивается на величину, равную числу байтов текущей команды. RISC-команды (на основе вычислений с сокращенным набором команд) обычно имеют фиксированную длину, тогда как CISC-команды (на основе вычислений с полным набором команд) обычно имеют переменную длину. Команды, используемые в системе IBM z/Architecture, являются CISC-командами, имеющими длину 2, 4 или 6 байтов. Показание счетчика 311 команд изменяется, например, в результате операции переключения контекста или операции выбранного перехода согласно команде перехода. При операции переключения контекста в слове состояния программы (PSW) сохраняется текущее показание счетчика команд вместе с другой информацией о состоянии выполняемой программы (такой как коды условий), и загружается новое показание счетчика команд, указывающее команду нового программного модуля для выполнения. Операция выбранного перехода выполняется, чтобы позволить программе принимать решения, или чтобы выполнять программный цикл путем загрузки в счетчик 311 команд результата команды перехода.
Обычно для выборки команд от имени процессора 106 применяется блок 305 выборки команд. Блок выборки осуществляет выборку "очередных последовательных команд", целевых команд из команд выбранного перехода или первых команд программы, следующей за переключением контекста. В современных блоках выборки команд часто применяют методы выборки с целью предварительной выборки команд по предположению, исходя из вероятности использования команд, предварительная выборка которых была осуществлена. Например, блок выборки может осуществлять выборку 16 байтов команды, содержащих очередную последовательную команду, и дополнительных байтов следующих далее команд.
Затем вызванные команды выполняются процессором 106. В одном из вариантов осуществления вызванная команда(-ы) передаются блоку 306 диспетчеризации блока выборки. Блок диспетчеризации декодирует команду(-ы) и пересылает информацию о декодированной команде(-ах) соответствующим блокам 307, 308, 310. Блок 307 выполнения обычно принимает информацию о декодированных арифметических командах от блока 305 выборки команд и выполняет арифметические операции с операндами в соответствии с содержащимся в команде кодом операции. Операнды предоставляются блоку 307 выполнения предпочтительно из памяти 105, структурированных регистров 309 или из непосредственного поля выполняемой команды. Сохраненные результаты выполнения хранятся в памяти 105, регистрах 309 или в другом машинном аппаратном обеспечении (таком как управляющие регистры, регистры PSW и т.п.).
Процессор 106 обычно имеет один или несколько блоков 307, 308, 310, выполнения функции команды. Как показано на фиг.4А, блок 307 выполнения посредством интерфейсной логической схемы 407 может поддерживать связь со структурированными регистрами 309 общего назначения, блоком 306 декодирования/диспетчеризации, блоком 310 загрузки/сохранения и другими процессорными блоками 401. В блоке 307 выполнения может применяться несколько регистровых схем 403, 404, 405 для хранения информации, с которой будет работать арифметическое логическое устройство (АЛУ) 402. АЛУ выполняет арифметические операции, такие как сложение, вычитание, умножение и деление, а также логические функции, такие как И, ИЛИ и исключающее ИЛИ, поворот и смещение. АЛУ предпочтительно поддерживает зависящие от конструкции специализированные операции. В других схемах могут обеспечиваться другие структурированные средства 408, включающие, например, коды условия и логическую схему поддержки восстановления. Обычно результат операции АЛУ хранится в схеме 406 выходного регистра, из которой он может пересылаться целому ряду других функций обработки. Хотя существует множество конструкций процессоров, настоящее описание имеет целью лишь обеспечить понимание одного из вариантов осуществления.
Например, команда сложения выполняется блоком 307 выполнения, обладающим арифметическими и логическими функциональными возможностями, а, например, команда с плавающей точкой выполняется блоком вычислений с плавающей точкой, обладающим специализированными возможностями работы с плавающей точкой. Блок выполнения предпочтительно работает с указанными командой операндами путем выполнения заданной кодом операции функции применительно к операндам. Например, команда сложения может выполняться блоком 307 выполнения применительно к операндам, обнаруженным в двух регистрах 309, указанных в регистровых полях команды.
Блок 307 выполнения выполняет арифметическое сложение двух операндов и сохраняет результат в третьем операнде, которым может являться третий регистр или один из двух исходных регистров. Блок выполнения предпочтительно использует арифметическое логическое устройство (АЛУ) 402, способное выполнять ряд логических функций, таких как смещение, поворот. И, ИЛИ и исключающее ИЛИ, а также ряд алгебраических функций, включая любые из следующих функций: сложение, вычитание, умножение, деление. Некоторые АЛУ 402 рассчитаны на скалярные операции, а некоторые - на операции с плавающей точкой. В зависимости от архитектуры данные могут иметь обратный порядок следования байтов (когда наименьший значимый байт соответствует старшему байтовому адресу) или прямой порядок следования байтов (когда наименьший значимый байт соответствует младшему байтовому адресу). В системе IBM z/Architecture используется обратный порядок следования байтов. В зависимости от архитектуры поля чисел со знаком могут быть представлены в виде прямого кода, дополнения до единицы или дополнения до двух. Число в форме дополнения до двух выгодно в том смысле, что АЛУ не требуется поддерживать возможность вычитания, поскольку при отрицательной или положительной величине дополнения до двух в АЛУ требуется только сложение. Числа обычно описаны в сокращенном виде, в котором 12-разрядное поле определяет адрес блока из 4096 байтов и обычно описано, например, в виде 4-килобайтового блока.
Трехрежимная адресация
Трехрежимная адресация означает способность переключения между режимами 24-разрядной, 31-разрядной и 64-разрядной адресации. Это переключение может осуществляться посредством:
старых команд перехода с сохранением и установки режима (BRANCH AND SAVE AND SET MODE) и перехода и установки режима (BRANCH AND SET MODE). Обе эти команды устанавливают режим 64-разрядной адресации, если разряд 63 регистра R2 общего назначения равен единице. Если разряд 63 равен нулю, команды устанавливают режим 24-разрядной или 31-разрядной адресации, если разряд 32 регистра равен нулю или единице, соответственно.
Новой команды установки режима адресации (SET ADDRESSING MODE) (SAM24, SAM31 и SAM64). Команда устанавливает режим 24-разрядной, 31-разрядной, или 64-разрядной адресации, заданный кодом операции кодом операции.
Трехрежимные команды
Влияние трехрежимной адресации на общие команды проявляется только в том, каким образом обрабатываются логические адреса запоминающих устройств, за исключением следующих случаев.
Команды перехода и возврата (BRANCH AND LINK), перехода с сохранением (BRANCH AND SAVE), перехода с сохранением и установки режима и относительного перехода с сохранением (BRANCH RELATIVE AND SAVE) помещают информацию в разряды 32-39 регистра R1 общего назначения как в ESA/390 в режиме 24-разрядной или 31-разрядной адресации или помещают разряды адреса в соответствующие разряды в режиме 64-разрядной адресации. Новая команда длительного относительного перехода с сохранением (BRANCH RELATIVE AND SAVE LONG) действует таким же образом.
В режиме 64-разрядной адресации команды перехода с сохранением и установки режима и перехода и установки режима помещают единицу в разряд 63 регистра R1 общего назначения. В режиме 24-разрядной или 31-разрядной адресации команда перехода с сохранением и установки режима устанавливает разряд 63 на ноль, а команда перехода и установки режима оставляет его без изменения.
Некоторые команды оставляют разряды 0-31 регистра общего назначения без изменения в режиме 24-разрядной или 31-разрядной адресации, но помещают или обновляют в них сведения об адресе или длине в режиме 64-разрядной адресации. Они перечислены в примечании к программированию на стр.7-7 ранее упомянутого руководства IBM Z/Architecture Principles of Operation и иногда именуются модальными командами.
Влияние на разряды 0-31 регистра общего назначения
Разряды 0-31 регистров общего назначения изменяются посредством команд двух типов. Командой первого типа является модальная команда (смотри предыдущий раздел), когда выполнение команды осуществляется в режиме 64-разрядной адресации. Командой второго типа является команда, которая независимо от режима адресации имеет 64-разрядный операнд результата в едином регистре общего назначения или 128-разрядный операнд результата в четно-нечетной паре регистров общего назначения. Большинство команд второго типа снабжаются мнемоническим обозначением "G" отдельно или в сочетании "GF". Все команды второго типа иногда именуются командами "типа G". Если программа не выполняется в режиме 64-разрядной адресации (в режиме больших РОН) и не содержит команду типа G, разряды 0-31 какого-либо регистра общего назначения (в режиме малых РОН) не могут быть изменены. В некоторых средах часть прикладной программы может выполняться в режиме малых РОН, а другая часть может выполняться в режиме больших РОН. В одном из вариантов осуществления некоторые команды могут являться командами режима малых РОН, а другие команды могут являться командами режима больших РОН, при этом режим работы компьютера зависит от того, выполняет ли он команду режима малых РОН или команду режима больших РОН.
Как показано на фиг.4Б, содержащаяся в команде перехода информация для выполнения команды перехода обычно передается блоку 308 перехода, в котором часто применяется алгоритм предсказания переходов, такой как таблица 432 предыстории переходов (ТПП), для предсказания исхода перехода до завершения других условных операций. Целевой объект текущей команды перехода вызывается и выполняется по предположению до завершения условных операций. Когда условные операции завершены, выполненные по предположению команды перехода завершаются или отбрасываются, исходя из условной операции и предположенного исхода. Типичная команда перехода может предусматривать проверку кодов условий и переход к целевому адресу, если коды условий отвечают требованию команды перехода, при этом целевой адрес может вычисляться на основании нескольких чисел, включая, например, числа из регистровых полей или непосредственного поля команды. В блоке 308 перехода может применяться АЛУ 426, имеющее множество схем 427, 428, 429 входных регистров и схему 430 выходного регистра. Блок 308 перехода, например, может поддерживать связь с регистрами 309 общего назначения, декодировать блок 306 диспетчеризации или другие схемы 425.
Выполнение группы команд может прерываться по ряду причин, включая, например, переключение контекста, инициированное операционной системой, исключительную ситуацию или ошибку в процессе выполнения программы, приводящую к переключению контекста, сигнал прерывания ввода-вывода, приводящий к переключению контекста, или многопоточный режим работы множества программ (в многопоточной среде). Переключение контекста предпочтительно служит для сохранения информации о состоянии выполняемой в данный момент программы и затем для загрузки информации о состоянии другой вызываемой программы. Информация о состоянии может сохраняться, например, в аппаратных регистрах или в памяти. Информация о состоянии предпочтительно содержит показание счетчика команд, указывающее очередную команду для выполнения, коды условий, сведения о преобразовании данных памяти и содержимое структурированного регистра. Переключение контекста может осуществляться аппаратными схемами, прикладными программами, программами операционной системы или аппаратно-программным кодом (микрокодом, пикокодом или лицензионным внутренним кодом (LIC) по отдельности или в сочетании).
Процессор осуществляет доступ к операндам в соответствии с определенными командами способами. Команда может содержать непосредственный операнд, в котором используется значение части команды, может содержать одно или несколько регистровых полей, прямо указывающих регистры общего назначения или регистры особо назначения (например, регистры с плавающей точкой). В команде могут использоваться подразумеваемые регистры, обозначаемые полем кода операции как операнды. В команде могут использоваться ячейки памяти для операндов. Ячейка памяти для операнда может обеспечиваться регистром, непосредственным полем или сочетанием регистров и непосредственного поля, примером чего является средство дальнего смещения на основе системы z/Architecture, в котором команда определяет базовый регистр, индексный регистр и непосредственное поле (поле смещения), которые складываются с целью получения, например, адреса операнда в памяти. Под ячейкой в данном случае подразумевается ячейка основной памяти (основного запоминающего устройства), если не указано иное.
Как показано на фиг.4В, процессор осуществляет доступ к памяти с использованием блока 310 загрузки/сохранения. Блок 310 загрузки/сохранения может выполнять операцию загрузки путем получения адреса целевого операнда в памяти 303 и загрузки операнда в регистр 309 или другую ячейку памяти 303, или может выполнять операцию сохранения путем получения адреса целевого операнда в памяти 303 и сохранения данных, полученных из регистра 309 или другой ячейки памяти 303, в ячейке целевого операнда в памяти 303. Блок 310 загрузки/сохранения может действовать по предположению и осуществлять доступ к памяти в последовательности, которая не соответствует последовательности команд, тем не менее, блок 310 загрузки/сохранения должен обеспечивать для программ видимость выполнения команды по порядку. Блок 310 загрузки/сохранения может поддерживать связь с регистрами 309 общего назначения, блоком 306 декодирования/диспетчеризации, интерфейсом 303 кэша/памяти или другими элементами 455 и содержит различные регистровые схемы, АЛУ 458 и управляющую логику 463 для вычисления адресов ячеек запоминающего устройства и обеспечения последовательного потока для сохранения порядка следования операций. Некоторые операции могут выполняться не по порядку, но блок загрузки/сохранения обеспечивает функциональные возможности для того, чтобы выполняемые не по порядку операции выглядели для программы выполненными по порядку, как хорошо известно из техники.
Адреса, которые "видит" прикладная программа, предпочтительно часто именуются виртуальными адресами. Иногда виртуальные адреса именуются "логическими адресами" и "действительными адресами". Эти виртуальные адреса являются виртуальными в том смысле, что их перенаправляют в ячейку физической памяти посредством одной из ряда технологий динамической трансляции 312 адреса (DAT), включая без ограничения простое приписывание величины смещения к виртуальному адресу, трансляцию виртуального адреса посредством одной или нескольких таблиц трансляции, которые предпочтительно содержат по меньшей мере таблицу сегментов и таблицу страниц по отдельности или в сочетании, предпочтительно таблицу сегментов, содержащую запись с указанием таблицы страниц. В системе z/Architecture предусмотрена иерархия трансляции, в которую входит первая таблица региона, вторая таблица региона, третья таблица региона, таблица сегментов и необязательная таблица страниц. Эффективность трансляции адресов часто повышается за счет использования буфера быстрого преобразования адреса (TLB), который содержит записи, отображающие виртуальный адрес соответствующей ячейки физической памяти. Записи создаются, когда DAT 312 транслирует виртуальный адрес с использованием таблиц перевода. Затем при последующем использовании виртуального адреса может использоваться запись из быстродействующего TLB вместо доступа к таблицам медленной последовательной трансляции. Содержимым TLB может управлять ряд алгоритмов замещения, включая алгоритм замещения наиболее давней по использованию страницы (LRU).
В том случае, когда процессором является процессор мультипроцессорной системы, каждый процессор отвечает за сохранение совместно используемых ресурсов, таких как средства ввода-вывода, кэши, TLB и память, взаимно заблокированных для обеспечения непротиворечивости. Обычно для поддержания непротиворечивости кэшей используются технологии "слежения". Для облегчения совместного использования каждая строка кэша может помечаться в среде слежения как находящаяся в одном из следующих состояний, включающих состояние совместного использования, состояние монопольного использования, измененное состояние, недействительное состояние и т.п.
Блоки 304 ввода-вывода обеспечивают процессор средствами подключения к периферийным устройствам, включая, например, накопители на магнитной ленте, накопители на дисках, принтеры, дисплеи и сети. Блоки ввода-вывода часто представлены в компьютерной программе программными драйверами. В мэйнфреймах, таких как z/Series производства IBM, блоки ввода-вывода мэйнфрейма являются адаптерами каналов и адаптерами открытых систем и обеспечивают связь между операционной системой и периферийными устройствами.
В следующем далее описании, взятом из руководства z/Architecture Principles of Operation, рассмотрено архитектурное представление компьютерной системы.
Запоминающее устройство
В основном запоминающем устройстве компьютерной системы хранится информация, а также адресные, защитные, контрольные и корректирующие записи. Некоторые особенности адресации включают формат адресов, концепцию адресных пространств, различные типы адресов и то, каким образом адрес одного типа транслируется в адрес другого типа. Некоторые из основных запоминающих устройств имеют постоянно абонированные ячейки. Основное запоминающее устройство обеспечивает систему запоминающим устройством с прямой адресацией и быстрой выборкой данных. В основное запоминающее устройство должны загружаться (из устройств ввода) как данные, так и программы, после чего они могут обрабатываться.
Основное запоминающее устройство может содержать одно или несколько буферных запоминающих устройств меньшей емкости с более быстрой выборкой, иногда называемых кэшами. Кэш обычно физически связан с ЦП или процессором ввода-вывода. Физическая конструкция и использование различных запоминающих сред в целом не сказывается на программе за исключением производительности.
Для команд и операндов, хранимых в памяти, могу быть предусмотрены раздельные кэши. Информация содержится в кэше в форме непрерывных байтов на целочисленной границе, называемой блоком или строкой данных кэша (или для краткости строкой). Согласно одной из моделей может быть предусмотрена команда извлечения атрибута кэша (EXTRACT CACHE ATTRIBUTE), которая выдает размер строки кэша в байтах. Согласно одной из моделей также может быть предусмотрена команда упреждающей выборки данных (PREFETCH DATA) и команда упреждающей выборки данных относительно большой длины (PREFETCH DATA RELATIVE LONG) для упреждающей выборки данных из запоминающего устройства в кэш данных или команд или для высвобождения данных из кэша.
Запоминающее устройство рассматривается как длинная горизонтальная битовая строка. В случае большинства операций доступ к запоминающему устройству последовательно осуществляется слева направо. Битовая строка подразделяется на блоки из восьми разрядов. Восьмиразрядный блок называется байтом и является базовым конструктивным блоком всех форматов представления информации. Местоположение каждого байта в запоминающем устройстве идентифицируется однозначно определяемым неотрицательным целым числом, которое является адресом местоположения этого байта или просто адресом байта. Соседние местоположения байтов имеют идущие подряд адреса, начинающиеся слева с 0 и последовательно следующие слева направо. Адреса представляют собой двоичные целые числа без знака, содержащие 24, 31 или 64 разряда.
Обмен информацией между запоминающим устройством и ЦП или канальной подсистемой осуществляется путем передачи одного байта или группы байтов за один раз. Если не оговорено иное, хранящаяся группа байтов адресуется посредством крайнего левого байта из группы. Число байтов в группе подразумевается или прямо оговаривается выполняемой операцией. Используемая в работе ЦП группа байтов называется полем. Разряды в каждой группе байтов последовательно нумеруются слева направо. Крайние левые разряды иногда именуются "старшими" разрядами, а крайние правые разряды - "младшими" разрядами. Тем не менее, номера разрядов не являются адресами ячеек запоминающего устройства. Возможна только адресация байтов. Чтобы оперировать с отдельными разрядами хранящегося байта, осуществляется доступ ко всему байту. Разряды в байте пронумерованы слева направо от 0 до 7. Разряды в адресе могут быть пронумерованы от 8 до 31 или от 40 до 63 в случае 24-разрядных адресов или от 1 до 31 или от 33 до 63 в случае 31-разрядных адресов и от 0 до 63 в случае 64-разрядных адресов. В любом другом имеющем фиксированную длину формате из множества байтов разряды, образующие формат, последовательно пронумерованы, начиная с 0. В целях обнаружения ошибок и предпочтительно их исправления с каждым байтом или группой байтов может передаваться один или несколько контрольных разрядов. Такие контрольные разряды генерируются автоматически машиной и не могут непосредственно управляться программой. Емкость запоминающего устройства выражается в числе байтов. Когда кодом операций команды подразумевается длина хранящегося поля операнда, считается, что поле имеет фиксированную длину, которая может составлять 1, 2, 4, 8 или 16 байтов. Для некоторых команд могут подразумеваться более длинные поля. Когда длина хранящегося поля операнда не подразумевается, а прямо указывается, считается, что поле имеет переменную длину. Операнды переменной длины могут различаться по длине с шагом в 1 байт. При сохранении информации в запоминающем устройстве замещается содержимое местоположений только тех байтов, которые включены в указанное поле, несмотря на то, что ширина физического пути доступа к запоминающему устройству может превышать длину сохраняемого поля.
Некоторые хранящиеся единицы информации должны находиться на целочисленной границе. Применительно к единице информации граница называется целочисленной, когда адрес ее ячейки запоминающего устройства кратен длине единицы информации в байтах. Полям длиной 2, 4, 8 и 16 байтам на целочисленной границе даются особые названия. Полуслово является группой из 2 идущих подряд байтов на двухбайтовой границе и представляет собой базовый конструктивный блок команд. Слово является группой из 4 идущих подряд байтов на четырехбайтовой границе. Двойное слово является группой из 8 идущих подряд байтов на 8-байтовой границе. Учетверенное слово является группой из 16 идущих подряд байтов на 16-байтовой границе. Когда в адресах ячеек запоминающего устройства указаны полуслова, слова, двойные слова и учетверенные слова, в двоичном представлении адреса содержится один, два, три или четыре крайних правых нулевых разряда, соответственно. Команды должны находиться на двухбайтовых целочисленных границах. Хранящиеся операнды большинства команд не содержат требования размещения на границах.
В устройствах, в которых реализованы раздельные кэши для команд и операндов, хранимых в памяти, могут происходить значительные задержки, если программа сохраняется в строке кэша, из которой впоследствии осуществляется выборка команд, независимо от того, изменяются ли при сохранении команды, выборка которых впоследствии осуществляется.
Команды
Обычно работа ЦП управляется посредством хранящихся команд, которые последовательно выполняются по одной за один раз слева направо в возрастающей последовательности адресов ячеек запоминающего устройства. Изменение последовательного выполнения операций может быть вызвано переходом, командой загрузки PSW, прерываниями, командами процессора обработки сигналов или вмешательством оператора.
Команда предпочтительно содержит две основные части:
код операции, который определяет операцию для выполнения,
необязательно указание участвующих операндов.
На фиг.5А-5Е проиллюстрированы форматы команд системы z/Architecture. Команда может содержать только код 501 операции или код операции и ряд полей, содержащих непосредственные операнды или описатели регистров для определения местонахождения операндов в регистрах или в памяти. Код операции может указывать аппаратному обеспечению на необходимость использования подразумеваемых ресурсов (операндов и т.д.), таких как один или несколько конкретных регистров общего назначения (РОН). Операнды могут быть сгруппированы в три класса: операнды, находящиеся в регистрах, непосредственные операнды и хранящиеся операнды. Операнды могут указываться прямо или неявно. Регистровые операнды могут находиться в регистрах общего назначения, регистрах с плавающей точкой, регистрах доступа или управляющих регистрах, при этом тип регистра указывается кодом операции. Регистр, содержащий операнд, определяется путем указания его в 4-разрядном поле команды, называемом полем R. В случае некоторых команд операнд находится в неявно указанном регистре, который подразумевается кодом операции. Непосредственные операнды содержатся в команде, а 8-, 16- или 32-разрядное поле, в котором содержится непосредственный операнд, называется полем I. Хранящиеся операнды могут иметь подразумеваемую длину, обозначаться битом маски, указанием в команде 4- или 8-разрядной длины, которое называется полем L, или могут иметь длину, определяемую содержимым регистра общего назначения. Адреса хранящихся операндов определяются посредством формата, в котором содержимое регистра общего назначения используется в составе адреса. Это позволяет:
указывать полный адрес путем использования сокращенной записи,
выполнять манипуляции с адресом путем использования команд, в которых для операндов используются регистры общего назначения,
изменять адреса программными средствами без изменения потока команд,
действовать независимо от местоположения областей данных путем прямого использования адресов, принимаемых от других программ.
Адрес, используемый для указания запоминающего устройства, содержится в регистре, указанном в поле R команды, или вычисляется на основании базового адреса, индекса и смещения, указанных в полях B, X и D, соответственно, команды. Когда ЦП находится в регистровом режиме доступа, помимо указания адреса поле В или R может использоваться для указания регистра доступа. Для описания выполнения команд операнды предпочтительно обозначаются как первый и второй операнды, а в некоторых случаях как третий и четвертый операнды. Обычно в выполнении команды участвуют два операнда, при этом результат выполнения замещает первый операнд.
Команда имеет длину, составляющую одно, два или три полуслова, и должна храниться на границе полуслова. Как показано на фиг.5А-5Е, на которых проиллюстрированы форматы команд, каждая команда имеет один из 25 основных форматов: Е 501, I 502, RI 503 504, RIE 505 551 552 553 554, RIL 506 507, RIS 555, RR510, RRE 511, RRF 512 513 514, RRS, RS 516 517, RSI 520, RSL 521, RSY 522 523, RX 524, RXE 525, RXF 526, RXY 527, S 530, SI 531, SIL 556, SIY 532, SS 533 534 535 536 537, SSE 541 и SSF 542, при этом формат RRF имеет три разновидности, форматы RI, RIL, RS и RSY имеют по две разновидности, а форматы RIE и SS имеют по пять разновидностей.
В названиях форматов указываются в общих чертах классы операндов, которые участвуют в операции, и некоторые подробные сведения о полях.
RIS обозначает регистровую операцию с непосредственной адресацией (register-and-immediate operation) и операцию обращения к запоминающему устройству.
RRS обозначает операцию типа регистр-регистр (register-and-register operation) и операцию обращения к запоминающему устройству.
SIL обозначает операцию обращения к запоминающему устройству с непосредственной адресацией (storage-and-immediate operation) с использованием 16-разрядного непосредственного поля.
В форматах I, RR, RS, RSI, RX, SI и SS в первом байте команды содержится код операции. В форматах Е, RRE, RRF, S, SIL и SSE в первых двух байты команды содержится код операции за исключением, того, что для некоторых команд в формате S код операции содержится только в первом байте. В форматах RI и RIL код операции содержится в первом байте и в разрядах 12-15 команды. В форматах RIE, RIS, RRS, RSL, RSY, RXE, RXF, RXY и SIY код операции содержится в первом байте и в шестом байте команды. В первых двух разрядах первого или единственного байта кода операции следующим образом указаны длина и формат команды.
В форматах RR, RRE, RRF, RRR, RX, RXE, RXF, RXY, RS, RSY, RSI, R1, RIE и RIL содержимое регистра, указанное в поле R1, называется первым операндом. Регистр, содержащий первый операнд, иногда именуется "местоположением первого операнда", а иногда "регистром R1". В форматах RR, RRE, RRF и RRR в поле R2 указан регистр, содержащий второй операнд, при этом в поле R2 может быть указан тот же регистр, что и поле R1. В форматах RRF, RXF, RS, RSY, RSI и RIE использование поля R3 зависит от команды. В форматах RS и RSY вместо поля R3 может быть указано поле М3, определяющее маску. В поле R обозначен регистр общего назначения или доступа для общих команд, регистр общего назначения для управляющих команд и регистр с плавающей точкой или регистр общего назначения для команд с плавающей точкой. Регистровый операнд регистров общего назначения и управляющих регистров находится в разрядах 32-63 64-разрядного регистра или занимает весь регистр в зависимости от команды.
В формате I содержимое восьмиразрядного поля данных с непосредственной адресацией, т.е. поля I команды непосредственно используется как операнд. В формате SI содержимое восьмиразрядного поля данных с непосредственной адресацией, т.е. поля I2 команды непосредственно используется как второй операнд. В полях В1 и D1 указан первый операнд, имеющий длину 1 байт. Формат SIY аналогичен за исключением того, что вместо поля D1 используются поля DH1 и DL1. В формате RI для команд сложения полуслова с непосредственной адресацией (ADD HALFWORD IMMEDIATE), сравнения полуслова с непосредственной адресацией (COMPARE HALFWORD IMMEDIATE), загрузки полуслова с непосредственной адресацией (LOAD HALFWORD IMMEDIATE) и умножения полуслова с непосредственной адресацией (MULTIPLY HALFWORD IMMEDIATE) содержимое 16-разрядного поля I2 команды используется непосредственно как двоичное целое число со знаком, а в поле R1 указан первый операнд, имеющий длину 32 или 64 разряда в зависимости от команды. Для команды проверки с маскированием (TEST UNDER MASK) (TMHH, TMHL, TMLH, TMLL) содержимое поля I2 используется как маска, а в поле R1 указан первый операнд, имеющий длину 64 разряда.
Для команд вставки с непосредственной адресацией (INSERT IMMEDIATE), И с непосредственной адресацией (AND IMMEDIATE), ИЛИ с непосредственной адресацией (OR IMMEDIATE) и логической загрузки с непосредственной адресацией (LOAD LOGICAL IMMEDIATE) содержимое поля I2 используется как двоичное целое число без знака или логическое значение, а в поле R1 указан первый операнд длиной 64 разряда. Для команд относительного перехода в форматах RI и RSI содержимое 16-разрядного поля I2 используется как двоичное целое число со знаком, указывающее количество полуслов. Это число при его сложении с адресом команды перехода указывает адрес перехода. Для команд относительного перехода в формате RIL поле I2 содержит 32 разряда и используется таким же образом.
Для команд относительного перехода в форматах RI и RSI содержимое 16-разрядного поля I2 используется как двоичное целое число со знаком, указывающее количество полуслов. Это число при его сложении с адресом команды перехода указывает адрес перехода. Для команд относительного перехода в формате RIL таким же образом используется поле I2 длиной 32 разряда. Для команд сравнения с непосредственной адресацией и относительного перехода (COMPARE IMMEDIATE AND BRANCH RELATIVE) и логического сравнения с непосредственной адресацией и относительного перехода (COMPARE LOGICAL IMMEDIATE AND BRANCH RELATIVE) в форматах RIE, содержимое 8-разрядного поля I2 непосредственно используется как второй операнд. Для команд сравнения с непосредственной адресацией и перехода (COMPARE IMMEDIATE AND BRANCH), сравнения с непосредственной адресацией и системного прерывания (COMPARE IMMEDIATE AND TRAP), логического сравнения с непосредственной адресацией и перехода (COMPARE LOGICAL IMMEDIATE AND BRANCH) и логического сравнения с непосредственной адресацией и системного прерывания (COMPARE LOGICAL IMMEDIATE AND TRAP) в формате RIE содержимое 16-разрядного поля I2 непосредственно используется как второй операнд. Для команд сравнения и относительного перехода (COMPARE AND BRANCH RELATIVE), сравнения с непосредственной адресацией и относительного перехода (COMPARE IMMEDIATE AND BRANCH RELATIVE), логического сравнения и относительного перехода (COMPARE LOGICAL AND BRANCH RELATIVE) и логического сравнения с непосредственной адресацией и относительного перехода (COMPARE LOGICAL IMMEDIATE AND BRANCH RELATIVE) в формате RIE содержимое 16-разрядного поля I4 используется как двоичное целое число со знаком, указывающее количество полуслов, складываемых с адресом команды для формирования адреса перехода.
Для команд сложения с непосредственной адресацией (ADD IMMEDIATE), логического сложения с непосредственной адресацией (ADD LOGICAL IMMEDIATE), логического сложения чисел со знаком с непосредственной адресацией (ADD LOGICAL WITH SIGNED IMMEDIATE), сравнения с непосредственной адресацией (COMPARE IMMEDIATE), логического сравнения с непосредственной адресацией (COMPARE LOGICAL IMMEDIATE), загрузки с непосредственной адресацией (LOAD IMMEDIATE) и однопоточного умножения с непосредственной адресацией (MULTIPLY SINGLE IMMEDIATE) в формате RIL содержимое 32-разрядного поля I2 непосредственно используется как второй операнд.
Для команд в формате RIS содержимое 8-разрядного поля I2 непосредственно используется как второй операнд. В формате SIL содержимое 16-разрядного поля I2 непосредственно используется как второй операнд. В полях В1 и D1 указан первый операнд, как описано далее.
В форматах RSL, SI, SIL, SSE и большинстве разновидностей формата SS содержимое регистра общего назначения, указанное в поле В1 прибавляется к содержимому поля D1 для формирования адреса первого операнда. В форматах RS, RSY, S, SIY, SS и SSE содержимое регистра общего назначения, указанное в поле В2, прибавляется к содержимому поля D2 или полей DH2 и DL2 для формирования адреса второго операнда. В форматах RX, RXE, RXF и RXY содержимое регистров общего назначения, указанное в полях Х2 и В2, прибавляется к содержимому поля D2 или полей DH2 и DL2 для формирования адреса третьего операнда. В форматах RIS и RRS и в одной из разновидностей формата SS содержимое регистра общего назначения, указанное в поле В4, прибавляется к содержимому поля D4 для формирования адреса четвертого операнда.
Для команд И (AND) (NC), исключающее ИЛИ (EXCLUSIVE OR) (XC), перемещения (MOVE) (MVC), модификации адреса внутри зоны (MOVE NUMERICS), перемещения зон (MOVE ZONES) и ИЛИ (OR) (ОС) в формате SS с использованием одного 8-разрядного поля в L указывается количество дополнительных байтов операнда справа от байта, указанного в адресе первого операнда. Соответственно, первый операнд имеет длину 1-256 байт, что соответствует длине 0-255 кода в L. В результате сохранения первый операнд замещается и никогда не сохраняется вне поля, заданного адресом и длиной. В этом формате второй операнд имеет такую же длину, как и первый операнд. Существуют разновидности предыдущего определения, которые относятся к командам редактирования (EDIT), редактирования и разметки (EDIT AND MARK), уплотнения согласно стандарту ASCII (PACK ASCII), уплотнения согласно стандарту UNICODE (PACK UNICODE), трансляции (TRANSLATE), трансляции и проверки (TRANSLATE AND TEST), разуплотнения согласно стандарту ASCII (UNPACK ASCII) и разуплотнения согласно стандарту UNICODE (UNPACK UNICODE).
В формате SS с использованием поле двух длин и в формате RSL в L1 указывается количество дополнительных байтов операнда справа от байта, указанного в адресе первого операнда. Соответственно, первый операнд имеет длину 1-16, что соответствует длине 0-15 кода в L1. Аналогичным образом, в L2 указывается количество дополнительных байтов операнда справа от местоположения, указанного в адресе второго операнда. В результате сохранения первый операнд замещается и никогда не сохраняется вне поля, заданного адресом и длиной. Если длина первого операнда превышает длину второго операнда, второй операнд дополняется слева нулями до длины первого операнда. В результате этого дополнения хранящийся второй операнд не изменяется. В формате SS с двумя полями R, которые используются командами перемещения к первичному выражению (MOVE TO PRIMARY), перемещения к вторичному выражению (MOVE TO SECONDARY) и перемещения с ключом, содержимое регистра общего назначения, указанное в поле R1, представляет собой 32-разрядное число без знака, называемое точной длиной. Оба операнда имеют длину, называемую эффективной длиной. Эффективная длина равна точной длине или 256 в зависимости от того, какая величина меньше. Команды устанавливают код условия, чтобы способствовать программному циклу для перемещения общего количества байтов, определенных точной длиной. Формат SS с двумя полями R также используется, чтобы определять интервал регистров и два хранящихся операнда для команды множественной разделенной загрузки (LOAD MULTIPLE DISJOINT) и определять один или два регистра и один или два хранящихся операнда для команды выполнения заблокированной операции (PERFORM LOCKED OPERATION).
Ноль в любом из полей В1, В2, Х2 или В4 указывает на отсутствие соответствующего компонента адреса. Вместо соответствующего компонента используется ноль, передающий промежуточную сумму независимо от содержимого регистра общего назначения 0. Смещение нуля не несет особого смысла.
Разряды 31 и 32 текущего PSW являются разрядами режима адресации. Разряд 31 является разрядом режима расширенной адресации, а разряд 32 является разрядом режима базовой адресации. Эти разряды регулируют размер действительного адреса, полученного путем формирования адреса. Когда оба разряда 31 и 32 текущего PSW равны нулю, ЦП находится в режиме 24-разрядной адресации, и генерируется 24-разрядная команда и действительные адреса операндов. Когда разряд 31 текущего PSW равен нулю, а разряд 32 равен единице, ЦП находится в режиме 31-разрядной адресации, и генерируется 31-разрядная команда и действительные адреса операндов. Когда оба разряда 31 и 32 текущего PSW равны единице, ЦП находится в режиме 64-разрядной адресации, и генерируется 64-разрядная команда и действительные адреса операндов. Выполнение команд ЦП предусматривает генерирование адресов команд и операндов.
24
31
64
При выборке команды из местоположения, указанного текущим PSW, адрес команды увеличивается на количество байтов в команде, и команда выполняется. Эти же шаги затем повторно осуществляются с использованием нового значения адреса команды с целью выборки очередной команды из последовательности. В режиме 24-разрядной адресации происходит круговая адресация команд, при этом за полусловом по адресу 2-2 команды следует полуслово по адресу 0 команды. Таким образом, в режиме 24-разрядной адресации теряется любой перенос двоичного разряда 104 PSW в результате обновления адреса команды. В режиме 31-разрядной или 64-разрядной адресации происходит аналогичная круговая адресация команд, при этом за полусловом по адресу 2-2 или 2-2 команды, соответственно, следует полуслово по адресу 0 команды. Перенос двоичного разряда 97 или 64, соответственно, PSW теряется.
Адрес операнда, который указывает на запоминающее устройство, выводится из промежуточного значения, которое содержится в регистре, указанном в полем R команды, или вычисляется, исходя из суммы трех двоичных чисел: базового адреса, индекса и смещения. Базовым адресом (В) является 64-разрядное число, содержащееся в общем регистре, который указан в программе в 4-разрядном поле команды, называемом полем В. Базовые адреса могут использоваться как средство независимой адресации каждой программы и области данных. В случае матричных вычислений они могут указывать местоположение матрицы, а в случае обработки записей они могут идентифицировать запись. Базовый адрес обеспечивает адресацию всего запоминающего устройства. Базовый адрес также может использоваться для индексации.
Индексом (X) является 64-разрядное число, содержащееся в общем регистре, который указан в программе в 4-разрядном поле команды, называемом полем X. Он входит только в адрес, указанный командами формата RX, RXE и RXY. Команды формата RX, RXE, RXF и RXY допускают двойное индексирование; иными словами, индекс может использоваться для обеспечения адреса элемента в матрице.
Смещением (D) является 12-разрядное или 20-разрядное число, содержащееся в поле команды, называемом полем D. 12-разрядное число смещения является числом без знака и обеспечивает относительную адресацию до 4095 байтов после местоположения, указанного базовым адресом. 20-разрядное число смещения является числом со знаком и обеспечивает относительную адресацию до 524287 байтов после местоположения базового адреса и до 524288 байтов до него. В случае матричных вычислений смещение может использоваться для указания одной из множества составляющих, связанных с элементом. В случае обработки записей смещение может использоваться для идентификации составляющих внутри записи. 12-разрядное число смещения содержится в двоичных разрядах 20-31 команд некоторых форматов. В командах некоторых форматов в двоичных разрядах 36-47 также содержится второе 12-разрядное число смещения.
20-разрядное число смещения содержится в командах только форматов RSY, RXY или SIY. В этих командах поле D состоит из (слабого) DL поля в двоичных разрядах 20-31 и (сильного) поля DH двоичных разрядах 32-39. Если установлено средство длительного смещения, численная величина смещения формируется путем присоединения содержимого поля DH слева к содержимому поля DL. Когда средство длительного смещения не установлено, численная величина смещения формируется путем присоединения восьми нулевых разрядов слева содержимому поля DL, при этом содержимое поля DH не учитывается.
При формировании промежуточной суммы базовый адрес и индекс обрабатываются как 64-разрядные двоичные целые числа. 12-разрядное число смещения обрабатывается как 12-разрядное двоичное целое число без знака, слева к которому присоединены 52 нулевых разряда. 20-разрядное число смещения обрабатывается как 20-разрядное двоичное целое число со знаком, слева к которому присоединены 44 знаковых разряда. Все три числа складываются как 64-разрядные двоичные числа без учета переполнения. Сумма всегда имеет длину 64 разряда и используется как промежуточное значение для формирования генерируемого адреса. Разряды промежуточной суммы пронумерованы от 0 до 63. Нулевой разряд в любом из полей В1, В2, Х2 или В4 указывает на отсутствие соответствующего компонента адреса. Вместо отсутствующего компонента при формировании промежуточной суммы используется ноль независимо от содержимого регистра общего назначения 0. Смещение нуля не несет особого смысла.
Когда в описании команд говорится, что содержимое регистра общего назначения, указанного в поле полем R, используется для адресации хранящегося операнда, содержимое регистра используется как 64-разрядное промежуточное значение.
В команде может быть указан один и тот же регистр общего назначения для вычисления адреса и в качестве местоположения операнда. Вычисление адреса завершается до изменения, если они имеют место, регистров при выполнении операции. Если в определении отдельной команды не указано иное, в генерированном адресе операнда указан крайний левый байт хранящегося операнда.
Генерированный адрес операнда всегда имеет длину 64 разряда, при этом разряды пронумерованы с 0 до 63. Способ получения генерированного адреса из промежуточного значения зависит от текущего режима адресации. В режиме 24-разрядной адресации разряды 0-39 промежуточного значения не учитываются, разряды 0-39 генерированного адреса принудительно приравниваются к нулю, а разряды 40-63 промежуточного значения становятся разрядами 40-63 генерированного адреса. В режиме 31-разрядной адресации разряды 0-32 промежуточного значения не учитываются, разряды 0-32 генерированного адреса принудительно приравниваются к нулю, а разряды 33-63 промежуточного значения становятся разрядами 33-63 генерированного адреса. В режиме 64-разрядной адресации разряды 0-63 промежуточного значения становятся разрядами 0-63 генерированного адреса. В индексе и регистрах базовых адресов могут использоваться отрицательные величины. В режиме 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 команда выполняется без перехода.
Команды относительного перехода находятся в форматах RSI, RI, RIE и RIL. В форматах RSI, RI и RIE команд относительного перехода содержимое поля I2 обрабатывается как 16-разрядное двоичное целое число со знаком, указывающее количество полуслов. В формате RIL содержимое поля I2 обрабатывается как 32-разрядное двоичное целое число со знаком, указывающее количество полуслов. Адресом перехода является количество полуслов, указанное в поле I2, плюс адрес команды относительного перехода.
64-разрядным промежуточным значением для команды относительного перехода в форматах RSI, RI, RIE или RIL является сумма двух слагаемых без учета переполнения из двоичного разряда 0. В форматах RSI, RI или RIE первым слагаемым является содержимое поля I2 с одним нулевым разрядом, присоединенным справа, и 47 разрядами, равными знаковому разряду содержимого, присоединенными слева, а в случае команд сравнения и относительного перехода (COMPARE AND BRANCH RELATIVE), сравнения с непосредственной адресацией и относительного перехода (COMPARE IMMEDIATE AND BRANCH RELATIVE), логического сравнения и относительного перехода (COMPARE LOGICAL AND BRANCH RELATIVE) и логического сравнения с непосредственной адресацией и относительного перехода (COMPARE LOGICAL IMMEDIATE AND BRANCH RELATIVE) первым слагаемым является содержимое поля I4 с разрядами, присоединенными, как описано выше применительно к полю I2. В формате RIL первым слагаемым является содержимое поля I2 с одним нулевым разрядом, присоединенным справа, и 31 разрядом, равным знаковому разряду содержимого, присоединенным слева. Во всех форматах вторым слагаемым является 64-разрядный адрес команды перехода. Адресом команды перехода является адрес команды в PSW до того, как адрес будет обновлен с целью указания очередной команды из последовательности, или адрес объекта команды выполнения (EXECUTE), если она используется. При использовании команды выполнения в режиме 24-разрядной или 31-разрядной адресации адресом команды перехода является целевой адрес с 40 или 33 нулями, соответственно, присоединенными слева.
Адрес перехода всегда содержит 64 разряда, которые пронумерованы от 0 до 63. Адрес перехода замещает разряды 64-127 текущего PSW. Способ получения адреса перехода из промежуточного значения зависит от режима адресации. Для команд перехода, которые изменяют режим адресации, используется новый режим адресации. В режиме 24-разрядной адресации разряды 0-39 промежуточного значения не учитываются, разряды 0-39 адреса перехода приравниваются к нулю, а разряды 40-63 промежуточного значения становятся разрядами 40-63 адреса перехода. В режиме 31-разрядной адресации разряды 0-32 промежуточного значения не учитываются, разряды 0-32 адреса перехода приравниваются к нулю, а разряды 33-63 промежуточного значения становятся разрядами 33-63 адреса перехода. В режиме 64-разрядной адресации разряды 0-63 промежуточного значения становятся разрядами 0-63 адреса перехода.
В случае нескольких команд перехода переход зависит от того, выполнено ли заданное условие. Когда условие не выполнено, продолжается нормальное последовательное выполнение команд, и адрес перехода не используется. При выборе перехода разряды 0-63 адреса перехода замещают разряды 64-127 текущего PSW. В ходе операции перехода адрес перехода не используется до доступа к запоминающему устройству. Исключительная ситуация при нарушении заданных условий вследствие нечетного адреса перехода и исключительные ситуации при доступе вследствие выборки команд в местоположении перехода распознаются не как часть операцию перехода, а как исключительные ситуации, связанные с выполнением команды в местоположении перехода.
В команде перехода, такой как команда перехода с сохранением (BRANCH AND SAVE), один и тот регистр общего назначения может указываться для вычисления адреса перехода и как местоположение операнд. Вычисление адреса перехода завершается до завершения остальной операции.
В слове состояния программы (PSW), описанном в главе 4 "Управление", содержится информация, необходимая для надлежащего выполнения программы. PSW используется для управления порядком следования команд и для фиксации и указания состояния ЦП в зависимости от выполняемой программы. Активное или управляющее PSW называется текущим PSW. Команды перехода выполняют функции принятия решений, управления циклом и компоновки подпрограмм. Команда перехода влияет на порядок следования команд путем включения нового адреса команды в текущее PSW. Команды относительного перехода с использованием 16-разрядного поля I2 позволяют выбирать переход в местоположение со смещением до плюс 64 килобайта - 2 байта или минус 64 килобайта относительно местоположения команды перехода без использования базового регистра. Команды относительного перехода с использованием 32-разрядного поля I2 позволяют выбирать переход в местоположение со смещением до плюс 4 гигабайта - 2 байта или минус 4 гигабайта относительно местоположения команды перехода без использования базового регистра.
Средства принятия решений обеспечиваются командами условного перехода (BRANCH ON CONDITION), относительного условного перехода (BRANCH RELATIVE ON CONDITION) и длительного относительного условного перехода (BRANCH RELATIVE ON CONDITION LONG). Эти команды проверяют код условия, который отражает результаты большинства арифметических, логических операций и операций ввода-вывода. В коде условия, который состоит из двух разрядов, предусмотрены четыре возможные установки: 0, 1, 2 и 3.
Конкретное значение любой установки зависит от операции, которая устанавливает код условия. Например, код условия отражает такие условия, как нулевое состояние, ненулевое состояние, наибольшее значение первого операнда, равенство, переполнение и занятость подканала. После установки код условия остается без изменений, пока не будет изменен командой, которая приводит к установке отличающегося кода условия.
Управление циклом может осуществляться с использованием команд условного перехода, относительного условного перехода и длительного относительного условного перехода для проверки исходов адресной арифметики и операций счета. Для некоторых особо распространенных сочетаний арифметики и проверок предусмотрены операции перехода по значению счетчика (BRANCH ON COUNT), перехода по высокому индексу (BRANCH ON INDEX HIGH) и перехода по низкому или равному индексу (BRANCH ON INDEX LOW OR EQUAL), а также предусмотрены эквиваленты относительного перехода для этих команд. Эти переходы, являющиеся специализированными, обеспечивают повышенную эффективность выполнения этих задач.
Компоновка подпрограмм, когда не требуется изменение режима адресации, обеспечивается командами перехода и возврата (BRANCH AND LINK) и перехода с сохранением (рассмотрение команды перехода с сохранением также относится к командам относительного перехода с сохранением (BRANCH RELATIVE AND SAVE) и длительного относительного перехода с сохранением (BRANCH RELATIVE AND SAVE LONG)). Обе эти команды позволяют не только вводить новый адрес команды, но также сохранять адрес обратного перехода и соответствующую информацию. Адресом обратного перехода является адрес команды, следующей за хранящейся командой, за исключением того, что он является адресом команды, следующей за командой выполнения, целевым объектом которой является команда перехода.
Команды перехода и возврата и перехода с сохранением содержат поле R1. Они формируют адрес перехода посредством полей, которые зависят от команды. Действие команд можно обобщить следующим образом.
В режиме 24-разрядной адресации обе команды помещают адрес обратного перехода в двоичные разряды 40-63 регистра общего назначения R1 и оставляют разряды 0-31 этого регистра без изменений. Команда перехода и возврата помещает код длины команды, а также код условия и программную маску из текущего PSW в двоичные разряды 32-39 регистра общего назначения R1. Команда перехода с сохранением помещает нули в эти двоичные разряды.
В режиме 31-разрядной адресации обе команды помещают адрес обратного перехода в двоичные разряды 33-63, единицу в двоичный разряд 32 регистра общего назначения R1, и оставляют разряды 0-31 регистра без изменений.
В режиме 64-разрядной адресации обе команды помещают адрес обратного перехода в двоичные разряды 0-63 регистра общего назначения R1.
В любом режиме адресации обе команды генерируют адрес перехода под управлением текущего режима адресации. Команды помещают разряды 0-63 адреса перехода в двоичные разряды 64-127 PSW. В формате RR обе команды не осуществляют переход, если поле R2 команды равно нулю.
Видно, что в режиме 24-разрядной или 31-разрядной адресации команда перехода с сохранением помещает разряд режима базовой адресации, т.е. разряд 32 PSW в двоичный разряд 32 регистра общего назначения R1. Команда перехода и возврата делает это в режиме 31-разрядной адресации. Команды перехода с сохранением и установки режима (BRANCH AND SAVE AND SET MODE) и перехода и установки режима (BRANCH AND SET MODE) используются, когда во время компоновки необходимо изменить режим адресации. Эти команды содержат поля R1 и R2. Действие команд можно обобщить следующим образом.
Команда перехода с сохранением и установки режима устанавливает такое же содержимое регистра общего назначения R1, как и команда перехода с сохранением. Кроме того, команда помещает разряд режима расширенной адресации, т.е. разряд 31 PSW в двоичный разряд 63 регистра.
Если поле R1 не равно нулю, команда перехода и установки режима действует следующим образом. В режиме 24- или 31-разрядной адресации она помещает разряд 32 PSW в двоичный разряд 32 регистра общего назначения R1, и оставляет разряды 0-31 и 33-63 регистра без изменений. Следует отметить, что разряд 63 регистра должен быть равен нуля, если в регистре содержится адрес команда. В режиме 64-разрядной адресации команда помещает разряд 31 PSW (единицу) в двоичный разряд 63 регистра общего назначения R1, оставляет разряды 0-62 регистра без изменений.
Когда поле R2 не равно нулю, обе команды устанавливают режим адресации и осуществляют переход следующим образом. Разряд 63 регистра общего назначения R2 помещается в двоичный разряд 31 PSW. Если разряд 63 равен нулю, разряд 32 регистра помещается в двоичный разряд 32 PSW. Если разряд 63 равен единице, разряд 32 PSW приравнивается к единице. Затем под управлением нового режима адресации генерируется адрес перехода на основании содержимого регистра за исключением того, что разряд 63 регистра обрабатывается как ноль. Команды помещают разряды 0-63 адреса перехода в двоичные разряды 64-127 PSW. Разряд 63 регистра общего назначения R2 остается без изменений и, соответственно, может равняться единице после входа в вызванную программу. Если R2 является таким же, как R1, результаты в указанном общем регистре являются такими же, как в случае регистра R1.
Прерывания (переключение контекста)
Механизм прерывания позволяет ЦП изменять свое состояние под действием внешних по отношению к конфигурации условий, условий внутри конфигурации или внутри самого ЦП. Чтобы обеспечить быстрое реагирование на высокоприоритетные условия и немедленное распознавание типа условия, условия прерывания сгруппированы в шесть классов: внешние, по вводу-выводу, по машинному сбою, по программе, по рестарту и по обращению к супервизору.
Прерывание состоит в сохранении текущего PSW как старого PSW, сохранении информации, идентифицирующей причину прерывания, и выборке нового PSW. Обработка возобновляется в соответствии с новым PSW. В старом PSW, сохраненном при прерывании, обычно содержит адрес команды, которая выполнялась бы следующей, если бы не произошло прерывание, что позволяет возобновлять прерванную программу. В случае прерываний по программе и по обращению к супервизору в сохраненной информации также содержится код, который определяет длину последней выполненной команды, что позволяет программе реагировать на причину прерывания. В случае некоторых программных условий, для которых нормальной реакцией является повторное выполнение команды, вызвавшей прерывание, в адресе команды прямо указывается последняя выполненная команда.
За исключением рестарта прерывание может происходить только при нахождении ЦП в рабочем состоянии. Прерывание по рестарту может происходить при остановленном ЦП или ЦП в рабочем состоянии.
Любая исключительная ситуация при доступе распознается как часть выполнения команды, которой сопутствует исключительная ситуация. Исключительная ситуация при доступе не распознается, когда ЦП пытается осуществить упреждающую выборку из недоступного местоположения или обнаруживает какое-либо другое условие возникновения исключительной ситуации при доступе, но команда перехода или прерывание изменяет последовательность команд, в результате чего команда не выполняется. Каждая команда способна вызывать исключительную ситуацию при доступе, распознаваемую по причине выборки команды. Кроме того, исключительные ситуации при доступе, сопутствующие выполнению команды, могут возникать из-за доступа к хранящемуся операнду. Исключительная ситуация при доступе вследствие выборки команды регистрируется при невозможности выборки первого полуслова команды без возникновения исключительной ситуации. Когда первое полуслово команды не вызывает исключительных ситуаций при доступе, исключительные ситуации при доступе могут регистрироваться применительно к дополнительным полусловам в зависимости от длины команды, заданной первыми двумя разрядами команды; тем не менее, когда операция может быть выполнена без доступа ко второму или третьему полусловам команды, невозможно предсказать, будет ли зарегистрирована исключительная ситуация при доступе применительно к неиспользуемой части. Поскольку регистрация исключительных ситуаций при доступе применительно к выборке команд характерна для всех команд, она не включается в определения отдельных команд.
За исключением случаев, когда в описании отдельных команд указано иное, в отношении исключительных ситуаций, связанных с доступом к местоположению операнда, действуют следующие правила. В случае операнда выбираемого типа исключительные ситуации при доступе в силу необходимости регистрируются только применительно к той части операнда, которая требуется для выполнения операции. Невозможно предсказать, будут ли зарегистрированы исключительные ситуации при доступе применительно к тем частям операнда выбираемого типа, которые не требуются для выполнения операции.
В случае операнда хранимого типа исключительные ситуации при доступе распознаются применительно ко всему операнду даже, если операция могла быть выполнена без использования недоступной части операнда. В тех ситуациях, в которых значение операнда хранимого типа характеризуется как непредсказуемое, невозможно предсказать, будет ли зарегистрирована исключительная ситуация при доступе. Всякий раз, когда доступ к местоположению операнда способен вызвать исключительную ситуацию при доступе, которая должна распознаваться, в список исключительных ситуаций в процессе выполнения программы в описании команды включается слово "доступ". Оно также указывает, какой операнд может вызвать исключительную ситуацию, которая должна распознаваться, и распознается ли исключительная ситуация при выборке или доступе к запоминающему устройству в местоположении этого операнда. Исключительные ситуации при доступе распознаются только применительно к части операнда, определяемой для каждой конкретной команды.
Исключительная ситуация в процессе выполнения операции распознается, когда ЦП пытается выполнить команду с недействительным кодом операции. Код операции может быть не назначен, или команда с этим кодом операции может быть не установлена в ЦП. Операция блокируется. Код длины команды равен 1, 2 или 3. Исключительная ситуация в процессе выполнения операции обозначается шестнадцатеричным кодом 0001 программного Прерывания (или 0081, если зарегистрировано одновременное событие PER).
В некоторых моделях могут быть предложены команды, не описанные в настоящем документе, такие как команды, предусмотренные как вспомогательные или входящие в состав особых или заказных функций. Следовательно, не описанные в настоящем документе коды операций необязательно приводят к подлежащей распознаванию исключительной ситуации в процессе выполнения операции. Кроме того, эти команды могут приводить к установке режимов работы или могут иначе влиять на машину с тем, чтобы воздействовать на выполнение последующих команд. Во избежание такой работы команда, код операции которой не описан в настоящем документе, должна выполняться только, если желательна конкретная функция, соответствующая коду операции.
Исключительная ситуация при нарушении заданных условий распознается, когда справедливо любое из следующего.
1. В не присвоенный двоичный разряд PSW (то есть любой из двоичных разрядов 0, 2-4, 24-30 или 33-63) вводится единица. Этот случай обрабатывается как связанная с PSW ранняя исключительная ситуация при нарушении заданных условий.
2. В двоичный разряд 12 PSW вводится единица. Этот случай обрабатывается как связанная с PSW ранняя исключительная ситуация при нарушении заданных условий.
3. PSW является недействительным по одной из следующих причин: а. значением разряда 31 PSW является единица, а значением разряда 32 является ноль; б. значениями разрядов 31 и 32 PSW являются нули, что указывает на режим 24-разрядной адресации, при этом значениями не всех разрядов 64-103 PSW являются нули; в. значением разряда 31 PSW является ноль, а значением разряда 32 является единица, что указывает на режим 31-разрядной адресации, при этом значениями не всех разрядов 64-96 PSW являются нули. Этот случай обрабатывается как связанная с PSW ранняя исключительная ситуация при нарушении заданных условий.
4. В PSW содержится нечетный адрес команды.
5. В адресе операнда не указана целочисленная граница в команде, для которой требуется такое указание целочисленной границы.
6. В поле R команды, для которой требуется указание четного регистра, указан нечетный регистр общего назначения.
7. Для расширенного операнда указан регистр с плавающей точкой помимо 0, 1, 4, 5, 8, 9, 12 или 13.
8. Множитель или делитель в десятеричной системе счисления содержит более 15 цифр и знаков.
9. Длина поля первого операнда является меньшей или равной длине поля второго операнда при умножении или делении в десятичной системе.
10. Происходит попытка выполнения команд шифрования сообщения, шифрования сообщения со сцеплением (CIPHER MESSAGE WITH CHAINING), вычисления профиля промежуточного сообщения (COMPUTE INTERMEDIATE MESSAGE DIGEST), вычисления профиля последнего сообщения (COMPUTE LAST MESSAGE DIGEST) или вычисления кода аутентификации сообщения (COMPUTE MESSAGE AUTHENTICATION CODE), при этом код режима работы в разрядах 57-63 регистра общего назначения 0 содержит не присвоенный или не установленный код режима работы.
11. Происходит попытка выполнения команд шифрования сообщения (CIPHER MESSAGE) или шифрования сообщения со сцеплением, при этом в поле R1 или R2 указан нечетный регистр или регистр общего назначения 0.
12. Происходит попытка выполнения команд шифрования сообщения, шифрования сообщения со сцеплением, вычисления профиля промежуточного сообщения или вычисления кода аутентификации сообщения, при этом длина второго операнда не является кратной размеру блока данных указанной функции. Это условие возникновения исключительной ситуации при нарушении заданных условий не относится к функциям формулирования запросов.
13. Происходит попытка выполнения команды сравнения и формирования кодового слова (COMPARE AND FORM CODEWORD), при этом в регистрах 1, 2 и 3 общего назначения изначально не содержатся четные величины.
32. Происходит попытка выполнения команды сравнения и свопинга с сохранением (COMPARE AND SWAP AND STORE), при этом выполняется одно из следующих условий:
в коде режима работы указано не присвоенное значение,
в характеристике памяти указано не присвоенное значение,
код режима работы равен 0, а на границе слова не указан первый операнд,
код режима работы равен 1, а на границе двойного слова не указан первый операнд,
не указан второй операнд на целочисленной границе, соответствующей размеру хранящегося значения.
33. Происходит попытка выполнения команд логического сравнения длительного UNICODE (COMPARE LOGICAL LONG UNICODE) или перемещения длительного UNICODE (MOVE LONG UNICODE), при этом в содержимом регистра общего назначения R1+1 или R3+1 не указано четное число байтов.
34. Происходит попытка выполнения команд логического сравнения строки (COMPARE LOGICAL STRING), перемещения строки (MOVE STRING) или поиска строки (SEARCH STRING), при этом значениями не всех разрядов 32-55 регистра общего назначения 0 являются нули.
35. Происходит попытка выполнения команды вызова сжатия (COMPRESSION CALL), при этом разряды 48-51 регистра общего назначения О имеют любое из двоичных значений 0000 и 0110-1111.
36. Происходит попытка выполнения команд вычисления профиля промежуточного сообщения, вычисления профиля последнего сообщения или вычисления кода аутентификации сообщения, при этом справедливо любое из следующего:
в поле R2 указан нечетный регистр или регистр общего назначения 0,
разряд 56 регистра общего назначения 0 не равен нулю.
37. Происходит попытка выполнения команд преобразования шестнадцатеричного числа с плавающей точкой в двоичное число с плавающей точкой (CONVERT HFP TO BFP), преобразования в постоянное число (шестнадцатеричное число с плавающей точкой или двоичное число с плавающей точкой) (CONVERT TO FIXED (BFP или HFP)) или загрузки целого числа с плавающей точкой (LOAD FP INTEGER (BFP)), при этом в поле М3 не указан действительный модификатор.
38. Происходит попытка выполнения команды деления на целое число (DIVIDE TO INTEGER), при этом в поле М4 не указан действительный модификатор.
39. Происходит попытка выполнения команды выполнения, при этом целевой адрес является нечетным.
40. Происходит попытка выполнения команды извлечения пакетированного состояния (EXTRACT STACKED STATE), при этом код в двоичных разрядах 56-63 регистра общего назначения R2 превышает 4, когда не установлено средство повторного использования ASN и LX (ASN-and-LX-reuse facility), или превышает 5, когда оно установлено.
41. Происходит попытка выполнения команды поиска крайней левой единицы (FIND LEFTMOST ONE), при этом в поле R1 указан нечетный регистр.
42. Происходит попытка выполнения команды аннулирования записи в таблице DAT (INVALIDATE DAT TABLE ENTRY), при этом значениями не всех разрядов 44-51 регистра общего назначения R2 являются нули.
43. Происходит попытка выполнения команды загрузки FPC (LOAD FPC), при этом один или несколько разрядов второго операнда, соответствующие неподдерживаемым разрядам в регистре FPC, равны единице.
44. Происходит попытка выполнения команды загрузки адреса записи в таблице страниц (LOAD PAGE-TABLE-ENTRY ADDRESS), при этом в поле М4 команды содержится любое значение помимо двоичного числа 0000-0100.
45. Происходит попытка выполнения команды загрузки PSW (LOAD PSW), при этом значением разряда 12 двойного слова в адресе второго операнда является ноль. Распознавание этой исключительной ситуации зависит от модели.
46. Происходит попытка выполнения команды вызова монитора (MONITOR CALL), при этом в двоичных разрядах 8-11 команды не содержатся нули.
47. Происходит попытка выполнения команды перемещения страницы (MOVE PAGE), при этом в двоичных разрядах 48-51 регистра общего назначения 0 не содержатся нули, или значениями обоих разрядов 52 и 53 регистра являются единицы.
48. Происходит попытка выполнения команды уплотнения согласно стандарту ASCII (PACK ASCII), при этом значение поля L2 превышает 31.
49. Происходит попытка выполнения команды уплотнения согласно стандарту UNICODE (PACK UNICODE), при этом значение поля L2 превышает 63 или является четной величиной.
50. Происходит попытка выполнения команды осуществления операции с плавающей точкой (PERFORM FLOATING POINT OPERATION), при этом значением разряда 32 регистра общего назначения 0 является ноль, а одно или несколько полей в разрядах 33-63 недействительны или указывают на не установленную функцию.
51. Происходит попытка выполнения команды выполнения заблокированной операции (PERFORM LOCKED OPERATION), при этом справедливо любое из следующего:
значением разряда Т, т.е. разряда 55 регистра общего назначения 0 является ноль, при этом код режима работы в разрядах 56-63 регистра недействителен,
значениями не всех разрядов 32-54 регистра общего назначения 0 являются нули,
в регистровом режиме доступа значение поля R3 для кодов режима работы, которые приводя к использованию списка параметров, содержащего ALET, равно нулю.
52. Происходит попытка выполнения команды осуществления функции средства синхронизации (PERFORM TIMING FACILITY FUNCTION), при этом справедливо любое из следующего:
значение разряда 56 регистра общего назначения 0 не равно нулю,
в разрядах 57-63 регистра общего назначения 0 указан не назначенный или не установленный код режима работы.
53. Происходит попытка выполнения команды передачи программы (PROGRAM TRANSFER) или передачи программы с копией (PROGRAM TRANSFER WITH INSTANCE), при этом справедливо все из следующего:
значением разряда режима расширенной адресации в PSW является ноль,
значением разряда режима базовой адресации, т.е. разряда 32 в общем регистре, указанным в поле R2 команды, является ноль,
не всеми значениями разрядов 33-39 адреса команды в том же регистре являются нули.
54. Происходит попытка выполнения команды возобновления программы (RESUME PROGRAM), при этом справедливо любое из следующего:
разряды 31, 32, и 64-127 поля PSW во втором операнде недействительны для помещения в текущее PSW. Исключительная ситуация распознается, если справедливо любое из следующего: значениями обоих разрядов 31 и 32 являются нули, при этом не всеми значениями разрядов 64-103 являются нули, значениями разрядов 31 и 32 являются ноль и единица, соответственно, при этом не всеми значениями разрядов 64-96 являются нули, значениями разрядов 31 и 32 являются единица и ноль, соответственно, значением разряда 127 является единица,
не всеми значениями разрядов 0-12 в списке параметров являются нули.
55. Происходит попытка выполнения команды поиска строки согласно стандарту UNICODE (SEARCH STRING UNICODE), при этом не всеми значениями разрядов 32-47 регистра общего назначения 0 являются нули.
56. Происходит попытка выполнения команды настройки управления адресным пространством (SET ADDRESS SPACE CONTROL) или быстрой настройки управления адресным пространством (SET ADDRESS SPACE CONTROL FAST), при этом значениями обоих разрядов 52 и 53 адреса второго операнда не являются нули.
57. Происходит попытка выполнения команды установки режима адресации (SET ADDRESSING MODE) (SAM24), при этом не всеми значениями разрядов 0-39 обновленного адреса команды в PSW, разрядов 64-103 PSW являются нули.
58. Происходит попытка выполнения команды установки режима адресации (SAM31), при этом не всеми значениями разрядов 0-32 обновленного адреса команды в PSW, разрядов 64-96 PSW являются нули.
59. Происходит попытка выполнения команды установки программируемого часами поля (SET CLOCK PROGRAMMABLE FIELD), при этом не всеми значениями разрядов 32-47 регистра общего назначения 0 являются нули.
60. Происходит попытка выполнения команды установки FPC (SET FPC), при этом значением одного или нескольких разрядов первого операнда, соответствующих не поддерживаемым разрядам в регистре FPC, является единица.
61. Происходит попытка выполнения команды сохранения системной информации (STORE SYSTEM INFORMATION), при этом код режима работы в общем регистре 0 является действительным, и справедливо любое из следующего:
при этом не всеми значениями разрядов 36-55 регистра общего назначения 0 и разрядов 32-47 регистра общего назначения 1 являются нули,
адрес второго операнда не находится на 4-килобайтовой границе.
62. Происходит попытка выполнения команды преобразования два к одному (TRANSLATE TWO TO ONE) или преобразования два к двум (TRANSLATE TWO TO TWO), при этом в общем регистре длиной R1+1 не указано четное число байтов.
63. Происходит попытка выполнения команды разуплотнения согласно стандарту ASCII (UNPACK ASCII), при этом значение поля L1 превышает 31.
64. Происходит попытка выполнения команды разуплотнения согласно стандарту UNICODE (UNPACK UNICODE), при этом значение поля L1 превышает 63 или является четной величиной.
65. Происходит попытка выполнения команды обновления дерева (UPDATE TREE), при этом исходное содержание регистров общего назначения 4 и 5 некратно 8 в режиме 24-разрядной или 31-разрядной адресации или некратно 16 в режиме 64-разрядной адресации. Выполнение команды, определенной старым PSW, блокируется. Тем не менее, в случае связанных с PSW ранних исключительных ситуаций при нарушении заданных условий (причины 1-3) операция, в ходе которой вводится новое PSW, выполняется, но немедленно после этого происходит прерывание. Код длины команды (ILC) предпочтительно равен 1, 2 или 3 и указывает длину команды, вызывающей исключительную ситуацию. Когда адрес команды является нечетным (причина 4), невозможно предсказать, равен ли ILC 1, 2 или 3. После распознавания связанной с PSW ранней исключительной ситуация при нарушении заданных условий (причины 1-3), и допущения исключительной ситуация командами загрузки PSW, загрузки расширенного PSW (LOAD PSW EXTENDED), возврата к программе (PROGRAM RETURN) или после прерывания ILC равен 0. После допущения исключительной ситуация командой установки режима адресации (SAM24, SAM31) ILC равен 1, или равен 2, если целевым объектом команды выполнения являлась команда установки режима адресации. После допущения исключительной ситуация командой установки системной маски (SET SYSTEM MASK) или командой последующего сохранения или установки системной маски (STORE THEN OR SYSTEM MASK) ILC равен 2.
Программные прерывания используются для сообщения об исключительных ситуациях, которые возникают во время выполнения программы. Программное прерывание приводит к сохранению старого PSW в ячейках 336-351 реальной памяти и выборке нового PSW из ячеек 464-479 реальной памяти. Причина прерывания указывается кодом прерывания. Код прерывания хранятся в ячейках 142-143 реальной памяти, код длины команды хранятся в двоичных разрядах 5 и 6 байта в ячейке 141 реальной памяти, при этом остальные разряды приравнены к нулям, которые хранятся в ячейке 140 реальной памяти. В некоторых случаях дополнительная информация с указанием причины прерывания хранится в ячейках 144-183 реальной памяти. Если установлено средство PER-3, в ходе программного прерывания содержимое адресного регистра прерывающих событий помещается в ячейки 272-279 реальной памяти. За исключением событий PER и исключительной ситуация в процессе выполнения криптографической операции условие, являющееся причиной прерывания, указывается кодовым обозначением, которое содержится в семи крайних правых двоичных разрядах кода прерывания. За один раз может быть указано только одно условие. Разряды 0-7 кода прерывания приравнены к нулю. Для указания событий PER значение разряда 8 кода прерывания приравнивается к единице. Когда это является единственным условием, разряды 0-7 и 9-15 также приравниваются к нулю. Когда событие PER регистрируется с другим условием программного прерывания, значением разряда 8 является единица, а значения разрядов 0-7 и 9-15 устанавливаются как для другого условия. Исключительная ситуация в процессе выполнения криптографической операции обозначается шестнадцатеричным кодом 0119 прерывания или 0199, если также зарегистрировано событие PER.
При наличии соответствующего бита маски программное прерывание может происходить только, когда значением бита маски является единица. Программная маска в PSW управляет четырьмя исключительными ситуациями, маски IEEE в регистре FPC управляют исключительными ситуациями согласно стандарту IEEE, разряд 33 в управляющем регистре 0 контролирует, не вызывает ли команда установки системной маски исключительную ситуацию в процессе выполнения особой операции, разряды 48-63 в управляющем регистре 8 управляют прерываниями вследствие событий мониторинга, иерархия масок управляет прерываниями вследствие событий PER. Если какой-либо управляющий бит маски равен нулю, ситуация не учитывается, при этом ситуация не остается ожидающей решения.
Когда новое PSW программного прерывания содержит ошибку формата PSW или приводит к распознаванию исключительной ситуации в процессе выборки команды, может иметь место последовательность программных прерываний.
Некоторые из ситуаций, регистрируемых как исключительные ситуации в процессе выполнения программы, также могут распознаваться канальной подсистемой, и в этом случае исключительная ситуация указывается в слове состояния подканала или в расширенном слове состояния.
Когда исключительная ситуация при обработке данных вызывает программное прерывание, в ячейке 147 сохраняется код исключительной ситуации при обработке данных (DXC), а в ячейках 144-146 сохраняются нули. В DXC разграничиваются различные типы условий возникновения исключительной ситуации. Когда значением управляющего разряда регистра AFP (дополнительного регистра с плавающей точкой), т.е. разряда 45 управляющего регистра 0 является единица, DXC также сохраняется в поле DXC управляющего регистра с плавающей точкой (FPC). Поле DXC в регистре FPC остается без изменений при регистрации любой другой исключительной ситуации в процессе выполнения программы. DXC представляет собой 8-разрядный код, указывающий конкретную причину исключительной ситуации при обработке данных.
DXC 2 и 3 являются взаимоисключающими и имеют более высокий приоритет, чем любой другой DXC. Так, например, DXC 2 (команда BFP) превосходит по важности любую исключительную ситуацию согласно стандарту IEEE; a DXC 3 (команда DFP) превосходит по важности любую исключительную ситуацию согласно стандарту IEEE или имитированную исключительную ситуацию согласно стандарту IEEE. В качестве другого примера, если существуют условия как для DXC 3 (команды DFP), так и для DXC 1 (регистра AFP), регистрируется DXC 3. Когда применима как исключительная ситуация при нарушении заданных условий, так и исключительная ситуация при обработке данных регистра AFP, невозможно предсказать, какая из них будет зарегистрирована.
Исключительная ситуация при адресации распознается при попытке обращения ЦП к ячейке основного запоминающего устройства, которая недоступна в конфигурации. Ячейка основного запоминающего устройства недоступна в конфигурации, когда ячейка не установлена, когда запоминающее устройство не находится в конфигурации или, когда отключено питание запоминающего устройства Адрес, указывающий ячейку запоминающего устройства, которая недоступна в конфигурации, называется недействительным. Когда адрес команды является недействительным, операция блокируется. Операция также блокируется, когда адрес целевого объекта команды выполнения является недействительным. Кроме того, единица действия блокируется, когда при доступе к таблице или к записи в таблице возникает исключительная ситуация при адресации. Таблицами и записями в таблицах, к которым относится правило, являются таблица управления диспетчеризуемыми единицами, запись во второй таблицы основного ASN и записи в списке доступа, первая таблица региона, вторая таблица региона, третья таблица региона, таблица сегментов, таблица страниц, таблица связей, первая таблица связей, вторая таблица связей, таблица входов, первая таблица ASN, вторая таблица ASN, таблица полномочий, стек связей и трассировочная таблица. Исключительные ситуации при адресации приводят к блокировке, когда они возникают при обращении к первой таблице региона, второй таблице региона, третьей таблице региона, таблице сегментов и таблице страниц в случае подразумеваемых обращений к динамическому преобразованию адреса и обращений, связанных с выполнением команд загрузки адреса записи в таблицы страниц, загрузки действительного адреса (LOAD REAL ADDRESS), сохранения действительного адреса (STORE REAL ADDRESS) и проверки защиты (TEST PROTECTION). Аналогичным образом, исключительные ситуации при адресации в случае обращения к таблице управления диспетчеризуемыми единицами, записи во второй таблицы основного ASN, списку доступа, второй таблице ASN или таблице полномочий приводят к подавлению, когда они возникают в случае преобразовании регистра доступа, осуществляемого в подразумеваемой форме или в составе команд загрузки адреса записи в таблицы страниц, загрузки действительного адреса, сохранения действительного адреса, проверки адреса (TEST ADDRESS) или проверки защиты. За исключением некоторых конкретных команд, выполнение которых блокируется, операция прекращается, когда адрес операнда может быть преобразован, но в нем указано недоступное местоположение. В случае прекращения изменения могут касаться только полей результатов. В данном контексте термин "поле результата" включает код условия, регистры и любые ячейки запоминающего устройства, которые имеются и, как указано в команде, должны быть изменены.
Приведенная выше информация полезна для понимания терминологии и структуры одного из вариантов осуществления компьютерной системы. В изобретении предусмотрены варианты осуществления, не ограниченные системой z/Architecture или приведенным ее описанием. Идеи вариантов осуществления могут выгодно применяться в вычислительных системах с другой архитектурой других производителей.
В различных архитектурах процессоров используется ограниченное число регистров общего назначения, которые явно (и/или неявно) указываются командами из набора структурированных команд. В системе IBM z/Architecture и предшествовавших ей архитектурах (восходящих к первоначальной System 360, датируемой около 1964 г.) используется 16 регистров общего назначения (РОН) для каждого центрального процессора (ЦП). РОН могут использоваться командам и процессора (центрального процессора (ЦП)) следующим образом:
в качестве исходного операнда арифметической или логической операции,
в качестве целевого операнда арифметической или логической операции,
в качества адреса операнда, хранимого в памяти (базового регистра, индексного регистра или непосредственно),
в качестве длины операнда, хранимого в памяти,
в других целях, таких как обеспечение кода функции или другой информации для и из команды.
До внедрения в 2000 г. мэйнфрейма на основе системы IBM z/Architecture регистр общего назначения мэйнфрейма состоял из 32 разрядов; с внедрением z/Architecture регистр общего назначения стал состоять из 64 разрядов, однако по соображениям совместимости многие команды z/Architecture продолжают поддерживать 32 разряда.
Аналогичным образом, в других архитектурах, таких как, например, х86 компании Intel предусмотрены режимы совместимости, чтобы существующая машина, имеющая, например, 32-разрядные регистры, обеспечивала для команд режимы доступа только к первым 8 или 16 разрядам 32-разрядного РОН.
Даже 16 регистров в среде первой IBM System 360 (обозначаемых, например, в команде 4-разрядным полем регистра) создавали сложности для программистов-ассемблеров и разработчиков компиляторов. Программе небольшого объема могло требоваться несколько базовых регистров для адресации кода и данных, что ограничивало число регистров, доступных для размещения активных переменных. Для адресации ограниченного числа регистров применялись определенные методы.
Конструирование программ (включая простое модульное программирование) помогало сводить к минимуму чрезмерное использование базовых регистров.
Разработчики компиляторов применяли такие методы, как "окрашивание" регистров с целью управления динамическим переназначением регистров.
Использование базовых регистров может быть уменьшено за счет следующего:
обновленных арифметических и логических команд с непосредственными константами (внутри команды),
обновленных команд с относительно непосредственными адресами операндов,
обновленных команд с дальними смещениями.
Тем не менее, когда число активных переменных и объем адресации превышают возможности имеющегося числа регистров в ЦП, сохраняется постоянное давление на регистры.
В системе z/Architecture предусмотрены три выбираемых программой режима адресации: 24-, 31-и 64-разрядная адресация. Однако наличие 64-разрядных РОН приносит ограниченную выгоду программам, которым не требуются 64-разрядные величины и в которых не используется 64-разрядная адресация памяти. Далее описан один из методов применения 64-разрядных регистров для программ, в которых обычно не используется 64-разрядная адресация или переменные.
63
0
В настоящем описании используется мнемоническое обозначение разрядов регистров путем их нумерации в возрастающем порядке слева направо (в обратном порядке следования). В 64-разрядном регистре разряд 0 (крайний левый разряд) отображает наибольшую значимую величину (2), а разряд 63 (крайний правый разряд) отображает наименьшую значимую величину (2). 32 крайних левых разряда такого регистра (разряды 0-31) называются старшим словом, а 32 крайних правых разряда (разряды 32-63) называются младшим словом, при этом слово содержит 32 разряда.
Функция старшего слова
Предложен новый набор общих команд (то есть команд, доступных для прикладной программы) с целью использования старшего слова (32 старших разрядов) 64-разрядного регистра общего назначения при работе ЦП в 32-разрядном режиме. Программа может использовать новые команды для доступа к скрытым (ранее недоступным) старшим словам РОН в дополнение к старым командам, которые по-прежнему ограничены использованием младших слов.
Как показано на фиг.8, программа, записанная в архитектуру, имеющую 16- или 32-разрядные регистры, может действовать в более новой версии архитектуры, поддерживающей 64-разрядные регистры. Программе, записанной, скажем, для 32-разрядного режима, известно только о 32-разрядных регистрах и обычно о 32 или менее разрядах логических адресов. Операционная система (ОС) 801 в 64-разрядной структурированной компьютерной системе может поддерживать программы 803, записанные для 64-разрядного режима, а также программы 802, записанные для 32-разрядного режима. При операции 804 переключения контекста в такой системе выполняется сохранение 805 64-разрядных регистров, а также слова состояния программы (PSW) в случае переключения между программами и/или операционной системой независимо от того, находилась ли прикладная программа 802, 803 в 32- или 64-разрядном режиме. Таким, образом, при определенных переключениях контекста регистры 32-разрядной программы, которая действует в 32-разрядном режиме в 64-разрядной машине под управлением 64-разрядной операционной системы, будут сохранены и восстановлены. Компьютерная система и операционная система фактически могут выполнять сохранение и восстановление 805 всех 64 разрядов регистров общего назначения при переключении контекста, несмотря на то, что программа, в которой происходит переключения контекста, действует в 32-разрядном режиме. Таким образом, программа видит только половины регистров, то есть только 32 разряда из 64 разрядов каждого регистра. Остальные 32 разряда реализованных регистров "скрыты" от 32-разрядной программы. 32 разряда известных регистров могут использоваться для адресации, и, несмотря на то, что компьютерная система поддерживает 64-разрядную адресацию, ОС способна осуществлять управление посредством динамической трансляции адреса, в результате чего 32-разрядная программа манипулирует только 32 разрядами адреса в 32-разрядном режиме. 32-разрядный режим может считаться режимом младшего слова, поскольку программа использует только младшее слово (32-разрядное слово) образованного двойным словом (64-разрядного) регистра. Прикладная программа действует под управлением ОС и активизирует ОС с целью обеспечить выполнение ОС некоторых функций. Эта "активизация" осуществляется путем операции 804 переключения контекста с сохранением 805 состояния прикладной программы и загрузкой 807 состояния выполняемой ОС, при этом выполнение ОС начинается по адресу, указанному при переключении контекста. Затем ОС может активизировать одну из прикладных программ операции 804 переключения контекста, чтобы позволить действовать прикладной программе. В некоторых прикладных программах использование ресурсов поддерживается путем предоставления каждой программе временного интервала для работы, а операция 804 переключения контекста используется для "прерывания" действующей программы по истечении определенного времени, чтобы позволить ОС распределить другой временной интервал другой прикладной программе.
Доступность функции старшего слова может регулироваться разрядом или полем, который должен быть установлен в машине, чтобы разрешать функцию старшего слова. Когда функция старшего слова разрешена, 32-разрядная программа может воспользоваться "скрытой" частью регистра путем выполнения новой команды "функции старшего слова". Могут быть предусмотрены другие новые команды "функции старшего слова" команды, придающие новую функцию командам, в которых используются регистры младших слов.
В большинстве этих команд осуществляются манипуляции только со старшим словом регистров. В некоторых командах предусмотрены варианты манипуляции со старшим словом одного исходного регистра с помощью младшего слова другого исходного регистра, при этом результат помещается в старшее слово целевого регистра (например, AHHLR). Команда RISBLG служит аналогом на основе младшего слова команды RISBHG на основе старшего слова. RISBHG и RISBLG обеспечивают значительную гибкость при реализации ряда псевдокоманд (с помощью программы на языке ассемблера).
Как упоминалось выше, в архитектурах процессоров применяются регистры общего назначения (РОН), доступные для команд архитектуры. Программа может воспользоваться данными в РОН, которые могут быть реализованы в быстродействующей памяти, например, заделанных защелках на микросхеме для обеспечения более высокой производительности, чем при хранении данных в менее быстродействующем основном запоминающем устройстве, которое часто реализуется посредством сложных механизмов динамической трансляции адреса. В некоторых архитектурах, таких как система x86, имеющая 64 РОН, размер каждого РОН постепенно увеличивался с 8 разрядов до 16, 32 и в настоящее время 64 разрядов. Тем не менее, поскольку число доступных для команды РОН ((64 в системе x86), определяемое числом разрядов (6 в системе x86) поля РОН в команде) остается таким же, программы, записанные для более старой команды, имеющей, например, 8-разрядные РОН, по-прежнему будут действовать в более новых архитектурах, имеющих, например, 32-разрядные РОН. Так, машина, имеющая 32-разрядные РОН, которая действует в 8-разрядном режиме, будет обеспечивать доступ только к 8 младшим разрядам каждого 32-разрядного РОН. Тем не менее, при переключении контекста, 32-разрядная операционная система (ОС) всегда будет сохранять и восстанавливать полные 32 разряда каждого РОН.
При реализации системы IBM z/Architecture машина может иметь 16 РОН, каждый из которых состоит из 64 разрядов (разрядов 0-63), но в ней может действовать прикладная программа, записанная для 32-разрядных регистров в 32-разрядном режиме. 32 разрядами могут являться младшие 32 разряда РОН (разряда 32-63), при этом старшие 32 разряда (разряды 0-31) не доступны (скрыты) в 32-разрядном режиме работы. Прикладная программа не имеет возможности использовать старшие 32 разряда РОН, поскольку они невидимы для программы. В одном из примеров прикладная программа могла быть записана для 32-разрядной машины предыдущего поколения, имеющей только 32-разрядные регистры с адресацией 24 или 32 разрядов логических адресов в памяти. 32-разрядный режим позволяет 32-разрядной прикладной программе согласно примеру действовать в более новой машине с архитектурой, поддерживающей 64-разрядные РОН, имеющей 64-разрядную операционную систему (ОС) и поддерживающей 64-разрядные прикладные программы в 64-разрядном режиме. В другой архитектуре, рассчитанной на 32-разрядные РОН, может быть предусмотрен набор 32-разрядных "скрытых РОН", невидимых для прикладных программ.
Предусмотрен "режим функции старшего слова", который позволяет поднаберу команд получать доступ к скрытым или старшим РОН, при этом остальной набор команд имеет доступ к структурированным или младшим РОН.
В "режиме функции старшего слова" поднабор команд предпочтительно может получать доступ к старшим РОН только в одном из вариантов осуществления, а в другом варианте осуществления в поднаборе команд может быть задано поле РОН, относящееся к старшим РОН, и другое поле РОН, относящееся к младшим РОН.
В другом предпочтительном варианте осуществления для генерирования адресов основной памяти в "режиме функции старшего слова" могут использоваться только младшие РОН.
В одном из вариантов осуществления приложения, выполняющиеся в "режиме функции старшего слова", могут сосуществовать с приложениями, Сне выполняющимися в "режиме функции старшего слова". Приложениями, не выполняющимися в режиме функции старшего слова, могут являться приложения 32-разрядных РОН или приложения 64-разрядных РОН. В этом примере РОН машины, имеющей 64 разряда, используются с приложениями, записанными для 32-разрядных РОН, однако рассматриваемые варианты осуществления применимы в РОН машины с любым числом разрядов (16, 24, 32, 48, 64, 128), в которой действуют приложения, записанные для РОН с меньшим числом разрядов (8, 16, 24, 32, 48, 64). Кроме того, скрытые регистры в режиме функции старшего слова могут использовать только указанную часть скрытых POH, в результате чего в 32-разрядной прикладной программе из предыдущего примера скрытыми регистрами, доступными в режиме функции старшего слова для некоторых команд, могут являться младшие 8 или 16 разрядов старших 32 разрядов 64-разрядных РОН, а другими скрытыми регистрами могут являться старшие 8 или 16 разрядов старших 32 разрядов, например 65-разрядных РОН. Хотя идеи этих вариантов осуществления представлены с использованием системы z/Architecture и/или архитектуры х86, специалисты в данной области техники смогут легко предложить другие варианты осуществления в свете изложенных идей.
В одном из примеров осуществления системы z/Architecture функция старшего слова эффективно обеспечивает шестнадцать дополнительных 32-разрядных регистров (старших регистров слова) для выбранных 32-разрядных команд путем использования ранее недоступных старших разрядов 0-31 шестнадцати 64-разрядных регистров общего назначения (разрядов 0-63). В одном из вариантов осуществления функция старшего слова может поддерживать следующие команды с мнемоническими обозначениями их функций (например, AHHHR для ADD HIGH):
сложение старших разрядов (ADD HIGH) (AHHHR, AHHLR),
сложение старших разрядов с непосредственной адресацией (ADD IMMEDIATE HIGH) (AIH),
логическое сложение старших разрядов (ADD LOGICAL HIGH) (ALHHHR, ALHHLR),
логическое сложение старших разрядов со знаком с непосредственной адресацией (ADD LOGICAL WITH SIGNED IMMEDIATE HIGH) (ALSIH, ALSIHN),
относительный переход по счетцу старших разрядов (BRANCH RELATIVE ON COUNT HIGH) (BRCTH),
сравнение старших разрядов (COMPARE HIGH) (CHHR, CHLR, CHF),
сравнение старших разрядов с непосредственной адресацией (COMPARE IMMEDIATE HIGH) (CIH),
логическое сравнение старших разрядов (COMPARE LOGICAL HIGH) (CLHHR, CLHLR, CLHF),
логическое сравнение старших разрядов с непосредственной адресацией (COMPARE LOGICAL IMMEDIATE HIGH) (CLIH),
загрузка старшего байта (LOAD BYTE HIGH) (LBH),
загрузка старшего полуслова (LOAD HALFWORD HIGH) (LHH),
загрузка старшего разряда (LOAD HIGH) (LFH),
загрузка старшего логического символа (LOAD LOGICAL CHARACTER HIGH) (LLCH),
загрузка старшего логического полуслова (LOAD LOGICAL HALFWORD HIGH) (LLHH),
поворот с последующей вставкой выбранных старших разрядов (ROTATE THEN INSERT SELECTED BITS HIGH) (RISBHG),
поворот с последующей вставкой выбранных младших разрядов (ROTATE THEN INSERT SELECTED BITS LOW) (RISBLG),
сохранение старшего символа (STORE CHARACTER HIGH) (STCH),
сохранение старшего полуслова (STORE HALFWORD HIGH) (STHH),
сохранение старшего разряда (STORE HIGH) (STFH),
вычитание старшего разряда (SUBTRACT HIGH) (SHHHR, SHHLR),
логическое вычитание старшего разряда (SUBTRACT LOGICAL HIGH) (SLHHHR, SLHHLR).
Когда установлено средство доступа с блокировкой, могут быть доступны следующие общие команды:
загрузка и сложение (LOAD AND ADD) (LAA, LAAG),
загрузка и логическое сложение (LOAD AND ADD LOGICAL) (LAAL, LAALG),
загрузка и И (LOAD AND AND) (LAN, LANG),
загрузка и исключающее ИЛИ (LOAD AND EXCLUSIVE OR) (LAX, LAXG),
загрузка и ИЛИ (LOAD AND OR) (LAO, LAOG),
разделенная загрузка пары (LOAD PAIR DISJOINT) (LPD, LPDG).
Когда установлено средство загрузки/сохранения в зависимости от состояния, могут быть доступны следующие общие команды:
условная загрузка (LOAD ON CONDITION) (LOC, LGOC, LGROC, LROC),
условное сохранение (STORE ON CONDITION) (STOC, STGOC).
Когда установлено средство индивидуальных операндов, могут быть доступны следующие общие команды:
сложение (ADD) (ARK, AGRK),
сложение с непосредственной адресацией (ADD IMMEDIATE) (AHIK, AGHIK),
логическое сложение с непосредственной адресацией (ADD LOGICAL IMMEDIATE) (ALRK, ALGRK),
логическое сложение чисел со знаком с непосредственной адресацией (ADD LOGICAL WITH SIGNED IMMEDIATE) (ALHSIK, ALGHSIK),
И (AND) (NRK, NGRK),
исключающее ИЛИ (EXCLUSIVE OR) (XRK, XGRK),
ИЛИ (OR) (ORK, OGRK),
однопорядковый сдвиг влево (SHIFT LEFT SINGLE) (SLAK),
однопорядковый логический сдвиг влево (SHIFT LEFT SINGLE LOGICAL) (SLLK),
однопорядковый сдвиг вправо (SHIFT RIGHT SINGLE) (SRAK),
однопорядковый логический сдвиг вправо (SHIFT RIGHT SINGLE LOGICAL) (SRLK),
вычитание (SUBTRACT) (SRK, SGRK),
логическое вычитание (SUBTRACT LOGICAL) (SLRK, SLGRK).
Примеры команд с использованием функции старшего слова
Далее приведены примеры команд, в которых может применяться функция старшего слова.
ADD HIGH (формат RRF)
При выполнении команды компьютерной системой второй операнд складывается с третьим операндом, а их сумма помещается в местоположение первого операнда. Операнды и сумма обрабатываются как 32-разрядные двоичные целые числа со знаком. Первый и второй операнды находятся в разрядах 0-31 регистров R1 и R2 общего назначения, соответственно; разряды 32-63 регистра R1 общего назначения остаются без изменения, а разряды 32-63 регистра общего назначения R2 отбрасываются. В случае кода операции AHHHR третий операнд находится в разрядах 0-31 регистра общего назначения R3; разряды 32-63 регистра отбрасываются. В случае кода операции AHHLR третий операнд находится в разрядах 32-63 регистра общего назначения R3; разряды 0-31 регистра отбрасываются. В случае переполнения для получения результата допускается любой перенос в знаковый разряд, отбрасывается любой перенос из знакового разряда и устанавливается код 3 условия. Если маска переполнения с фиксированной точкой равна единице, происходит программное прерывание по переполнению с фиксированной точкой.
Результирующий код условия:
0 - нулевой результат; без переполнения
1 - результат менее нуля; без переполнения
2 - результат более нуля; без переполнения
3 - переполнение.
Программные исключения:
переполнение с фиксированной точкой,
операция (если не установлена функция старшего слова).
ADD IMMEDIATE HIGH (формат RIL)
При выполнении команды компьютерной системой второй операнд складывается с третьим операндом, а их сумма помещается в местоположение первого операнда. Операнды и сумма обрабатываются как 32-разрядные двоичные целые числа со знаком. Первый операнд находится в разрядах 0-31 регистра R1 общего назначения; разряды 32-63 регистра остаются без изменения. В случае переполнения для получения результата допускается любой перенос в знаковый разряд, отбрасывается любой перенос из знакового разряда и устанавливается код 3 условия. Если маска переполнения с фиксированной точкой равна единице, происходит программное прерывание по переполнению с фиксированной точкой.
Результирующий код условия:
0 - нулевой результат; без переполнения
1 - результат менее нуля; без переполнения
2 - результат более нуля; без переполнения
3 - переполнение.
Программные исключения:
переполнение с фиксированной точкой,
операция (если не установлена функция старшего слова).
ADD LOGICAL HIGH (формат RRF)
При выполнении команды компьютерной системой второй операнд складывается с третьим операндом, а их сумма помещается в местоположение первого операнда. Операнды и сумма обрабатываются как 32-разрядные двоичные целые числа без знака. Первый и второй операнды находятся в разрядах 0-31 регистров R1 и R2 общего назначения, соответственно; разряды 32-63 регистра R1 общего назначения остаются без изменения, а разряды 32-63 регистра общего назначения R2 отбрасываются. В случае кода операции ALHHHR третий операнд находится в разрядах 0-31 регистра общего назначения R3; разряды 32-63 регистра отбрасываются. В случае кода операции ALHHLR третий операнд находится в разрядах 32-63 регистра общего назначения R3; разряды 0-31 регистра отбрасываются.
Результирующий код условия:
0 - нулевой результат; без переноса
1 - ненулевой результат; без переноса
2 - нулевой результат; перенос
3 - ненулевой результат; перенос.
Программные исключения:
операция (если не установлена функция старшего слова).
ADD LOGICAL WITH SIGNED IMMEDIATE HIGH (формат RIL)
При выполнении команды компьютерной системой второй операнд складывается с третьим операндом, а их сумма помещается в местоположение первого операнда. Первый операнд и сумма обрабатываются как 32-разрядные двоичные целые числа без знака. Второй операнд обрабатывается как 32-разрядное двоичное целое число со знаком. Первый операнд находится в разрядах 0-31 регистра R1 общего назначения; разряды 32-63 регистра остаются без изменения.
Результирующий код условия:
Для ALSIH код устанавливается следующим образом:
0 - нулевой результат; без переноса
1 - ненулевой результат; без переноса
2 - нулевой результат; перенос
3 - ненулевой результат; перенос.
Для ALSIHN код остается без изменения.
Программные исключения:
операция (если не установлена функция старшего слова).
BRANCH RELATIVE ON COUNT HIGH (форматы RI, RIL)
При выполнении команды компьютерной системой из первого операнда вычитается единица, а результат помещается в местоположение первого операнда. В случае BRANCH RELATIVE ON COUNT (код операции BRCT) первый операнд и результат обрабатываются как 32-разрядные двоичные целые числа в разрядах 32-63 регистра R1 общего назначения без учета переполнения; разряды 0-31 регистра остаются без изменения. В случае BRANCH RELATIVE ON COUNT HIGH (код операции BRCTH) первый операнд и результат обрабатываются как 32-разрядные двоичные целые числа в разрядах 0-31 регистра R1 общего назначения без учета переполнения; разряды 32-63 регистра остаются без изменения. В случае BRANCH RELATIVE ON COUNT (код операции BRCTG) первый операнд и результат обрабатываются как 64-разрядные двоичные целые числа без учета переполнения. При нулевом результате продолжается нормальный порядок следования команд с обновленным адресом команд. При ненулевом результате адрес команд в текущем PSW заменяется адресом перехода. Содержимым поля I2 является двоичное целое число со знаком, указывающее количество полуслов, которое складываются с адресом команды для генерирования адреса перехода.
Код условия: без изменения.
Программные исключения:
операция (BRCTH, если не установлена функция старшего слова)
Примечания к программированию
1. Операция является такой же, как команда BRANCH ON COUNT, за исключением средства указания адреса перехода.
2. Первый операнд и результат могут рассматриваться как двоичные целые числа со знаком или без знака, поскольку результат двоичного вычитания является одинаковым в обоих случаях.
3. При начальном счете, равном единице, результат равен нулю, и переход не происходит; при начальном счете, равном нулю, результат равен -1, что вызывает выполнение перехода; при начальном счете, равном -1, результат равен -2, что вызывает выполнение перехода, и т.д. На протяжении цикла переход происходит при каждом выполнении команды, пока результате снова не станет, равным нулю.
Следует отметить, что с учетом диапазона чисел в случае BRCT при начальном счете, равном - 231, результатом является положительная величина 231-1, а в случае BRCTG при начальном счете, равном - 263 результатом является положительная величина 263-1,4. Когда команда является целью команды выполняемого типа, переход является относительным целевого адреса.
COMPARE HIGH (форматы RRE, RXY), COMPARE IMMEDIATE HIGH (формат RIL)
При выполнении команды компьютерной системой первый операнд сравнивается со вторым операндом, а результат указывается в коде условия. Операнды обрабатываются как 32-разрядные двоичные целые числа со знаком. Первый операнд находится в разрядах 0-31 регистра R1 общего назначения; разряды 32-63 регистра отбрасываются. В случае COMPARE HIGH (код операции CHHR) второй операнд находится в разрядах 0-31 регистра общего назначения R2; разряды 32-63 регистра отбрасываются. В случае COMPARE HIGH (код операции CHLR) второй операнд находится в разрядах 32-63 регистра общего назначения R2; разряды 0-31 регистра отбрасываются. Смещение CHF обрабатывается как 20-разрядное двоичное целое число со знаком.
Результирующий код условия:
0 - операнды равны
1 - первый операнд является младшим
2 - первый операнд является старшим
3 - -
Программные исключения:
доступ (только операнд 2 CHF),
операция (если не установлена функция старшего слова).
COMPARE LOGICAL HIGH (форматы RRE, RXY), COMPARE LOGICAL IMMEDIATE HIGH (формат RIL)
При выполнении команды компьютерной системой, первый операнд сравнивается со вторым операндом, а результат указывается в коде условия. Операнды обрабатываются как 32-разрядные двоичные целые числа без знака. Первый операнд находится в разрядах 0-31 регистра R1 общего назначения; разряды 32-63 регистра отбрасываются. В случае COMPARE LOGICAL HIGH (код операции CLHHR) второй операнд находится в разрядах 0-31 регистра общего назначения R2; разряды 32-63 регистра отбрасываются. В случае COMPARE LOGICAL HIGH (код операции CLHLR), второй операнд находится в разрядах 32-63 регистра общего назначения R2; разряды 0-31 регистра отбрасываются. Смещение CLHF обрабатывается как 20-разрядное двоичное целое число со знаком.
Результирующий код условия:
0 - операнды равны
1 - первый операнд является младшим
2 - первый операнд является старшим
3 - -
Программные исключения:
доступ (только операнд 2 CLHF),
операция (если не установлена функция старшего слова).
LOAD BYTE HIGH (формат RXY)
При выполнении команды компьютерной системой осуществляется расширение знакового разряда второго операнда, и он помещается в местоположение первого операнда. Второй операнд имеет длину 1 байт и обрабатывается как 8-разрядное двоичное целое число со знаком. Первый операнд обрабатывается как 32-разрядное двоичное целое число со знаком в разрядах 0-31 регистра R1 общего назначения; разряды 32-63 регистра остаются без изменения. Смещение обрабатывается как 20-разрядное двоичное целое число со знаком.
Код условия: без изменения.
Программные исключения:
доступ (вызов операнда 2),
операция (если не установлена функция старшего слова).
LOAD HALFWORD HIGH (формат RXY)
При выполнении команды компьютерной системой, осуществляется расширение знакового разряда второго операнда, и он помещается в местоположение первого операнда. Второй операнд имеет длину 2 байта и обрабатывается как 16-разрядное двоичное целое число со знаком. Первый операнд обрабатывается как 32-разрядное двоичное целое число со знаком в разрядах 0-31 регистра R1 общего назначения; разряды 32-63 регистра остаются без изменения. Смещение обрабатывается как 20-разрядное двоичное целое число со знаком.
Код условия: без изменения.
Программные исключения:
доступ (вызов операнда 2),
операция (если не установлена функция старшего слова).
LOAD HIGH (формат RXY)
При выполнении команды компьютерной системой второй операнд помещается без изменения в местоположение первого операнда. Второй операнд имеет 32 разряда, а первый операнд находится в разрядах 0-31 регистра R1 общего назначения; разряды 32-63 регистра остаются без изменения. Смещение обрабатывается как 20-разрядное двоичное целое число со знаком.
Код условия: без изменения.
Программные исключения:
доступ (вызов операнда 2),
операция (если не установлена функция старшего слова).
LOAD LOGICAL CHARACTER HIGH (формат RXY)
При выполнении команды компьютерной системой 1-байтовый второй операнд помещается в разряды 24-31 регистра R1 общего назначения, а нули помещаются в разряды 0-23 регистра R1 общего назначения; разряды 32-63 регистра R1 общего назначения остаются без изменения. Смещение обрабатывается как 20-разрядное двоичное целое число со знаком.
Код условия: без изменения.
Программные исключения:
доступ (вызов операнда 2),
операция (если не установлена функция старшего слова).
LOAD LOGICAL HALFWORD HIGH (формат RXY)
При выполнении команды компьютерной системой 2-байтовый второй операнд помещается в разряды 16-31 регистра R1 общего назначения, а нули помещаются в разряды 0-15 регистра R1 общего назначения; разряды 32-63 регистра R1 общего назначения остаются без изменения. Смещение обрабатывается как 20-разрядное двоичное целое число со знаком.
Код условия: без изменения.
Программные исключения:
доступ (вызов операнда 2),
операция (если не установлена функция старшего слова).
ROTATE THEN INSERT SELECTED BITS HIGH (формат RIE), ROTATE THEN INSERT SELECTED BITS LOW (формат RIE)
При выполнении команды компьютерной системой 64-разрядный второй операнд поворачивается влево на число разрядов, указанное в пятом операнде. Каждый разряд, сдвинутый без сохранения из крайнего левого разряда операнда, повторно вводится в крайней правый разряд операнда. Выбранные разряды повернутого второго операнда заменяю содержимое соответствующих разрядов первого операнда. В случае ROTATE THEN INSERT SELECTED BITS HIGH первый операнд находится в разрядах 0-31 регистра R1 общего назначения, а разряды 32-63 регистра остаются без изменения. В случае ROTATE THEN INSERT SELECTED BITS LOW первый операнд находится в разрядах 32-63 регистра R1 общего назначения, а разряды 0-31 регистра остаются без изменения. Второй операнд остается без изменения в регистре общего назначения R2. В случае ROTATE THEN INSERT SELECTED BITS HIGH разряды 3-7 полей I3 и I4 (соответственно, разряды 19-23 и 27-31 команды) с двоичным нулем, присоединенным слева к каждому из них, образуют 6-разрядные двоичные целые числа без знака, указывающие стартовый и концевой разряды (включительно) выбранного диапазона разрядов в первом операнде и во втором операнде после поворота. Когда концевой разряд является меньшим, чем стартовый разряд, диапазон выбранных разрядов охватывает разряды с 31 по 0. Таким образом, стартовый и концевой разряды выбранного диапазона разрядов всегда находятся в диапазоне от 0 до 31. В случае ROTATE THEN INSERT SELECTED BITS LOW разряды 3-7 полей I3 и I4 с двоичной единицей, присоединенной слева к каждому из них, образуют 6-разрядные двоичные целые числа без знака, указывающие стартовый и концевой разряды (включительно) выбранного диапазона разрядов в первом операнде и во втором операнде после поворота. Когда концевой разряд является меньшим, чем стартовый разряд, диапазон выбранных разрядов охватывает разряды с 63 по 32. Таким образом, стартовый и концевой разряды выбранного диапазона разрядов всегда находятся в диапазоне от 32 до 63. Разряды 2-7 поля 15 (разряды 34-39 команды) содержат двоичное целое число без знака, указывающее число разрядов, на которое повернут влево второй операнд. Разряд 0 поля I4 (разряд 24 команды) содержит управляющий разряд обнуления (Z) остающихся разрядов. Управляющий разряд Z показывает, что установлены остающиеся разряды первого операнда (то есть те разряды, если они существуют, которые находятся вне заданного диапазона). Когда разряд Z равен нулю, остающиеся разряды первого операнда не изменяются. Когда разряд Z равен единице, остающиеся разряды первого операнда устанавливаются на ноль. Описанные непосредственные поля являются следующими: разряды 0-2 поля I3 и разряды 1-2 поля I4 (разряды 16-19 и 25-26 команды) зарезервированы и должны содержать нули, в противном случае программа может оказаться несовместимой в будущем. Разряды 0-1 поля 15 (разряды 32-33 команды) отбрасываются.
Код условия: без изменения
Программные исключения:
операция (если не установлена функция старшего слова).
Примечания к программированию:
1. Хотя установлено, что разряды 2-7 поля I5 содержат двоичное целое число без знака, указывающее число разрядов, на которое повернут влево второй операнд, может быть закодирована отрицательная величина, которая эффективно указывает степень поворота вправо.
2. Первый операнд всегда используется в не повернутом виде. Когда в полях R1 и R2 указан один и тот же регистр, сначала осуществляется поворот величина, содержащейся в регистре, а затем выбранные разряды повернутой величины вставляются в соответствующие разряды содержимого не повернутого регистра.
3. В синтаксисе ассемблера операнд I5 операнд, содержащий степень поворота, рассматривается как необязательный. Когда поле I5 не закодировано, подразумевается нулевая степень поворота.
4. В поле 14 содержится значение как управляющего разряда обнуления остающихся разрядов (в разряде 0), так и концевых разрядов (в разрядах 2-7). Например, чтобы вставить разряды 40-43 регистра 7 в соответствующие разряды регистра 5 (без поворота) и обнулить остающиеся разряды в правой части регистра 5, программатор может закодировать Х′80′ на отображение управляющего разряда обнуления остающихся разрядов, который в сумме с концевом разрядом образует поле 14. Для версий RISBHG и RISBLG обнуления остающихся разрядов в высокоуровневом ассемблере (HLASM) используются альтернативные мнемонические обозначения в виде RISBHGZ и RISBLHZ, соответственно. Суффикс "Z" в мнемоническом обозначении означает, что с указанным полем 14 осуществлена операция ИЛИ с использованием значения Х′80′ при генерировании объектного кода. Далее рассмотрен один из эквивалентов приведенного выше примера с использованием мнемоники с суффиксом Z.
5. В некоторых моделях повышение эффективности RISBHG и RISBLG может обеспечиваться путем установки управляющего разряда обнуления остающихся разрядов на единицу (или с использованием мнемонического суффикса Z).
6. В отличие от команды ROTATE THEN INSERT SELECTED BITS, которая устанавливает код условия, команды ROTATE THEN INSERT SELECTED BITS HIGH и ROTATE THEN INSERT SELECTED BITS LOW не устанавливают код условия.
STORE CHARACTER HIGH (формат RXY)
При выполнении команды компьютерной системой разряды 24-31 регистра R1 общего назначения помещаются без изменения в местоположение второго операнда. Второй операнд имеет длину 1 байт. Смещение обрабатывается как 20-разрядное двоичное целое число со знаком.
Код условия: без изменения.
Программные исключения:
доступ (сохранение операнда 2),
операция (если не установлена функция старшего слова).
STORE HALFWORD HIGH (формат RXY)
При выполнении команды компьютерной системой разряды 16-31 регистра R1 общего назначения помещаются без изменения в местоположение второго операнда. Второй операнд имеет длину 2 байта. Смещение обрабатывается как 20-разрядное двоичное целое число со знаком.
Код условия: без изменения.
Программные исключения:
доступ (сохранение операнда 2),
операция (если не установлена функция старшего слова).
STORE HIGH (формат RXY)
При выполнении команды компьютерной системой, первый операнд помещается без изменения в местоположение второго операнда. Первый операнд находится в разрядах 0-31 регистра R1 общего назначения, а второй операнд содержит 32 хранящихся разряда. Смещение обрабатывается как 20-разрядное двоичное целое число со знаком.
Код условия: без изменения.
Программные исключения:
доступ (сохранение операнда 2),
операция (если не установлена функция старшего слова).
SUBTRACT HIGH (формат RRF)
При выполнении команды компьютерной системой третий операнд вычитается из второго операнда, а разность помещается в местоположение первого операнда. Операнды и разность обрабатываются как 32-разрядные двоичные целые числа со знаком. Первый и второй операнды находятся в разрядах 0-31 регистров R1 и R2 общего назначения, соответственно; разряды 32-63 регистра R1 общего назначения остаются без изменения, а разряды 32-63 регистра общего назначения R2 отбрасываются. В случае кода операции SHHHR третий операнд находится в разрядах 0-31 регистра общего назначения R3; разряды 32-63 регистра отбрасываются. В случае кода операции SHHLR третий операнд находится в разрядах 32-63 регистра общего назначения R3; разряды 0-31 регистра отбрасываются. В случае переполнения для получения результата допускается любой перенос в знаковый разряд, отбрасывается любой перенос из знакового разряда и устанавливается код 3 условия. Если маска переполнения с фиксированной точкой равна единице, происходит программное прерывание по переполнению с фиксированной точкой.
Результирующий код условия:
0 - нулевой результат; без переполнения
1 - результат менее нуля; без переполнения
2 - результат более нуля; без переполнения
3 - переполнение.
Программные исключения:
переполнение с фиксированной точкой,
операция (если не установлена функция старшего слова).
SUBTRACT LOGICAL HIGH (формат RRF)
При выполнении команды компьютерной системой, третий операнд вычитается из второго операнда, а разность помещается в местоположение первого операнда. Операнды и разность обрабатываются как 32-разрядные двоичные целые числа без знака. Первый и второй операнды находятся в разрядах 0-31 регистров R1 и R2 общего назначения, соответственно; разряды 32-63 регистра R1 общего назначения остаются без изменения, а разряды 32-63 регистра общего назначения R2 отбрасываются. В случае кода операции SLHHHR третий операнд находится в разрядах 0-31 регистра общего назначения R3; разряды 32-63 регистра отбрасываются. В случае кода операции SLHHLR третий операнд находится в разрядах 32-63 регистра общего назначения R3; разряды 0-31 регистра отбрасываются.
Результирующий код условия:
0 - -
1 - ненулевой результат; отрицательный перенос,
2 - нулевой результат; без отрицательного переноса,
3 - ненулевой результат; без отрицательного переноса.
Программные исключения:
операция (если не установлена функция старшего слова).
На фиг.6 проиллюстрирован один из примеров регистра общего назначения (РОН), имеющего 16 РОН (каждый из которых содержит разряды 32-63 в режиме малых РОН и разряды 0-63 в режиме больших РОН). В компьютере, имеющем первое число (16) больших РОН, может быть увеличено эффективное число регистров общего назначения (РОН), доступных для команд программы, каждая из которых содержит код операции и одно или несколько полей РОН для указания соответствующих РОН, при этом каждый большой РОН состоит из первой части (31-63) и второй части (0-31). Как показано на фиг.7А, компьютер вызывает для выполнения команды, представляющие собой команды из первого набора 701, второго набора 702 или третьего набора 710. Команды из первого набора имеют доступ только к первой части любого РОН, команды из второго набора доступ ко второй части любого РОН, команды третьего набора имеют доступ ко всему РОН, включая первую часть и вторую часть. На шаге 703 компьютер находится, например, в режиме малых РОН и выполняет команды из первого набора команд 707 для доступа к первым частям, при этом на шаге выполнения генерируются адреса памяти для доступа к операндам, хранимым в памяти, на основании малых РОН или для доступа к операндам малых РОН, каждый из которых состоит из первой части 707. При нахождении компьютера в режиме малых РОН на шаге 703 компьютер на шаге 705 выполняет команды 706 старшего слова из второго набора команд, предназначенного для доступа к указанным в командах вторым частям, при этом на шаге 708 выполнения генерируются адреса памяти для доступа к операндам, хранимым в памяти, на основании малых РОН или для доступа к операндам малых РОН, которые состоят из указанной в командах второй части. Когда на шаге 704 компьютер находится в режиме больших РОН, каждый из которых состоит из первой части и второй части, компьютер выполняет команды из третьего набора команд, при этом на шаге выполнения генерируются адреса памяти для доступа к операндам, хранимым в памяти, на основании больших РОН или для доступа к операндам больших РОН, каждый из которых состоит из первой части и второй части.
При нахождении в режиме малых РОН компьютер на шаге 709 может генерировать исключительную ситуацию при выполнении операции в ответ на выполнение команд из второго набора команд.
Как показано на фиг.7Б, при выполнении команды из второго набора команд на шаге 751 может выполняться заданная соответствующим кодом операции функция на основании двух операндов с сохранением результатов, при этом заданной соответствующим кодом операции функцией является функция сложения двух операндов, функция сравнения двух операндов или функция 752 ИЛИ двух операндов.
При выполнении команды из второго набора команд может выполняться заданная соответствующим кодом операции функция на основании двух операндов с сохранением результатов, при этом заданной соответствующим кодом операции функцией является функция загрузки операнда из памяти или функция 753 сохранения операнда в памяти.
При выполнении команды из второго набора команд может выполняться заданная соответствующим кодом операции функция на основании двух операндов с сохранением результатов, при этом заданной соответствующим кодом операции функцией является функция поворота с последующей вставкой выбранных разрядов, предусматривающая поворот исходного операнда на заданную командой величину, а затем вставку выбранной части повернутого исходного операнда в выбранную часть целевого операнда 704.