Файл: Разработка программы на языке ассемблер К580 и в машинных кодах.docx
Добавлен: 04.12.2023
Просмотров: 91
Скачиваний: 5
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
Министерство науки и высшего образования Российской Федерации
Федеральное государственное бюджетное образовательное учреждение высшего образования «Магнитогорский государственный технический университет имени
Г.И. Носова»
Институт Энергетики и Автоматизированных Систем
Кафедра электроники и микроэлектроники
КУРСОВАЯ РАБОТА
по дисциплине «Машинные языки»
на тему: Разработка программы на языке ассемблер К580 и в машинных кодах
Вариант – 25
Исполнитель: студент__________ III курса, группа ________
Руководитель: к.т.н., доцент, Швидченко Д.В.
Работа допущена к защите «___» ________2023г.____________
(подпись)
Работа защищена «___» ________2023г. с оценкой _______ _____________
(оценка) (подпись)
Магнитогорск 2023
Содержание
Введение 3
1 Постановка и анализ задачи курсового проектирования 4
1.1 Постановка задачи 4
1.2 Анализ поставленной задачи 4
2 Разработка и описание программы 5
2.1 Разработка блок-схемы 5
2.2 Разработка программы на языке ассемблера и в машинных кодах 6
МП КР580ВМ80А 6
2.3 Описание программы 8
ЗАКЛЮЧЕНИЕ 9
Список использованных источников 10
Введение
Язык ассемблера – это машинно-ориентированный язык программирования низкого уровня. Язык ассемблера значительно облегчает написание кода, т.к. это символьная форма записи машинного кода. Для одной ЭВМ можно разработать различные языки ассемблера.
Так как ассемблер – это язык процессора, то пока будут существовать различного вида процессоры, будет жив и ассемблер. Человек, знающий ассемблер, сможет не только разобраться в коде, написанном на языке высокого уровня, но и оптимизировать его. Знание ассемблера значительно упростит понимание архитектуры компьютера и работы его аппаратной части. Необходимо знать архитектуру процессора используемого компьютера для того, чтобы программа была написана грамотно, ведь язык ассемблера разрабатывается с учетом специфики процессора.
Ассемблер, как и у любой другой язык, имеет ряд плюсов и минусов, но достоинств низкоуровневый язык программирования ассемблер имеет гораздо больше, чем недостатков. Учитывая все вышеупомянутое, можно сделать вывод, что у ассемблера есть будущее.
1 Постановка и анализ задачи курсового проектирования
1.1 Постановка задачи
В исходном массиве однобайтных чисел выделить все числа больше 510. Полученный массив расположить по возрастанию. Формат чисел следующий:
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
З | Модуль числа |
где З – знак числа.
1.2 Анализ поставленной задачи
Для указания адресов массива воспользуемся ячейками 0800-0801 (начальный адрес массива) и 0802-0803 (конечный адрес массива), регистр С будем использовать для подсчета чисел, ячейка 0810 – начальный адрес исходного массива, ячейка 0850 – начальный адрес полученного массива.
Более подробно с анализом поставленной задачи ознакомимся в блок-схеме, приведенной в пункте 2.1.
2 Разработка и описание программы
2.1 Разработка блок-схемы
Рисунок 1 - Блок-схема алгоритма решения задачи
2.2 Разработка программы на языке ассемблера и в машинных кодах
МП КР580ВМ80А
Таблица 1 - Листинг программы
Метка | Адрес | Данные | Ассемблер | Мнемоника | Комментарии |
| 0900 0901 0902 | 3A 00 08 | LDA 0800 | (А)←М(0800) | Загрузка начального адреса массива |
| 0903 | 47 | MOV B, A | (В)←(А) | Пересылка из (А) в (В) |
| 0904 0905 0906 | 3A 02 08 | LDA 0802 | (A)←М(0802) | Загрузка конечного адреса массива |
| 0907 | 90 | SUB B | (А)←(А) - (В) | Вычитание (А) и (В) |
| 090A | 3C | INR A | (А)←(А) + 1 | Инкремент (А) |
| 090B | 47 | MOV B, A | (В)←(А) | Пересылка из (А) в (В) |
| 090C 090D 090E | 11 50 08 | LXI D 0850 | (DE)←0850h | Загрузка 0850 в DE |
| 090F 0910 0911 | 21 10 08 | LXI H 0810 | (HL)←0810h | Загрузка 0810 в HL |
| 0912 | 0D | DCR C | (C)←(C) - 1 | Декремент (C) |
| 0913 | 2B | DCX H | (HL)←(HL)-1 | Декремент HL |
| 0914 | 1B | DCX D | (DE)←(DE)-1 | Декремент DE |
M1 | 0915 | 23 | INX H | (HL)←(HL)+1 | Инкремент HL |
| 0916 | 13 | INX D | | |
| 0917 | 7E | MOV A, M | (А)← М(HL) | Загрузка данных в (A) из M(HL) |
| 091A 091B | FE 05 | CPI 05h | | Сравнение (A) и 05h |
| 091C 091D 091E | CA 15 09 | JZ M1 | | Переход на М1, если Z=1 |
| 091F 0920 0921 | DA 14 09 | JC M1 | | Переход на М1, если C=1 |
| 0922 | 12 | STAX D | M(DE)← (A) | Запись содержимого (А) в M(DE) |
| 0923 | 05 | DCR B | (B)←(B) - 1 | Декремент (B) |
| 0924 | 0C | INR C | (C)←(C) + 1 | Инкремент (C) |
| 0925 | C2 15 09 | JNZ M1 | | Переход на М1, если Z=0 |
0926 | |||||
0927 |
Продолжение таблицы 1
Метка | Адрес | Данные | Ассемблер | Мнемоника | Комментарии |
| 092A092B092C | 11 50 08 | LXI D 0850 | (DE)←0850h | Загрузка 0850 в DE |
| 092D092E 092F | 21 50 08 | LXI H 0850 | (HL)←0850h | Загрузка 0850 в HL |
| 0930 | 2B | DCX H | (HL)←(HL)-1 | Декремент HL |
M4 | 0931 | 23 | INX H | (HL)←(HL)+1 | Инкремент HL |
| 0932 | EB | XCHG | (HL)↔(DE) | Обмен данными между (HL) и (DE) |
| 0933 | 1A | LDAX D | (А)← М(DE) | Загрузка данных в (A) из M(DE) |
| 0934 | 47 | MOV B, A | (В)←(А) | Пересылка из (А) в (В) |
M2 | 0935 | 13 | INX D | (DE)←(DE)+1 | Инкремент DE |
| 0936 | 1A | LDAX D | (А)← М(DE) | Загрузка данных в (A) из M(DE) |
| 0937 | B8 | CMP B | | Сравнение (A) и (B) |
| 093A093B 093C | CA 35 09 | JZ M2 | | Переход на М2, если Z=1 |
| 093D093E 093F | DA 43 09 | JC M3 | | Переход на М3, если С=1 |
| 0940 0941 0942 | C3 35 09 | JMP M2 | | Безусловный переход на М2 |
M3 | 0943 | 1B | DCX D | (DE)←(DE)-1 | Декремент DE |
| 0944 | 12 | STAX D | M(DE)← (A) | Запомнить данные из (A) в M(DE) |
| 0945 | 13 | INX D | (DE)←(DE)+1 | Инкремент DE |
| 0946 | 78 | MOV A, B | (А)←(В) | Пересылка из (В) в (А) |
| 0947 | 12 | STAX D | M(DE)← (A) | Запомнить данные из (A) в M(DE) |
| 0948 | 0D | DCR C | (C)←(C) - 1 | Декремент (C) |
| 094A094B 094C | C2 31 09 | JNZ M4 | | Переход на М4, если Z=0 |
| 094D | FF | RST7 | | |
2.3 Описание программы
Начальный адрес массива хранится в ячейках 0900, 0901, 0902.
Конечный адрес массива хранится в ячейках 0904, 0905, 0906.
Старт программы начинается с ячейки 0903.
Ответ выводится в ячейку 0947.
Массив может быть произвольной длины.
ЗАКЛЮЧЕНИЕ
В данной курсовой работе была разработанна программа, находящая все числа больше 510 и располагающая полученный массив по возрастанию.
Достоинством программы является компактность и удобство расположения ответа.
Недостатком является необходимость пользователя в сбросе регистров после каждого использования программы, а также обнуление ячейки, куда выводится ответ (0947).
Список использованных источников
-
Лукьянов, С.И. Основы микропроцессорной техники / С.И. Лукьянов, Д.В. Швидченко, Е.С. Суспицын, Р.С. Пишнограев, Н.В. Швидченко, С.С. Красильников. – Магнитогорск : , 2019. – 139 с. -
Skillbox [Электронный ресурс]. – Режим доступа: https://skillbox.ru/media/code/chto-takoe-assembler/. – Дата доступа: 11.12.2022.