Калабеков Б.А. Микропроцессоры и их применение в системах передачи и обработки сигналов (1988) (1092085), страница 22
Текст из файла (страница 22)
Пусть делимое и делитель — целые положительные числа; делимое имеет 2 и разрядов, делитель л разрядов, нх старшие разряды— знаковые и содержат О. Рассмотрим алгоритм деления методом с восстановлением остатка. В качестве примера, на котором будет иллюстрирован алгоритм деления„выберем деление числа 37 на 7. При этом должно получиться частное 5 и остаток 2. Представим делимое 8-разрядным двоичным числом 0 О!00101„делитель — 4-разрядным двоичным числом 0 111„.
Ниже показан процесс деления; 0111 Частное 0 0 ! 1 1 1101101 р 0111 Восстановленный остаток 1-0!00101 100101 Сдвиг влево Вычитание О 1! ! Положительный остаток 0 0 1 0 0 ! Слвнг влево О! 001 О 1 1! Вычитание Отрицательный остаток 1» — 1 1 О 1 1 + Сложение О! ! ! Восстановленный остаток 1ч-0 1 О О 1 100 ! О! 11 Слвнг влево Вычитание Остаток Положительный остаток 0 0 ! 0 Процесс деления сводится к следующей циклически повторяемой последовательности действий.
В первом повторении цикла — делимое, а и последующих повторениях цикла — остаток сдвигаются на один разряд влево н затем иэ него вычитается делитель; если полученный новый остаток — положительное число, то в очередной разряд частного (иачиная с его старшего разряда) записывается 1; если новый остаток— отрицательное число, то в разряд частного заносится О, а к остатку прибавляется делитель, и таким образом восстанавливается предыдущий сдвинутый остаток.
Эти действия циклически повторяются л раэ (л — число разрядов делителя). В результате образуется частное. а последний остаток является результирующим остатком операции деления. 1!а Делимое Савнг влево Вычитание Отрицательный остаток Сложение 001 00101 ~ 0 ! 1 1 Делитель О!ОО!О! Таблица а17 Кпммента. Метке Кад Операнд на Е,В А А, С С, А А, В В,А М! о Е М2 В, А А, 'С м1: Для построения программы выполнения операции деления в микропроцессе примем и =- 8.
При этом делимое будет иметь 2л !б разрядов (2 байта) и для своего хранения потребует пары регистров. Используем для хранения делимого пару регистров ВС. Прн каждом сдвиге влево содержимого пары регистров ВС в освобождающийся правый разряд будем заносить значение очередного разряда частного.
Таким образом, после оконча. ния выполнения операции в регистре С образуется частное. Так как действия вычитания (или сложения) делителя долнжиы производиться над старшими восемью разрядами остатка, то эти операции будут выполняться над содержимым регистра В, а после окончания операции деления его содержимое будет результирующим остатком операции. Для хранения однобайтового делителя используем регистр Р. На регистре В, предварительно загружаемом числом 8, построим счетчик числа повторений цикла. !!9 мч! А!4А моч кАЕ моч мох КАЕ моч Бив СМС 2С АБО оси зыг моч моч КАЕ моч , Блок 1 ; Блок 2 ; Блок д ; Блок 4 ; Блок 5 ; Блок б ; Блок 7 ; Блок 5 ; Блок 9 ; Блок !9 , Блок 11 ; Блок 12 , Блок И ; Блок 14 , Блок 15 Блок 16 Блок 17 : Блок !5 Рме.
3.!7. Схема алгоритма ле леняя На рис. 3. !7 показана схема алгоритма. Поясним некоторые ее особенности. Блок 2 осуществляет сброс в О содержимого триггера Тс регистра признаков, что может быть обеспечено выполнением любой логической операции АЛУ. Для выполнения сдвига влево содержимого пары регистров ВС использованы блоки 3 ... 8. Вначале содержимое регистра С передается в аккумулятор А, где оно сдвигается, после чего возвращается в регистр С. При сдвиге в младший разряд принимается нэ триггера Тс сформированное в нем значение очередного разряда частного, выдвигаемое содержимое старшего разряда принимается в триггер Тс, откуда оно при выполнении сдвига содержимого регистра В будет принято в младший разряд.
Далее аналогичные действия производятся с содержимым регистра В. При выполнении в блоке 9 вычитания в случае отрицательного остатка возникает перенос ! из старшего разряда, фиксируемый в триггере Тс, в случае положительного остатка этот перенос равен О. Таким образом, значение очередного разряда частного может быть получено инвертированием содержимого триггера Тс, что и выполняет блок 1О. Блоки 11, 12 выполняют действия, связанные с восстановлением положительного остатка. Блок 18 организует счет числа повторений цикла. После выхода из цикла в блоках 15 ...
18 производится передача в регистр В результирующего остатка операции деления и сдвиг содержимого регистра С с записью последнего сформированного в триггере Тс разряда частного. В табл. 3.17 приведена записанная на языке Ассемблера программа, соответствующая рассмотренной схеме алгоритма операции деления. ПСЕЕДОКОМАНДЫ АССЕМБЛЕРА Команды программы определяют действия, выполняемые над данными в процессе решения задачи.
Осевдокоманды не связаны с действиями над данными, они сообщают необходимые Ассемблеру сведения и используются лиц)ь в процессе трансляции программы на язык кодовых комбинаций. С помощью таких псевдокоманд транслятору можно сообщить, например, сведения о том, с какого адреса памяти следует производить размещение команд программы; о том, что нужно зарезервировать в ОП ячейки (и в каком количестве) для хранения переменных, используемых в программе с определенными именами, или массивов переменных. В табл. 3.18 приведены наиболее употребительные псевдокоманды. Рассмотрим использование псевдокоманд в программе. Пример 3.3. Пусть требуется определить в массиве, данных количество элементов, значение которых совпадает с заданным значением некоторой константы.
В табл. 3.!9 приведена программа. Подобная программа может оказаться удобной в тех случаях, когда приходится, варьируя параметрами, многократно выполнять программу. Для изменения размерности массива данных и значения констан- !20 Таблица Д!и Прннер записи Имн о ееадо. команды Метка Код Операнд Коннентарна ОйО 0200Н ОйСт е017 т1ме е1;и.' 56 37 Рй: 0В ОВ 1Х1Т: Ь'тЧ 0 Айй: 05 100 05 ЕХ0 ты, с которой сравниваются значения элементов массива, здесь достаточно задать новые значения СХ и Хзс в соответствующих псевдокомандах ЕЯ!.!.
Кроме того, использование псевдокоманд !ТВ и !ЗВ позволяет пользоваться символическими адресами ТАВОТЕ и зсЕ5 и избавляет от необходимости знать числовые значения адресов. Таб.шип Д!Р ОйО 300Н МЧ1 Е, СХ МЧ! С. 0 МЧ1 О, Хй ! Х! В, ТАВОТЕ ФОАЛ В М1; СМР 3Х2 1Хй !ХХ М2 С В В регистре В адрес очередного эле- мента Е М! А,С йЕ5 ; Засылка результата в память СХ Хй .!йЕ5: ТАВОТЕ: !00 57 0 СХ 121 0Сй 3ХТ МОЧ 5ТА ЕХ0 ЕЯО ЕЯО ОВ 05 ; Команды размещаются, начиная с ячейки ; с адресом 02ООН ; Константе с именем Т1МЕ присваивается ; значение 56 , Ддя однобайтовой переменной с именем ; Рй резервируется ячейка, в которую за.
; носится значение 37 ; Для двухбайтовой переменной с именем ; 1Х1Т резервируются в памяти две ячейки. ; в которые заносится 0 ; Для массива с именем Айй резервируют- ; ся 100 ячеек в памяти ; Конец программы ; Засылка в Е размерности массива СХ ; Установка счетчика совпадений ; Засылка константы в регистр 0 ; Засылка в В адреса ТАВОТЕ 1-го зле- ; мента ; Загрузка А очередным элементом ; массива : Сравнение элемента массива с кон- ; стантой 3.5.
ПРОГРАММИРОВАНИЕ НА ЯЗЫКЕ ВЫСОКОГО УРОВНЯ РЦМ-80 ЭЛЕМЕНТЫ ЯЗЫКА Символы языка. Для записи программы язык Р|./М-80 использует следующий набор символов: а) 26 заглавных букв латинского алфавита: А, В, С, Р, Е, Р,О, Н,|,Л,К,1.,М,|«|,О,Р,(1, К,З,Т,(),У,%, Х,У,Х; б) при записи комментариев допускается использование заглав- ных букв русского алфавита, отсутствующих в латинском алфавите; в) 10 арабских цифр: О, 1, 2, 3, 4, 5, 6, 7, 8, 9; г) специальные символы; О денежный знак, = равно или присвоить, + плюс, — минус, э звездочка, косая черта, точка с запятой, : двоеточие, точка ' апостроф, ( левая скобка, ) правая скобка, ) больше, ( меньше запятая, Программа записывается в виде последовательности операторов. Конец каждого оператора обозначается символом «;к Числовая константа. Числовая константа — это величина, значе- ние которой, представленное числом, в процессе вычислений неизмен- но.
В языке РЪ~М применяется беззнаковая целочисленная арифметика и, таким образом, все числа †- целые без знака. Для представления числовой константы могут использоваться раз- личные системы счисления. Используемая система счисления обозна- чается соответствукхцей буквой вслед за числом: после шестнадцате- ричного числа ставится буква Н, если число начинается с одного из символов А, В, С, |), Е, Р, то дополнительно перед числом ставится цифра 0; после десятичного числа ставится буква О (допускается не ставить никакой буквы); после восьмеричного числа ставится буква О (либо О); после двоичного числа — буква В.
Диапазон представимых чисел определяется условием, чтобы в дво- ичном представлении длина числа не превышала 2 байт, т. е. 0 ... 65535, (ОРРРРН, 177777(1, 11! 1г| ! 111 0 1111 Е| 1111В). Символ Е! при трансляции игнорируется и, таким образом, его можно ставить для об- легчения чтения числа. Символьная константа. Это последовательность символов, заключен- ная в апострофы.