Детальное рассмотрение организации ввода-вывода и преобразования данных слишком сложно для нас на данном этапе. Пока мы будем использовать только пару специальных команд, RWDи WWD, для выполнения операций ввода-вывода. Подробное изучение указанных процессов, которым мы займёмся в дальнейшем, требует более близкого знакомства с основными принципами программирования на языке ассемблера.
RWDи WWDявляются макрокомандами; они не являются собственно командами языка ассемблера. Макрокоманды, или просто макра, являются командами, которые могут быть внесены в любое место программы на языке ассемблера простым указанием имени макро в поле операции. В результате макрокоманда заменяется последовательностью соответствующих ей команд на языке ассемблера. Вопросы, связанные с макропрограммированием, рассматриваются в гл. 18.
Программное обеспечение фирмы IBMпредусматривает возможность использования большого количества макро, освобождающих программиста от программирования многих служебных функций и стандартных работ. RWDи WWDиспользуются аналогично, хотя они не входят в список макрокоманд, предоставляемых фирмой IBM. В каждой конкретной вычислительной установке могут быть предусмотрены возможности применения подобных макро. Если вам придется иметь дело с системой, в которой для ввода-вывода используются иные макро, то при желании системный программист может ввести привычные вам макро RWDи WWDв систему.
RWDR1 ReadWorD Информация с карты данныхR1
Макрокоманда 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 |
LCR |
R1,R2 |
Load Complement Register |
R1 |
LPR |
R1,R2 |
Load Positive Register |
R1 |
LNR |
R1,R2 |
Load Negative Register |
R1 |
L |
R1,=F'd' |
Load (литеральный операнд) |
R1 |
AR |
R1,R2 |
Add Register |
R1 |
SR |
R1,R2 |
Subtract Register |
R1 |
MR |
R1,R2 |
Multiply Register |
R1,R1+1 |
DR |
R1,R2 |
Divide Register |
(R1,R1+1) |
|
|
частное |
|
|
|
|
остаток |
RWD |
R1 |
ReadWorD(макро) Число с карты данных |
|
WWD |
R1 |
Write WorD (макро) |
(R1) |