
- •Пояснительная записка к курсовому проекту на тему:
- •1.Аналитическая часть.
- •2.Практическая разработка.
- •2.1 Описание алгоритма программы.
- •2.2 Распределение памяти и листинг программы.
- •2.3 Результаты тестирования программы.
- •3 Описание использованных при проектировании средств вычислительной техники.
2.Практическая разработка.
2.1 Описание алгоритма программы.
нет да нет <HL>
<= <HL> - 1
<A> <= <A>+30h
<A> <= <A>+30h
Запись из <A> по адресу
<DE> <D>
<= <D> + 1
<B>
<= <B> + 1
да
Выход в монитор
2.2 Распределение памяти и листинг программы.
Распределение памяти.
Регистры D,E – в них хранятся адреса результатов (с 6000h).
Регистры H,L – в них находятся адреса исходных данных (с 5000h).
Регистр В – счетчик на 10 шагов (в основной программе).
Аккумулятор А – регистр, который использовался для промежуточных вычислений.
Регистр В – регистр, в котором находилась старшая тетрада числа (в подпрограмме).
Регистр С – регистр, в котором находилась младшая тетрада числа (в подпрограмме).
Указатель стека – адрес 7000h.
В ячейках памяти с 5000h до 5009h находятся исходные однобайтные целые числа со знаком в прямом коде.
В ячейке 5FFF хранится число положительных элементов.
Листинг программы
Адрес |
Данные |
Код Ассемблера |
Комментарии |
4000 |
01 55 55 |
LXI B, 5555h |
С 5555h будут храниться в НЕХ положительные элементы. |
4003 |
21 00 00 |
LXI H, 0000h |
Создание счетчика положительного элемента массива |
4006 |
31 00 A0 |
LXI SP, A000h |
Создание цикла для определения положительных членов |
4009 |
AF |
XRA A |
Обнуление аккумулятора |
400A |
11 00 50 |
LXI D, 5000h |
С 5000h исходный массив данных |
400D |
F5 |
PUSH PSW |
|
400E |
D5 |
PUSH D |
|
400F |
1A |
LDAX D |
|
4010 |
17 |
RAL |
Циклический сдвиг влево для определения знака |
4011 |
D4 20 40 |
CNC 4020 |
Переход по условию (CY <> 0) на 4020h |
4014 |
D1 |
POP D |
|
4015 |
F1 |
POP PSW |
|
4016 |
13 |
INX D |
|
4017 |
3C |
INR A |
Увеличение значения аккумулятора на 1 |
4018 |
FE 0A |
CPI 0Ah |
Сравнение значения аккумулятора с 10. |
401A |
DA OD 40 |
JC 400D |
|
401D |
C3 25 40 |
JMP 4025h |
Безусловный переход на 4025h |
4020 |
1A |
LDAX D |
|
4021 |
O2 |
STAX B |
Сохранение положительных членов массива |
4022 |
O3 |
INX B |
|
4023 |
2C |
INR L |
Увеличение счетчика положительных элементов на 1 |
4024 |
C9 |
RET |
Возврат в основную программу на 4014h |
4025 |
7D |
MOV A,L |
|
4026 |
FE 00 |
CPI 00h |
Сравнение значения счетчика с 0 |
4028 |
CA 31 40 |
JZ 4031h |
Если нет положительных значений, то переход на 4031h |
402B |
32 FF 5F |
STA 5FFFh |
Запись количества положительных чисел в 5FFFh |
402E |
C3 3C 40 |
JMP 403Ch |
Безусловный переход на 403Сh |
4031 |
3E 6F |
MVI A, 6Fh |
|
4033 |
CD 58 00 |
CALL 58h |
Вывод на экран двух нулей |
4036 |
CD 58 00 |
CALL 58h |
|
4039 |
C3 40 00 |
JMP 40h |
Ожидание ввода команды монитора |
403C |
E5 |
PUSH H |
|
403D |
11 00 60 |
LXI D, 6000h |
|
4040 |
01 55 55 |
LXI B, 5555h |
|
4043 |
0A |
LDAX B |
|
4044 |
E6 F0 |
ANI F0h |
Обнуление 2-й тетрады. |
4046 |
1F |
RAR |
Сдвиг содержимого аккумулятора на 1 вправо |
4047 |
1F |
RAR |
|
4048 |
1F |
RAR |
|
4049 |
1F |
RAR |
|
404A |
CD 5F 40 |
CALL 405Fh |
Вызов процедуры преобразования из НЕХ в КОИ-7 |
404D |
12 |
STAX D |
|
404E |
13 |
INX D |
|
404F |
0A |
LDAX B |
Восстановление содержимого в аккумуляторе |
4050 |
E6 0F |
ANI 0Fh |
Обнуление 1-й тетрады |
4052 |
CD 5F 40 |
CALL 405Fh |
Вызов процедуры преобразования из HEX в КОИ-7 |
4055 |
12 |
STAX D |
|
4056 |
13 |
INX D |
|
4057 |
O3 |
INX B |
|
4058 |
2D |
DCR L |
Цикл по регистру L (количество положительных элементов) |
4059 |
C2 43 40 |
JNZ 4043h |
|
405C |
C3 6A 40 |
JMP 406Ah |
Безусловный переход на 406Ah |
405F |
FE 0A |
CPI 0Ah |
Сравнение тетрады с 10 |
4061 |
D2 C7 40 |
JNC 4067h |
Если не равно 10, то переход на 4067h |
4064 |
F6 30 |
ORI 30h |
Логическое сложение аккумулятора с 30h |
4066 |
C9 |
RET |
Возврат в основную подпрограмму |
4067 |
C6 37 |
ADI 37h |
Сложение содержимого аккумулятора в 37h |
4069 |
C9 |
RET |
Возврат в подпрограмму 4067h |