Автор: Пользователь скрыл имя, 07 Марта 2013 в 06:20, курсовая работа
Максимальное число проверяемых ячеек памяти равно 257. В каждой ячейки памяти может быть одновременно не больше трёх сочетаний «101. Отсюда следует, что максимальное количество сочетаний «01» в тестируемом адресном пространстве составляет 257*3=771 или 303h. Значит, для ответа потребуется две ячейки памяти.
1. Анализ поставленной задачи . ............................................................................... 3
2. Разработка блок-схемы поставленной задачи. ..................................................... 4
3. Разработка программы. ........................................................................................... 7
4. Вывод. ....................................................................................................................... 9
5. Список используемой литературы. ....................................................................... 10
Министерство образования и науки Российской Федерации.
Государственное образовательное учреждение высшего профессионального образования
ГОУ ВПО «Магнитогорский государственный технический университет
им. Г. И. Носова »
Кафедра электроники и микроэлектроники.
Курсовая работа
по дисциплине «Машинные языки программирования»
вариант №44.
Выполнил: студент группы АП-08
Вахтеров М.В.
Проверил: д.т.н., профессор
Лукьянов С.И.
Магнитогорск
2010
Подсчитать
число сочетаний «101» в
1 сочетание
3 сочетание
2 сочетание
1 |
0 |
1 |
0 |
1 |
1 |
0 |
1 |
Модуль числа |
Максимальное число
В ячейки памяти возможно шесть вариантов расположения сочетания «101». Для определения сочетания, после загрузки содержимого ячейки памяти в аккумулятор, накладывается маска на содержимое аккумулятора, выделяющая только три бита, а потом результат сравнивается с сочетанием «101». Если сочетание «101» есть, то счётчик сочетаний инкрементируется. Иначе проверяются следующие три бита. Таким образом, проверяются все шесть возможных комбинаций в цикле.
После проверки всех ячеек памяти количество сочетаний «101» выводится в ячейки памяти с адресами 0900h и 0901h.
Регистровая пара ВС используется для маскирования. Регистр D - для подсчёта количества сочетаний «101», регистр Е – счётчик прохождения тела цикла. В регистровой паре HL содержится адрес текущей ячейки памяти.
Перед началом основной программы необходимо обнулить содержимое регистра D и ячеек памяти с адресами 0900h и 0901h.
Программа будет храниться в адресном пространстве, начиная с ячейки памяти 080Сh.
2. Разработка блок-схемы поставленной задачи.
А
Обнуление счётчика сочетаний «101»
Загрузка начального адреса в регистровую пару HL
(Е)←06, (ВС)←A0E0
(А)←M(HL), (A)←(A)^(C)
(A)=(B)
Увеличение счетчика сочетаний «101» на 1
Сдвиг содержимого регистров В и С вправо
(Е)-1=0?
1
Да
Нет
Да
Нет
1
2
3
4
5
6
7
8
Рисунок 1. Блок-схема
программы (начало)
Конец
1
Да
Нет
Ячейка памяти последняя?
Вывод содержимого регистра D в ячейку памяти с адресом 0900h
(HL)←(HL)+1
9
11
10
Рисунок 1. Блок-схема программы (окончание)
Как видно из рисунка 1, программа состоит из 11 блоков.
В начале данной программы обнуляется счётчик сочетаний «101» - регистр D (блок 1). Затем в регистровую пару HL загружается адрес первой ячейки тестируемой памяти из ячеек памяти с адресами 0800h, 0801h (блок 2). Далее в регистр Е загружается число прохождения тела цикла, а в регистры В и С записываются маски для определения наличия сочетания «101» (блок 3).
Затем в аккумулятор загружается содержимое ячейки памяти, адрес которой находится в регистровой паре HL. С помощью маски, находящейся в регистре С обнуляются пять битов содержимого аккумулятора (при первом прохождении тела цикла ими являются биты с нулевого по четвертый) – блок 4. В блоке 5 проверяется равенство между тремя тестируемыми битами и сочетанием «101» (сравнивается содержимое аккумулятора и регистра (B). Если биты представляют собой сочетание «101», то счётчик этих сочетаний инкрементируется (блок 6). В противном случае выполняется сразу переход к блоку 7 – содержимое регистров В и С сдвигается вправо для тестирования следующих трех битов. Следом содержимое регистра Е декрементируется и проверяется равен ли он нулю (блок 8). Если содержимое регистра Е не равно нулю, то выполняется переход к блоку 4.
Иначе осуществляется переход к блоку 9, в котором проверяется, не последняя ли текущая ячейка памяти. Для этого сравнивается содержимое регистровой пары HL и адрес последней тестируемой ячейки памяти, находящийся в ячейках памяти с адресами 0802h, 0803h. Если ячейка памяти последняя, то содержимое регистра D выводится в ячейку памяти с адресом 0900h (блок 10). После этого программа завершает свою работу.
В ином случае содержимое регистровой пары инкрементируется (блок 11) и далее выполняется переход к блоку 3.
Описание программы на языке ассемблера и в машинных кодах
Метка |
Адрес |
Данные |
Ассемблер |
Мнемоника |
Комментарий |
080C 080D |
3E 00 |
MVI A,00 |
(A)←00 |
Загрузка в аккумулятор числа 00h | |
080E 080F 0810 |
32 01 09 |
STA 0901 |
M(0901)←(A) |
Обнуление содержимого ячейки памяти с адресом 0901h | |
0811 |
57 |
MOV D,A |
(D)←A |
Обнуление счётчика сочетаний «101» | |
0812 0813 0814 |
2A 00 08 |
LHLD 0800 |
(L)←M(0800) (H)←M(0801) |
Загрузка в регистровую пару HL адреса первой ячейки | |
M5 |
0815 0816 |
1E 06 |
MVI E,06 |
(E)←06 |
Загрузка в регистр Е числа 06h |
0817 0818 0819 |
01 E0 A0 |
LXI B, A0E0 |
(BC)← A0E0 |
Загрузка в регистровую пару ВС числа A0E0h | |
M2 |
081A |
7E |
MOV A,M |
(A)←M(HL) |
Загрузка в аккумулятор |
081B |
A1 |
ANA C |
(A)←(A)^(C) |
Логическое умножение | |
081C |
B8 |
CMP B |
Z=1 if (A)=(B) |
Сравнение содержимого аккумулятора и регистра В | |
081D 081E 081F |
C2 2B 08 |
JNZ M1 |
JMP if Z=0 |
Переход на метку М1, если нет сочетания «101» | |
0820 |
14 |
INR D |
(D)←(D)+1 |
Инкремент содержимого регистра D | |
0821 0822 0823 |
C2 2B 08 |
JNZ M1 |
JMP if Z=0 |
Переход на метку М1, если регистр D не переполнен | |
0824 0825 0826 |
3A 01 09 |
LDA 0901 |
(A)←M(0901) |
Загрузка содержимого ячейки памяти с адресом 0901h в аккумулятор | |
0827 |
3C |
INR A |
(A)←(A)+1 |
Инкремент содержимого аккумулятора | |
0828 0829 082A |
32 01 09 |
STA 0901 |
M(0901)←(A) |
Запись содержимого | |
M1 |
082B |
78 |
MOV A,B |
(A)←(B) |
Запись в аккумулятор |
082C |
0F |
RRC |
Сдвиг вправо содержимого аккумулятора | ||
082D |
47 |
MOV B,A |
(B)←(A) |
Загрузка в регистр В содержимого аккумулятора | |
Продолжение таблицы 1 | |||||
Метка |
Адрес |
Данные |
Ассемблер |
Мнемоника |
Комментарий |
082E |
79 |
MOV A,C |
(A)←(C) |
Запись в аккумулятор | |
082F |
0F |
RRC |
Сдвиг вправо содержимого аккумулятора | ||
0830 |
4F |
MOV C,A |
(C)←(A) |
Загрузка в регистр С содержимого аккумулятора | |
0831 |
1D |
DCR E |
(E)←(E)-1 |
Декремент содержимого регистра Е | |
0832 0833 0834 |
C2 1A 08 |
JNZ M2 |
JMP if Z=0 |
Переход на метку М2, если содержимое регистра Е не равно нулю | |
0835 0836 0837 |
3A 02 08 |
LDA 0802 |
(A)←M(0802) |
Загрузка в аккумулятор | |
0838 |
BD |
CMP L |
Z=1 if (A)=(L) |
Сравнение содержимого регистра L с содержимым аккумулятора | |
0839 083A 083B |
C2 43 08 |
JNZ M3 |
JMP if Z=0 |
Переход на метку М3, если содержимое регистра L не равно содержимому аккумулятора | |
083C 083D 083E |
3A 03 08 |
LDA 0803 |
(A)←M(0803) |
Загрузка в аккумулятор | |
083F |
BC |
CMP H |
Z=1 if (A)=(H) |
Сравнение содержимого регистра Н с содержимым аккумулятора | |
0840 0841 0842 |
CA 47 08 |
JZ M4 |
JMP if Z=1 |
Переход на метку М4, если содержимое регистра Н равно содержимому аккумулятора | |
M3 |
0843 |
23 |
INX H |
(HL)←(HL)+1 |
Инкремент содержимого регистровой пары HL |
0844 0845 0846 |
C3 15 08 |
JMP M56 |
Безусловный переход на метку М5 | ||
M4 |
0847 |
7A |
MOV A,D |
(A)←(D) |
Загрузка в аккумулятор |
0848 0849 084A |
32 00 09 |
STA 0900 |
M(0900)←(A) |
Запись в ячейку памяти с адресом 0900h содержимого аккумулятора | |
084B |
FF |
RST 7 |
Завершение программы |
В ходе выполнения курсовой работы, была написана программа, позволяющая подсчитать количество сочетаний «101» в заданном адресном пространстве.
Достоинства: если необходимо подсчитать количество других сочетаний из трех байт, то достаточно изменить маску, загружаемую в регистр В, а так же само сочетание (регистр С). Так же возможно тестирование другого адресного пространства, включая ячейки памяти с адресами 0000h – FFFFh.
Недостатки: программа позволяет подсчитать количество сочетаний «101» только внутри определенной ячейки.
Для того , чтобы программа считала сочетания и на стыке двух ячеек необходимо усовершенствование , а именно подсчитывать количество этих сочетаний с помощью регистра состояния.
Ответ записывается в две ячейки памяти с адресами 0900h-0901h. Причем в ячейку памяти с адресом 0900h – младший байт, а в ячейку памяти с адресом 0901h – старший байт. Программа располагается в адресном пространстве 080Сh-084Вh.