Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
КУРСОВИК,КУРСОВИК,КУРСОВИК.doc
Скачиваний:
43
Добавлен:
16.04.2015
Размер:
191.49 Кб
Скачать

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