Главная Контакты В избранное
  • Отчет по лабораторной работе №142 по теме: «Сложение многобайтных чисел без знака»

    АвторАвтор: student  Опубликовано: 14-12-2020, 21:01  Комментариев: (0)

     

     

     

     

    Скачать: 142.zip [338,11 Kb] (cкачиваний: 0)  

     

     

    Отчет по лабораторной работе №142

    по теме:

    «Сложение многобайтных чисел без знака»

     

    по дисциплине «Вычислительные машины, системы и сети»

     

     


    Сложение многобайтных чисел без знака

    1. Разработка программы «ADN

    Выполнить сложение двух трехбайтных чисел в шестнадцатеричных кодах.

    Программа:

    0000 5 ORG 0000h

    0000 C3 6 CLR C

    0001 793F 7 MOV R1,#3fh

    0003 782F 8 MOV R0,#2fh

    0005 7A04 9 MOV R2,#04h

    0007 E6 10 M1: mov a,@R0

    0008 37 11 addc A,@R1

    0009 F7 12 MOV @R1,A

    000A 18 13 DEC R0

    000B 19 14 DEC R1

    000C DAF9 15 DJNZ R2,M1

    000E 00 16 NOP

    17 END

    Регистр R2 в программе выше определяется число байт для суммирования + 1для переноса в старший разряд в случае переполнения (4 байта). Загрузка содержимого R2 производится до начала цикла.

    Перед первым циклом R1 задает младший байт 2 числа для суммирования 3Fh, R0 задает младший байт 1 числа 2Fhдля суммирования.

    На 2 цикле выполняется операция декремента для выбора следующего байта чисел для суммирования. Для обнуления бита С воспользуемся командай CLR C.

    Таблица 1– Простейший цикл при сложении 3 байтных чисел

    1

    Установка

    параметров

    1 цикла

    MOV R1,#3fh

    MOV R0,#2fh

    MOV R2,#04h

    2

    Основное

    действие цикла

    Тело цикла

    M1: MOV A,@R0

    ADDC A,@R1

    MOV @R1,A

    3

    Установка параметров

    следующего цикла

    DEC R0

    DEC R1

    4

    Проверка.

    DJNZ R2,M1

    5

    Стоп

    NOP

    Перед началом выполнения программы выберем числа для сложения: 1 число 21А3B1h, 2 число А86283h

    Загрузим числа в соответствующие ячейки РПД

    MOV 2fh,#0b1h

    MOV 2eh,#0A3h

    MOV 2dh,#21h

    MOV 3fh,#83h

    MOV 3eh,#62h

    MOV 3dh,#0a8h

    Результат представлен на рисунке 1.

    Рис. 1– Загруженные числа

    Произведем ручное суммирование этих чисел в шестнадцатеричной системе, т.к. двоичная запись слишком длинная.

     

    Таблица 2 – Ручное сложение чисел

    1-е слагаемое

    21

    А3

    В1

    Суммировать

    содержимое

    2-е слагаемое

    А8

    62

    83

    AC (перенос между тетрадами)

    0

    0

    0

    C (перенос в старший байт)

    1

    1

    0

    P (проверка А на нечетность)

    0

    0

    1

    Результат

    СА

    (1)06

    (1)34

     

     

    Сложение двух двухбайтных чисел В1 и 83 (младшие разряды) расчетным путем при помощи алгоритма ADDC A,@R1

    Таблица 3– Алгоритм ADDC A,@R1

    [А] до

    1

    0

    0

    1

    0

    0

    0

    1

    В1h–1 слагаемое

    [РПД@R1]

    1

    0

    0

    0

    0

    0

    1

    1

    83h– 2 слагаемое

    AC (перенос между тетрадами)

    0

    0

    АС до=0

    C (перенос в старший байт)

    1

    С до=0

    [A] после ADDC A,@R1

    0

    0

    0

    1

    0

    1

    0

    0

    34h

     

    Результат работы программы после 1 цикла приведен на рис. Рисунок 2. В ячейку 3F записана сумма чисел В1+83=34. Флаг переноса С=1, т.к. полученное число вышло за границы байта. Регистр R2 уменьшился на 1, т.к. его содержимое не равно 0, то цикл повторяется.

    Рис. 2 – После 1-го цикла

    Результат работы программы после 2 цикла приведен на рис. 3Рисунок 3. В ячейку 3Е записана сумма чисел А3+62+С=06. Флаг С из 1-го цикла. Флаг С после 2-го цикла =1, т.к. полученное число вышло за границы байта. Регистр R2 уменьшился на 1, т.к. его содержимое не равно 0, то цикл повторяется.

    Рис. 3 - После 2-го цикла

    Результат работы программы после 3 цикла приведен на рис. 4Рисунок 3. В ячейку 3D записана сумма чисел 21+А8+С=СА. Флаг С из 2-го цикла. Флаг С после 2-го цикла =0, т.к. полученное число помещается в байт. Регистр R2 уменьшился на 1, т.к. его содержимое не равно 0, то цикл повторяется.

     

    Рис. 4- После 3-го цикла

    Результат работы программы после 4 цикла приведен на рис. Рисунок 5. По адресам РПД 2C и 3С до цикла нулевое содержимое. Флаг С от предыдущего цикла также =0. В ячейку 3D записана сумма чисел 0+0+0=0. Регистр R2 уменьшился на 1, теперь содержимое 0, цикл завершен, СТОП.

    Все флаги совпали с расчетными значениями согласно таблице Таблица 2.

     

    Рис. 5 – После 4-го цикла

    2. Разработка программы «ADN(сложение двух N-байтных чисел без знака с использованием двух банков)

    По включению питания или после RESET, в качестве рабочего банка выбирается Б0, поэтому, по умолчанию, в качестве рабочего банка подразумевается Б0. Для переключения банка используем команду «SETB RS1», устанавливающий единицу в четвертый бит регистра PSWи тем самым выбирая Б2.

    Рис. 6 – Данные к разработке программы «ADN2»

    Для удобства наблюдения за ходом выполнения программы в окне РПД(IRAM), байты слагаемых и суммы располагаются по принципу «старший адрес – младший байт» (рисунок 6).

    Из рис. 6 следует, что программа «ADN2» должна использовать конструкцию «Простейший цикл». В программе «ADN2» (рис. 6,а) требуется использование трех адресных регистров. В одном банке имеются в наличии 2 адресных регистра (на первом цикле [R0]=адрес младшего байта 1-го и [R1]=адрес младшего байта 2-го слагаемых). В качестве 3-го адресного регистра предлагается использовать R1,Б2 (на первом цикле [R1,Б2]=адрес младшего байта суммы).

     

    Рис. 7 – Численный пример вычисления суммы двух трехбайтных чисел

    Листинг разработанной программы «ADN2» и результат её выполнения представлены на рисунке 8 и 9.

     

    Рис. 8 – Листинг ПП программы «ADN2»

    Рис. 9 – Результат действия программы «ADN2»

    2.1. Доработка исходного текста программы «ADN2»

    Доработаем исходный текст программы «ADN2», дополняя необходимыми директивами и командами. После ассемблирования получен листинг и загрузочный модуль на рисунке 10 и 11.

     

    Рис. 10 – Блок-схема и исходный текст программы «ADN2»

     

    Рис. 11 – Загрузочный модуль программы «ADN2»

    2.2. Выделение из программы «ADN2» основной (вызывающей) программы и (вызываемой) подпрограммы

    Из программы «ADN2» (рис. 10) выделяем функционально законченный, многократно выполняемый фрагмент, с именем AD2 (начало подпрограммы). Фрагмент должен заканчиваться командой «RET» (конец подпрограммы) – рис. 12.

     

    а)б)

    Рис. 12 – Блок-схема и фрагмент «ADN2»

    Подпрограмма сопровождается спецификацией, которая описывает:

    а) что делает подпрограмма;

    б) какие входные параметры обязана задавать основная программа перед вызовом подпрограммы и где эти параметры должны располагаться (передача параметров от основной программы подпрограмме);

    в) что является результатом работы подпрограммы и где подпрограмма располагает полученный результат для передачи основной программе.

    Спецификация описывает правила использования подпрограммы, которые задаются исходным текстом подпрограммы.

    Спецификация подпрограммы «AD2»:

    - Подпрограмма суммирует две строки (два слагаемых), содержащие N-байтные числа, а результат представляет на третьей строке (сумму), причём, байты чисел располагаются по принципу «старший адрес – младший байт»;

    - В основной программе должно быть задано четыре параметра (до вызова данной подпрограммы):

    § число байт суммирующихся чисел (будет представляться в виде количества отрабатывающих циклов плюс ещё один цикл на учёт бита переноса «С»);

    § адрес младшего байта первого слагаемого;

    § адрес младшего байта второго слагаемого;

    § адрес младшего байта, куда следует записывать результат сложения;

    - Результатом работы подпрограммы является полученная сумма двух слагаемых, расположенная там, где была изначально задана в основной программе.

     

    3. Разработка структуры программы «ADP2». Выделение из программы «ADN2» основной (вызывающей) программы и (вызываемой) подпрограммы

    Разработаем программу «ADP2». Программы «ADР2» и «ADN2» предназначены для решения одной и той же задачи, с исходными данными, представленными на рис. 6. «ADР2» представляет собой видоизмененную программу «ADN2», в которой циклическая часть оформлена в виде подпрограммы, а начальная часть (от метки ADN2 до AD2) отнесена к основной (вызывающей) программе с начальным адресом ADР2. Основная программа дополняется командами «CALL AD2» (вызов подпрограммы) и «NOP» (моделирует здесь продолжение основной программы). Структурная схема исходного текста программы «ADР2» представлена на рисунке 13.

     

    а)б)

    Рис. 13 – Блок-схема и исходный текст программы «ADР2»

    4. Разработка программы «ADР22» с двукратным вызовом подпрограммы «AD2»

    В системе команд MCS-51 отсутствуют команды, позволяющие суммировать три и более байт одной командой, поэтому решение поставленной задачи может быть достигнуто программой «ADР22» двумя вызовами подпрограммы «AD2».

    На рис. 14 представлены исходные данные для программы «ADР22», суммирующей три многобайтных слагаемых, расположенных в соседних строках РПД (2-ая, 3-я и 4-ая строки).

     

    Рис. 14 – Расположение исходных данных, промежуточного и окончательного результатов работы программы «ADР22»

     

     

    Подпрограмма «AD2» является функционально законченным фрагментом. Суммирует два многобайтных слагаемых, заданных в двух строках РПД по принципу «старший адрес – младший байт» и располагает результат (по принципу «старший адрес – младший байт») в третьей строке. Номера строк слагаемых, результата и число байт задаются в основной программе перед очередным вызовом подпрограммы (являются входными параметрами, передаваемыми от основной программы к подпрограмме).

    Структурная схема исходного текста и результат выполнения программы «ADР22» представлены на рисунках 15 и 16.

     

    а)б)

    Рис. 15 – Блок-схема и исходный текст программы «ADР22»

    Рис. 16 – Результат выполнения программы «ADР22»

    скачать dle 10.6фильмы бесплатно