- •«Магнитогорский государственный технический университет им. Г.И.Носова»
- •Курсовая работа
- •«Магнитогорский государственный технический университет им. Г.И.Носова»
- •Введение.
- •2. Анализ поставленной задачи.
- •Разработка блок-схемы алгоритма решения задачи.
- •Разработка программы на языке Ассемблера кр580 и в машинных кодах.
- •Список литературы.
2. Анализ поставленной задачи.
Арифметическое-логическое устройство микропроцессора КР580ВМ80 реализует простейшие арифметические и логические операции (сложение, вычитание, сдвиги, сравнение, логическое умножение и т.п.). Все более сложные операции (умножение, деление, вычисление элементарных функций и др.) выполняются по специальным подпрограммам.
Существует несколько алгоритмов умножения. Простейший из них – последовательность сложений. Например: 25×3 = 25+25+25. Существенный недостаток этого алгоритма – значительная длительность процесса вычисления. Второй алгоритм – умножение в столбец, основанное на последовательных сдвигах и суммировании. Отметим, что сдвиг возможен как влево, так и вправо. При вычислении результата по второму алгоритму необходимо осуществить многократное суммирование со сдвигом влево множимого при одновременной проверке содержимого разрядов множителя начиная со стороны его младшего разряда. При этом если в очередном разряде множителя записана «1», то множимое прибавляется к сумме и сдвигается влево на один разряд, а если в разряде записан «0», то произойдет только сдвиг множимого. Сдвиг множимого влево можно заменить сдвигом суммы вправо.
Разработка блок-схемы алгоритма решения задачи.
Одним из этапов разработки программы является составление блок-схемы. Для создания программы умножения двух однобайтных чисел была разработана блок-схема представленная на рис.1.
Блок-схема — это схематичное представление процесса, системы или компьютерного алгоритма. Блок-схемы часто применяются в разных сферах деятельности, чтобы документировать, изучать, планировать, совершенствовать и объяснять сложные процессы с помощью простых логичных диаграмм. Для построения блок-схем применяются прямоугольники, овалы, ромбы и некоторые другие фигуры (для обозначения конкретных операций), а также соединительные стрелки, которые указывают последовательность шагов или направление процесса. Блок-схемы варьируются от незамысловатых, нарисованных вручную до подробных, составленных на компьютере диаграмм со множеством шагов и процессов. Если учесть все возможные вариации, блок-схемы можно признать одним из самых распространенных видов схем во всем мире. Они широко используются в разных сферах как технической, так и нетехнической направленности. Иногда блок-схемы получают более узкоспециальные названия, например, схема процесса, схема рабочего процесса, функциональная блок-схема, моделирование бизнес-процессов, модель и нотация бизнес-процессов (BPMN) или схема технологического процесса (PFD). Они тесно связаны с другими распространенными видами схем, такими как диаграммы DFD и диаграммы активности на унифицированном языке моделирования (UML).
Рисунок 1 Блок- схема программы.
Разработка программы на языке Ассемблера кр580 и в машинных кодах.
Программирование на ассемблере предоставляет нам возможность писать код, близко связанный с аппаратным обеспечением. В данной программе мы рассмотрим пример разработки программы умножения двух однобайтных чисел на языке ассемблера для микропроцессора КР580. Целью этой программы является реализация функционала умножения двух чисел, каждое из которых занимает один байт памяти. Использование языка ассемблера позволяет нам максимально эффективно управлять процессором и использовать его ресурсы. Микропроцессор КР580 является ключевым компонентом для выполнения этой программы. Этот процессор обладает широкими возможностями и низким уровнем абстракции, что позволяет нам тонко настраивать поведение программы и достигать высокой производительности. В данной программе мы рассмотрим не только код на языке ассемблера для КР580, но и его эквивалент в машинных кодах. Это поможет нам более глубоко понять процесс работы программы и увидеть, каким образом высокоуровневые конструкции преобразуются в низкоуровневые команды, которые выполняются процессором. Начнем наше погружение в мир разработки программ на ассемблере для микропроцессора КР580 и изучим эту программу умножения двух однобайтных чисел, чтобы узнать, как работает процессор на самом низком уровне.
Программа умножения двух однобайтных чисел.
Адрес |
Машинный код |
Мнемоника команды |
Операнд |
Метка |
Комментарий |
0800 |
LXI H |
21 02 09 |
0902 |
|
(HL) ← 0902 |
0803 |
MVI M |
36 00 |
00 |
|
M(0902) ← 00 |
0805 |
INX H |
23 |
|
|
(HL) ← (HL) + 1 |
0806 |
MVI M |
36 00 |
00 |
|
M(0903) ← 00 |
0808 |
LDA |
3A 00 09 |
0900 |
|
|
080B |
CPI |
FE 00 |
00 |
|
(F) ← (A) – 00 |
080D |
JZ |
CA 31 08 |
0831 |
|
(PC) ← 0831 Если Z = 1 |
0810 |
MOV E, A |
5F |
|
|
(E) ← (A) |
0811 |
LDA |
3A 01 09 |
0901 |
|
|
0814 |
CPI |
FE 00 |
00 |
|
(F) ← (A) – 00 |
0816 |
JZ |
CA 31 08 |
0831 |
|
(PC) ← 0831 Если Z = 1 |
0819 |
MOV C, A |
4F |
|
|
(C) ← (A) |
081A |
MVI A |
3E 00 |
00 |
|
|
081C |
MVI D |
16 00 |
00 |
|
(D) ← 00 |
081E |
ADD C |
81 |
|
M1 |
|
081F |
JC |
DA 29 08 |
0829 |
|
(PC) ← 0829 Если С = 1 |
0822 |
DCR E |
1D |
|
M3 |
(E) ← (E) -1 |
0823 |
JNZ |
C2 1E 08 |
081E |
|
(PC) ← 081E если Z = 0 |
0826 |
JMP |
C3 2D 08 |
082D |
|
(PC) ← 082D |
0829 |
INR D |
14 |
|
M2 |
(D) ← (D) + 1 |
082A |
JMP |
C3 22 08 |
0822 |
|
(PC) ← 0822 |
082D |
MOV M, A |
77 |
|
M4 |
M(0903) ← (A) |
082E |
MOV A, D |
7A |
|
|
(A) ← (D) |
082F |
DCR L |
2D |
|
|
(L) ← (L) – 1 |
0830 |
MOV M, A |
77 |
|
|
M(0902) ← (A) |
0831 |
RST 7 |
FF |
|
|
Прекращение программы. |
.
Описание программы.
Командой LXI H, 0902 записываем адрес ячейки памяти в регистровую пару HL.
Командой MVI M, 00 обнуляем ячейку памяти, адрес которой храниться в регистровой паре HL (0902).
Командой INX H увеличиваем значение находящееся в регистровой паре HL на 1.
Командой MVI M, 00 обнуляем ячейку памяти, адрес которой храниться в регистровой паре HL (0903).
Командой LDA, 0900 записываем значение, которое храниться в ячейке памяти 0900 в регистр А (аккумулятор).
Далее проверяем записанное в аккумулятор значение на 0. Командой CPI, 00 сравниваем значение в регистре А с константой 00.
Командой JZ делаем условный переход. При значении признака Z=1 будет совершен переход в конец программы, к команде RST 7. При значении Z=0 перехода не будет и программа продолжит выполнение.
После проверки первого значения на ноль перемещаем его в регистр Е командой MOV E, A. Регистр Е будет содержать счетчик итераций цикла.
Командой LDA, 0901 загружаем второй множитель в аккумулятор.
Командой CPI, 00 сравниваем значение в аккумуляторе с 00.
Командой JZ делаем переход к команде RST 7, если признак Z=1. В случай если Z=0, то продолжаем выполнение программы.
После проверки второго значения на ноль перемещаем его в регистр С командой MOV C, A.
Командой MVI A, 00 обнуляем аккумулятор.
Командой MVI D, 00 обнуляем регистр D. Регистр D будет содержать то число, которое запишется в старший байт.
Командой ADD C складываем числа из аккумулятора и из регистра С.
Командой JC проверяем переполнение. Если признак С=1, то переходим к команде INR D и увеличиваем значение в регистре D на 1. Если признак С=0, то идем дальше по программе.
Командой DCR E уменьшаем значение в регистре Е.
Далее проверяется признак Z. Если Z=1, значит в результате выполнения предыдущей команды образовался 0, т.е. надо останавливать цикл и переходить к выводу результата. Если же Z=0, то команда JNZ перекинет к команде ADD C и цикл повториться.
Команда безусловного перехода JMP перекидывает к выводу результатов по адресу 082D.
Командой MOV M, A пересылается младший байт результата умножения в ячейку памяти, адрес которой находиться в регистровой паре HL (0903).
Командой MOV A, D в аккумулятор пересылается старший байт результата умножения из регистра D.
Командой DCR L уменьшается значение регистра L на 1.
Командой MOV M, A пересылается старший байт результата умножения в ячейку памяти, адрес которой находиться в регистровой паре HL (0903).
Команда RST 7 прекращает выполнение программы.
Вывод.
В ходе выполнения курсового проекта "Программа умножения двух однобайтных чисел" были разработаны блок-схема, программа на языке ассемблера КР580 и соответствующий ей вариант в машинных кодах. Представленная программа предназначена для умножения двух однобайтных чисел и была разработана с использованием языка ассемблера, что позволяет более эффективно управлять микропроцессором и его ресурсами. Важно отметить, что существует несколько алгоритмов умножения, каждый из которых имеет свои особенности и преимущества. В данном проекте был выбран простой алгоритм умножения, который имеет свой недостаток - значительную длительность вычислительного процесса. Однако, простота этого алгоритма позволила более легко реализовать его на языке ассемблера КР580. Разработанный код позволяет осуществлять умножение двух однобайтных чисел, используя минимальное количество инструкций, демонстрирует работу с операторами, регистрами и переходами, характерными для ассемблерных программ. Подробная блок-схема приведена для наглядности и облегчения понимания работы программы. В процессе выполнения данного проекта были получены навыки работы с языком ассемблера КР580, а также на практике была изучена работа процессора на самом низком уровне. Разработанная программа может быть использована для множества задач, где требуется умножение однобайтных чисел, и может стать основой для разработки более сложных программ на языке ассемблера. В целом, данная работа позволила углубить знания в области программирования на языке ассемблера и погрузиться в процесс разработки программ для микропроцессора КР580. Она представляет собой важный этап в освоении низкоуровневого программирования и исследовании работы процессора на самом глубоком уровне.
