Калабеков Б.А. Микропроцессоры и их применение в системах передачи и обработки сигналов (1988) (1092085), страница 25
Текст из файла (страница 25)
Зпб. Схема алгоритма, соответствуюнгая итеративному 00-онерато- РУ 134 Рис. 3.27. Схема алгоритма вычисле- нии максимального элемента в одно- мерном массиве са уса уел ег, Рнс. 3.29, Трапепеидальиыа импульс просмотр строк 1, и внутренний цикл, в котором просматриваются столбцы !. В каждом повторении тела цикла элемент матрицы Мп сравнивается с максимальным значением х элементов, просмотренных в предыдущих повторениях тела цикла.
При построении программы положим, Рнс, 3.28. Схема алгоритма что массив строк матрицы М образует вычислении максимального структуру А из ! 00 элементов. Каждый элемента в двумерном мас- элемент структуры А есть массив В из 59 сине элементов. Программа на языке Р(./М имеет следующий вцд: 0ЕС1.АВЕ (Х, 1, !) РТЕ, А (!00) БТц(ЗСТ()КЕ (В (50) РТЕ); Х=О; 1)0 1=0 ТО 99; РО Л =-0 ТО 49; 1Р А (1).В (Л) ~ Х ТНЕХ Х = А (!).В (Л); ЕМ!; Е(ь!Р; 60-САБЕ-оператор. Форма оператора: 00 САБЕ выражение; оператор 1; оператор л; Е!ь)Р; Из группы операторов: оператор 1, ..., оператор и выполняется только один, номер которого определяет значение выражения.
Значение выражения должно находиться в пределах О... (и — 1). Если оно равно й, то выполняется оператор с номером (й + 1), после чего !35 происходит выход из блока и передача управления оператору, следующему за оператором ЕИЭ. Пример 3.11. Требуется описать трапецеидальный импульс, представленный на рис. 3.29. В аналитической форме импульс представляется выражением следующего вида: а — при 0(/(/,; ~е а при /, ( ! ( 3/э„ а~4 — — 1 при 3/,(!(4/,; А / 0 при ! ) 4!м Описание этой функции на языке Р!./М можно представить с помощью блока типа ПО-САЗЕ-оператора: РЕС1А!!Е (1, Т, ТО, Х, А) Вт'ТЕ; 1Р Т(4эТО ТНЕУ 1 = Т/ТО; Е1.5Е ! =-4; ЭО САБЕ 1; Х = АэТ/ТО; Х=А; Х=А; Х = 4эА — АэТ/ТО; Х=О; Ег)0; Оператор 1Р вычисляет значение переменной 1.
Если выполняется условие Т ( 4чТО, то переменной 1 присваивается значение частного Т/ТО, которое принимает значение 0 при /( /„, значение 1 при 1, ( 1( (21„значение 2 пРи 2!„ч. 1( З/ь значение 3 пРи 31, < 8 ( 41,. Если неравенство Т ( 4эТО не выполняется, то переменной 1 присваивается значение 4. В зависимости от присвоенного переменной! значения выполняется определенный оператор в блоке !)О-САЗЕ. ПРОЦЕДУРЫ Процедура — подпрограмма, в которой описано неоднократно встречающееся при решении задачи вычисление.
Если в процессе исполнения главной программы встречается необходимость в проведении такого вычисления, производится обращение к процедуре. При обращении к процедуре приостанавливается выполнение главной программы и производится выполнение действий, предусматриваемых процедурой. После окончания исполнения процедуры происходит возврат в главную программу в ту точку, в которой было приостановлено ее выполнение, и продолжается выполнение главной программы с использованием значений, полученных в результате выполнения процедуры.
Различают два вида процедур: процедуры-функции и процедуры общего вида. Каждая процедура снабжается именем, по которому производится обращение к ней. В случае обращения к процедуре-функции ее имя используется при записи выражений как имя некоторой переменной, которая при выполнении процедуры приобретает некоторое значение. В отличие от переменной вслед за именем процедуры-функции в скобках приводятся аргументы, разделенные запятыми.
Каждый из аргументов может быть представлен переменной либо выражением. Пример 3.12. Используем ранее рассмотренный пример алгебраического суммирования чисел, представленных в прямом коде. Пусть имеется процедура-функция с именем Р, описывающая способ преобразования числа из прямого кода в дополнительный код: Р: РЯОСЕР!.)ЯЕ (А, В); РЕЗАКЕ (А, В) Вт'ТЕ; !Р А(80Н ТНЕУ) В=-А; ЕЬ$Е В=-(Х ХОР 7РН) ! 1; ЯЕТ()КН В; Ей)0 0; Здесь для некоторого А, у которого старший разряд — знаковый, показан способ вычисления дополнительного кода; А и  — так называемые Формальные параметры, представляемые простыми скалярными переменными. Формальными эти параметры названы из следующих соображений. К процедуре можно обращаться для преобразования в дополнительный код значения любой переменной.
Например, прн преобразовании значения переменной Х в дополнительный код Х! в процедуре формальные параметры А и В замещаются соответственно аргументами Х и Х 1. Пусть теперь в главной программе с именем ОРТ требуется произвести алгебраическое суммирование чисел Х и У с представлением их суммы в прямом коде. Эта программа может быть записана в следующем виде: ОРТ:...
ОЕСЬАЯЕ (Х, Х1, У, У1, Х, 21) ВУТЕ; (еВЫЧИСЛЕНИЕ ДОПОЛНИТЕЛЬНОГО КОДА СУММЫ Е! я; К)=О(Х, Х1)+0(У, У1); /я ВЫЧИСЛЕНИЕ ПРЯМОГО КОДА СУММЫ Ъв) к=О (г1, Х); Ер(Тг ОРТ; !зт Здесь заключенный между символами ' ..." текст есть комментарий, который игнорируется транслятором и служит лишь для облегчения чтения программы (для записи комментария допускается использование букв русского алфавита). В этой программе при вычислении дополнительного кода суммы дважды производится обращение к процедуре-функции с именем О. При первом обращении 0 (Х, Х1) в процедуре-функции на место формальных параметров ставятся аргументы Х и Х !.
Вычисленное в процедуре- функции значение дополнительного кода оператором ПЕТЬКИ В возвращается в главную программу. При втором обращении 0 (У, У!) в процедуру-функцию передаются аргументы г' и г'1 и оператор ЙЕТ()К)ч В возвращает в главную программу значение дополнительного кода у !. Далее в главной программе вычисляется Х 1, после чего оператор Х вЂ” 0 (21, Е) путем третьего обращения в процедуру-функцию преобразует дополнительный код суммы Х! в прямой код Х.
Мы видели, что использование процедуры-функции имеет следующие особенности. В главной программе обращение к процедуре-функции производится непосредственно из выражения, в котором вместо переменной указывается имя процедуры-функции и за ним в скобках перечисляются аргументы, разделенные запятыми. Другая особенность состоит в том, что процедура-функция может передавать в главную программу значение лишь одной переменной.
Покажем решение той же задачи с использованием так называемой процедуры общего вида. ,~ь ПРОЦЕДУРА ОБЩЕГО ВИДАч,' .0; РКОСЕ0ЖЕ (А, В); 0ЕС(.АКЕ (А, В) Вз'ТЕ; 1Р А(ВОН ТНЕ)х) В==А; Е(.ВЕ В =- (Х ХОР 7ЕН)-г 1; КЕТ()КН; Ей)0 0; гаГЛАВНАЯ ПРОГРАММАч/ ОРТ:... 0ЕС(.АКЕ (Х, Х1, У, У1, Х, 21) ВУТЕ; СА1Л. 0 (Х, Х!); СА(.1. 0(У, У!); 71 ..-: Х 1 и 'г'1; СА1Л 0 (Х1, Е); Е(х)0 ОРТ; Здесь представлены следующие особенности использования процедуры общего вида, отличающие ее от процедуры-функцни. В процедуре общего вида вместо оператора ЙЕТ()КЫ В использован оператор КЕТО((Х; в главной программе обращение к процедуре производится с помощью оператора СА(Л .
В отличие от процедуры-функции процедура общего вида может передавать в главную программу значения нескольких переменных. Покажем зто на следующем примере. Пусть требуется получить в дополнительном коде попарную сумму трех переменных Х, У, 2. .*ПРОЦЕДУРА ОБЩЕГО ВИДА*/ 0: РКОСЕ0ЖЕ (А1, А2, В(, В2, С!, С2); 0ЕС1АКЕ (А(, А2, В1, В2, С1, С2) В1'ТЕ; !Р А! ( 80Н ТНЕ(Ц А2.-= А1; Е БЕ А2 (А1 ХОР 7ГН) - 1; (Е В ! ( 80Н ТНЕУ В2- - В1; Е БЕ В2=-(В( ХОК 7ЕН)н 1; !Р С1 ( 80Н ТНГзЫ С2 -- С1; Е(.БЕ С2=-(С! ХОК 7РН)-' 1; ВЕТОК(ч; ЕЫ0 0; ЗАГЛАВНАЯ ПРОГРАММАеу ОРТ:... 0ЕС(.А((Е (Х, Х 1, У, У!, Х, 21, О1, (32, (33) В з'ТЕ; СА1.1.
(Х, Х(, У, 'з'1, 2, 21):, П ! .== Х 1 + 'г'1; 02=- т'1+21; () 3 = е.! + Х 1; ЕЫ0 ОРТ; Здесь при обращении к процедуре общего вида с именем 0 в главную программу передаются вычисленные в процедуре значения трех переменных Х1, т'1, 71, ВСТРОЕННЫЕ ПРОЦЕДУРЪ| И ПЕРЕМЕННЫЕ Язык Р1!М допускает пользование некоторым набором так называемых есгпроенных процедур и переменных, особенность которых в том, что от программиста не требуется их описания. !39 Ниже приводятся наиболее употребительные встроенные процедуры и переменные. Процедура-функция 1КР()Т (ввод). Процедура имеет тип ВУТЕ и один формальный параметр. Форма обращения к ней; 1!ч' РОТ (а) где а — - числовая константа, находящаяся в диапазоне О ...
255. Константа указывает номер устройства ввода. В результате обращения к процедуре из устройства ввода в процессор передается одно 8-разрядное двоичное число. Пример 3.13. Х --15)Р()Т(5! (-7; Оператор присваивает переменной Х сумму числа, полученного из устройства ввода 5, и константы 7. Процедура-функция 0()ТР()Т (вывод). Форма обращения к процедуре: 0()ТРУТ (а) - Ь; где а — числовая константа, находящаяся в диапазоне О ...
255 и являющаяся номером устройства вывода, Ь вЂ” выражение, байтовое значение которого подлежит выдаче из микропроцессора в устройство вывода. Процедура-функция преобразования типов Е0%, Н16Н, 1)01)ВЕЕ. Обращение 1.0% (а) производит выборку из двухбайтового значения выражения а его младшего байта; обращение Н!6Н (а) выбирает из двухбайтового значения выражения а его старшего байта; обращение РОБВ1 Е (а) байтовое значение выражения а преобразует в тип АООЙЕ55 путем добавления старшего нулевого байта. Пример 3.14. Выдать на устройство вывода 3 последовательно младший и старший байты двухбайтовой величины 2.
ООТР!.)Т (3) =- Е0% (7); О!)ТРОТ (3) = Н!ОН (2); Процедура-функция сдвигов 5НЕ, 5Н)(, 5СЕ, ЗС((, КОЕ, й01(. Форма обращения к процедуре: ИМЯ (а, Ь) Здесь ИМЯ вЂ” имя процедуры-функции; а — выражение, значение которого (байтовое либо двухбайтовое) подлежит сдвигу; Ь вЂ” число разрядов, иа которое производится сдвиг. Процедуры-функции 5НЕ, 5НК выполняют логический сдвиг соответственно влево и вправо.
вписывая в освобождающиеся разряды нуль; процедуры-функции 5С)., ИСК выполняют циклический сдвиг соответственно влево и вправо с переносом (с включением в замкнутую цепь сдвига триггера переноса Тс регистра признаков микропроцессора); процедуры-функции КО(., КОК выполняют циклический сдвиг соответственно влево и вправо без переноса (без включения в замкнутую цепь сдвига триггера Тс).
Пример 3.!5. Выполнить операцию алгебраического умножения байтовых чисел Х и У, вводимых соответственно из устройств ввода 5 и 7; результат выдать в устройство вывода 3. РЕС!.АКЕ (Х, У) ВУТЕ, У АРР)!Е55; Х =-!МРНТ (5); У 1й)РОТ (7); !Е Х) ==80Н ТНЕУ) () = — 1; Е!.ЯЕ () =0; !Р У) =-80Н ТНЕ)х) Б.=Б ХОП 1; Е =- ИО)! (ЯНК (5Н(. (Х, 1), 1)яВН1. (У, 1) +(3, 1); ОСТРОТ (З) = СОК Д; ООТР1.)Т (З) .= Н)ОН Д; ЕНР; В программе определяется значение знаковых разрядов сомножителей и формируется знаковый разряд произведения Р, Далее в результате выполнения операций ЯН)! (ЯН(. (Х, 1), !) множимое Х сдвигается логически влево с потерей знакового разряда и затем логический сдвиг вправо восстанавливает число с вписанным в знаковый разряд нулем.