Ввод-вывод: команды RWD и WWD

Детальное рассмотрение организации ввода-вывода и преобразования данных слишком сложно для нас на данном этапе. Пока мы будем использовать только пару специальных команд, RWDи WWD, для выполнения операций ввода-вывода. Подробное изучение указанных процессов, которым мы займёмся в дальнейшем, требует более близкого знакомства с основными принципами программирования на языке ассемблера.

RWDи WWDявляются макрокомандами; они не являются собственно командами языка ассемблера. Макрокоманды, или просто макра, являются командами, которые могут быть внесены в любое место программы на языке ассемблера простым указанием имени макро в поле операции. В результате макрокоманда заменяется последовательностью соответствующих ей команд на языке ассемблера. Вопросы, связанные с макропрограммированием, рассматриваются в гл. 18.

Программное обеспечение фирмы IBMпредусматривает возможность использования большого количества макро, освобождающих программиста от программирования многих служебных функций и стандартных работ. RWDи WWDиспользуются аналогично, хотя они не входят в список макрокоманд, предоставляемых фирмой IBM. В каждой конкретной вычислительной установке могут быть предусмотрены возможности применения подобных макро. Если вам придется иметь дело с системой, в которой для ввода-вывода используются иные макро, то при желании системный программист может ввести привычные вам макро RWDи WWDв систему.

RWDR1 ReadWorD Информация с карты данныхСтатья 368 - Картинка 1R1

Макрокоманда RWD(ЧТЕНИЕ СЛОВА) преобразует десятичное число, отперфорированное на карте, в 32-разрядное двоичное, целое и помещает результат в регистр R1. Числа на карте записаны в так называемом свободном формате, т. е. число может располагаться где угодно на карте,быть положительным или отрицательным и заключаться

между -2147483648 и 2147483647, соответственно минимальным и максимальным числами, которые возможно представить в виде 32- разрядного двоичного числа. Числа, вводящиеся по команде RWD, не должны содержать внутри себя пробелов, запятых, десятичных точек и других отличных от цифр символов, за исключением знаков + или — перед числом. Такими числами, например, являются и

20

-30

и

+123456789

Такие числа, как

1,000

—33.2

$68.32

43896

не могут быть введены по команде RWD. При попытке чтения таких чисел фиксируется ошибка.

По команде RWDпроизводится чтение одной карты, т. е. на каждой карте должно помещаться только одно число. Карта не может быть прочитана более одного раза. Последовательность из пяти команд RWDобеспечивает чтение пяти перфокарт в том порядке, в котором они были’ помещены на устройство ввода.

Итак, если на карте отперфорировано число

-30

и выполнена команда

RWD5

то в результате

(5) = FFFFFFD0

Если мы имеем карты данных с числами

-3

39

257

то после выполнения последовательности команд

RWD6

RWD10

RWD12

регистры будут содержать

(6) = FFFFFFFD

(10)=00000027

(12) = 00000101

WWD

R1

Write WorD

Печать (Rl)

Макро WWD(ЗАПИСЬ СЛОВА) преобразует двоичные целые, находящиеся в R1, к десятичному виду и производит печать результата. Если число отрицательно, то перед ним печатается знак минус. Содержимое R1 в результате выполнения операции не изменяется. Если

(2) = 00 00 0040

(6) = FFFFFF6C

(7) = 00 000 100

то после выполнения команд

WWD2

WWD7

WWD6

будет напечатано следующее:

64

256

-148

Числа появляются в указанном порядке по одному в строке.

РЕЗЮМЕ

Существует разделение машинных команд по типам:

RR: регистр-регистр

RX: регистр-индексированная память

RS: регистр-память

SS: память-память

SI: память-непосредственный операнд

и по функциям:

команды пересылки

арифметические

сравнения

перехода

ввода-вывода

В табл. 4.1 представлены все команды, обсуждавшиеся в этой главе.

Мнемоника

Операнды

Название

Действие

LR

R1,R2

Load Register

R1Статья 368 - Картинка 2(R2)

LCR

R1,R2

Load Complement Register

R1Статья 368 - Картинка 3— (R2)

LPR

R1,R2

Load Positive Register

R1Статья 368 - Картинка 4l(R2)|

LNR

R1,R2

Load Negative Register

R1Статья 368 - Картинка 5— l(R2)|

L

R1,=F'd'

Load (литеральный операнд)

R1Статья 368 - Картинка 6d

AR

R1,R2

Add Register

R1Статья 368 - Картинка 7(R1) + (R2)

SR

R1,R2

Subtract Register

R1Статья 368 - Картинка 8(R1) - (R2)

MR

R1,R2

Multiply Register

R1,R1+1Статья 368 - Картинка 9(R1+1) X (R2)

DR

R1,R2

Divide Register

(R1,R1+1)Статья 368 - Картинка 10(R2):

частноеСтатья 368 - Картинка 11R1+1

остатокСтатья 368 - Картинка 12R1

RWD

R1

ReadWorD(макро) Число с карты данныхСтатья 368 - Картинка 13R1

WWD

R1

Write WorD (макро)

(R1)Статья 368 - Картинка 14печать