Главная страница

Курсовая работа по машинным языкам вариант 1. Вариант 1. Курсовая работа по дисциплине Машинные языки программирования


Скачать 169.5 Kb.
НазваниеКурсовая работа по дисциплине Машинные языки программирования
АнкорКурсовая работа по машинным языкам вариант 1
Дата19.06.2021
Размер169.5 Kb.
Формат файлаdoc
Имя файлаВариант 1.doc
ТипКурсовая
#218998

Министерство образования и науки Российской Федерации.

Федеральное агентство по образованию.

Государственное образовательное учреждение высшего профессионального образования.

Магнитогорский государственный технический университет им. Носова Г. И.

Кафедра электроники и микроэлектроники.


Курсовая работа

по дисциплине «Машинные языки программирования»

вариант №1.

Выполнил студент группы АП-03

Фамилия И.О.

Проверил к.т.н., доцент кафедры

Э и Мэ Швидченко Д.В.

Магнитогорск

2005

Оглавление

Анализ поставленной задачи. 4

Подробная блок-схема алгоритма решения задачи. 5

Описание программы на языке ассемблера и в машинных кодах МП КР580МП80А. 8

Вывод. 10

Литература 11


Анализ поставленной задачи.


Рассчитать контрольную сумму ПЗУ с адреса 0000h по адрес 0100h. Учитывать перенос в старший бит. Предусмотреть возможность переноса программы в адресном пространстве. Определить количество ячеек, в седьмом бите которых записан «0». Формат чисел:


7

6

5

4

3

2

1

0

Модуль числа


Для правильного нахождения контрольной суммы понадобится два регистра, так как даже если во всех ячейках массива будет записано число FFh, то контрольная сумма составит FFh*FFh=FE01h. Чтобы учесть перенос в старший бит, удобно воспользоваться сложением содержимого регистровых пар, так как в этих командах предусмотрен автоматический учёт переноса в старший бит. При этом в младший байт регистровой пары ВС будет загружаться текущее число массива, а старший байт необходимо обнулить в начале программы.

Для подсчёта количества ячеек, в которых седьмой бит содержит «0», будем использовать ячейку памяти с адресом 0805h, так как все регистры заняты.

Для удобства задания адресного пространства адрес первой и последней ячейки памяти массива будут находиться в ячейках памяти с адресами 0800h-0803h.

Регистровая пара ВС используется для хранения содержимого текущей ячейки памяти массива. Регистровая пара DE содержит адрес ячейки памяти массива. В регистровой паре HL находится контрольная сумма.

Подробная блок-схема алгоритма решения задачи.






В начале программы в регистровую пару DE загружается адрес первой ячейки памяти для подсчёта контрольной суммы (блок 1). Далее обнуляется содержимое регистровой пары HL (контрольная сумма), содержимое регистра В, содержимое ячейки памяти с адресом 0805h – счётчик количества ячеек памяти с нулевым седьмым битом (блок 2). Затем содержимое регистровой пары DE декрементируется (блок 3). Это необходимо сделать для того, чтобы была правильно проведена проверка на последнюю ячейку памяти задаваемого массива. В блоке 4 содержимое регистровой пары DE инкрементируется.

После этого в аккумулятор загружается содержимое ячейки массива (блок 5). Содержимое аккумулятора сдвигается влево и проверяется значение седьмого бита в блоке 6. Если в седьмом бите записано «0», то выполняется инкремент счётчика (блок 7). В противном случае сразу выполняется загрузка содержимого текущей ячейки массива (блок 8). Затем текущее число загружается в регистр С (блок 9). Далее суммируется содержимое регистровых пар HL и BC (блок 10). Так как в начале программы содержимое регистра В обнуляется, ошибки при нахождении контрольной суммы не будет.

В блоке 11 проверяется адрес текущей ячейки массива с адресом последней ячейки массива. Если текущая ячейка памяти не последняя, то выполняется переход к блоку 4. Иначе полученная контрольная сумма записывается в ячейки памяти с адресами 0806h, 0807h (блок 12) и программа завершает свою работу.


Описание программы на языке ассемблера и в машинных кодах МП КР580МП80А.


Таблица 1

Метка

Адрес

Данные

Ассемблер

Мнемоника

Комментарий




0810



LHLD 0800

(L)←M(0800)

(H)←M(0801)

Загрузка в регистровую пару DE адреса первой ячейки массива


0811

00

0812

08




0813

EB

XCHG

(HL)↔(DE)




0814

21

LXI H,0000

(HL)←0000

Обнуление содержимого регистровой пары HL

0815

00

0816

00




0817

44

MOV B,H

(B)←(H)

Обнуление содержимого регистра В




0818

7C

MOV A,H

(A)←(H)

Обнуление содержимого аккумулятора




0819

32

STA 0805

M(0805)←(A)

Обнуление содержимого ячейки памяти с адресом 0805h

081A

05

081B

08




081C

1B

DCX D

(DE)←(DE)-1

Декремент содержимого регистровой пары DE

M2

081D

13

INX D

(DE)←(DE)+1

Инкремент содержимого регистровой пары DE




081E

1A

LDAX D

(A)←M(DE)

Загрузка в аккумулятор содержимого ячейки памяти, адрес которой находится в регистровой паре DE




081F

07

RLC




Сдвиг содержимого аккумулятора влево




0820

DA

JC M1

JMP if C=1

Переход на метку М1, если в седьмом бите записано не «0»

0821

2A

0822

08




0823

3A

LDA 0805

(A)←M(0805)

Загрузка в аккумулятор содержимого ячейки памяти с адресом 0805h

0824

05

0825

08




0826

3C

INR A

(A)←(A)+1

Инкремент содержимого аккумулятора




0827

32

STA 0805

M(0805)←(A)

Запись в ячейку памяти с адресом 0805h количества отрицательных чисел

0828

05

0829

08







Окончание таблицы 1

Метка

Адрес

Данные

Ассемблер

Мнемоника

Комментарий

M1

082A

1A

LDAX D

(A)←M(DE)

Загрузка в аккумулятор содержимого ячейки памяти, адрес которой находится в регистровой паре DE




082B

4F

MOV C,A

(C)←(A)

Загрузка в регистр С содержимого аккумулятора




082C

09

DAD B

(HL)←(HL)+(BC)

Суммирование содержимого регистровых пар HL и BC




082D

3A

LDA 0802

(A)←M(0802)

Сравнение младшего байта адреса текущей ячейки памяти с младшим байтом адреса последней ячейки массива

082E

02

082F

08




0830

BB

CMP E

If (A)=(E)

Then Z=1




0831

C2

JNZ M2

JMP if Z=0

Переход на метку М2, если младшие байты адресов не равны

0832

1D

0833

08




0834

3A

LDA 0803

(A)←M(0803)

Сравнение старшего байта адреса текущей ячейки памяти со старшим байтом адреса последней ячейки массива

0835

03

0836

08




0837

BA

CMP D

If (A)=(D)

Then Z=1




0838

C2

JNZ M2

JMP if Z=0

Переход на метку М2, если старшие байты адресов не равны

0839

1D

083A

08




083B

22

SHLD 0806

M(0806)←(L)

M(0807)←(H)

Запись контрольной суммы в ячейки памяти с адресами 0806h, 0807h

083C

06

083D

08




083E

FF

RST7




Выход из программы

Вывод.


В ходе выполнения курсовой работы, была написана тест-программа ОЗУ для процессора МП КР580ВМ80А, позволяющая в заданном адресном пространстве найти контрольную сумму и количество ячеек, в седьмом бите которых записано «0».

Для расширения диапазона проверяемой адресного пространства адрес первой и последней ячеек памяти массива загружаются из ячеек памяти с адресами 0800h – 0803h. При этом для правильного нахождения контрольной суммы диапазон ячеек проверяемой памяти не должен быть больше 257 ячеек памяти.

Для переноса программы в адресном пространстве необходимо будет изменить адреса меток М1 и М2.

Для нахождения количество ячеек, в седьмом бите которых записано «0», используется ячейка памяти. Если во всех ячейках массива в седьмом бите будет «0», то число таких ячеек не превысит 256, что составляет ёмкость одного байта. Поэтому ошибки при подсчёте таких ячеек памяти не будет.

Ответ выводится в ячейки памяти 0805h-0807h. В ячейке с адресом 0805h находится количество ячеек, в седьмом бите которых записано «0». Младший байт контрольной суммы записывается в ячейку памяти с адресом 0806h, а старший байт – в ячейку памяти с адресом 0807h.


Литература


  1. Токхайм Р. “Микропроцессоры : курс и упражнения.”­- М.: Энергоатомиздат, 1989.

  2. Курс лекций по дисциплине “Машинные языки программирования”.





написать администратору сайта