Команды работы с полусловами

{toc_noshowall}В виде 32-битовых слов могут быть представлены целые числа от — 231 до 231 — 1 или от — 2 147 483 648 до 2 147 483 647. В большинстве применений вычислительного характера редко приходится иметь дело со столь большими числами. Числа, необходимые для индексирования, значения счетчика циклов и многие другие числовые данные могут быть записаны в виде полуслов, содержащих по 16 двоичных разрядов. В такой форме можно представить целые от —215 до 215 —1 (от —32 768 до 32 767).

При работе со значительными объемами информации, хранимыми в памяти, представление чисел в форме полуслов позволяет обеспечить значительную ее экономию (при этом, конечно, необходимо, чтобы числа допускали подобное представление). В Системе 360 предусмотрена подобная возможность путем введения различных команд (арифметических, пересылки, сравнения) работы с полусловами.

Все эти команды имеют формат RX, первым операндом в них является регистр общего назначения, вторым — полуслово памяти. При выборе полуслова из памяти в качестве операнда производится преобразование соответствующего числа в форму полного слова. Это достигается дублированием его знакового разряда в первых 16 битах слова. Так, например, если полуслово

1100 1001 0010 1010

используется как операнд, то оно сначала преобразуется к виду

1111 1111 1111 1111 1100 1001 0010 1010

поскольку рассматриваемое число отрицательно. Положительное число, записанное в форме полуслова

0000 0000 1000 0000

преобразуется в

0000 0000 0000 0000 0000 0000 1000 0000

Таким образом, сформированное полное слово используется в качестве операнда.

LH Rl,S2(X2) Load Half-word Rl(S2(X2))H

 

STH R 1,S2 (X2) STore Half-word (R1)HS2(X2)

По команде LH (ЗАГРУЗКА ПОЛУСЛОВА) полное слово, полученное из полуслова с адресом S2+(X2), попадает в регистр R1.

Пусть программа содержит следующие DC-предложения:

HONE DC Н'1'

HMFOUR DC Н' —4'

В результате выполнения команды

LH 3, HONE

в регистр 3 попадет число 00000001, а после выполнения команды

LH 8, HMFOUR

или

LH 8.HONE+2

регистр 8 после будет содержать FFFFFFFC.

Команда STH засылает младшие 16 битов (с 16 по 31) регистра R1 на место полуслова по адресу S2+(X2). Например, команда

STH 5,HW+6

заносит FFF0 в четвертое по порядку полуслово области HW, если перед ее выполнением регистр 5 содержал FFFFFFF0 (или 0186FFF0).

Арифметическими командами работы с полусловами являются следующие:

AH

R1,S2(X2)

Add Half-word

Rl(R1) + (S2(X2))H

SH

R1,S2(X2)

Subtract Half-word

Rl(R1)-(S2(X2))H

MH

R1,S2(X2)

Multiply Half-word

Rl(Rl)x(S2 (X2))H

Команды АН и SH совершенно аналогичны командам А и S соответственно, за исключением того, что операндами в первых двух командах являются регистр и полуслово, преобразуемое в полное слово перед выполнением операции. Признак результата вырабатывается точно так же, как и командами А иS.

Команда МН отличается от команд М и MR уже тем, что результат умножения помещается в один регистр. По команде МН вычисляется произведение содержимого регистра R1 и полуслова с адресом S2+ (X2). R1 может быть любым из 16 общих регистров; ограничение, действующее для команд М и MRи состоящее в том, что R1 должен иметь четный номер, в данном случае не накладывается.

Можно задавать литеральные константы в форме полуслов. Это делается так:

= Н'значение'

где в качестве «значения» может фигурировать любое десятичное число, представимое в виде полуслова. По команде

МН 3, = Н'4'

содержимое регистра 3 умножается на число 4.

В результате выполнения команды МН может получиться число длиной до 46 битов. Если результат не помещается в 32-разрядную сетку, то старшие разряды теряются. Сообщение об этом не выдается. Таким образом, при использовании команды МН нужно быть уверенными, что либо переполнение не произойдет, либо полученная часть результата нас устраивает.

Команда сравнения для полуслов описывается так:

СН R1,S2(X2) Compare Half-word Формирование признака

результата в соответствии со знаком разности

(Rl) — (S2(X2))H

При выполнении этой команды вычисляется разность между (R1) и содержимым полуслова с адресом S2+(X2) и вырабатывается соответствующий признак результата. Так, если область TESTS содержит

TESTS: 0010FF000004

и содержимое регистра 6 имеет следующий вид:

(6)=00000004

то команды

СН 6,TESTS

СН 6,TESTS+2

СН 6JESTS+4

будут устанавливать признак результата, указывающий на то, что вычисляемая при сравнении разность отрицательна, положительна или равна нулю соответственно.

Как и все остальные команды сравнения, команда СН не влияет на содержимое регистров или памяти.

Расскажи друзьям
 
Статьи раздела