Министерство образования и науки РФ
Санкт-Петербургский государственный электротехнический университет
“ЛЭТИ”
Кафедра РС
ОТЧЕТ
по лабораторной работе № 7
Выполнил Максимов М.С.
Факультет РТ
Группа № 0105
Преподаватель Смирнов Б.И.
Санкт-Петербург
2013
Лабораторная работа № 7
Вычислить сумму по модулю 65536 всех байт буферов BUF1 и BUF3. Подпрограмма CODING без изменений. Контрольных сумм (2 байта) разместить в памяти за соответствующими буферами.
Текст программы:
$ALLPUBLIC
$TITLE(TITLE 'LAB-RAB5. I8085 2009 =L_01.A85')
; COURIER
; L_01.A85
; ВАРИАНТ ПРОГРАММЫ ИЗ НЕСКОЛЬКИХ ИСХОДНЫХ ФАЙЛОВ
; РАЗДЕЛ 7 ЛАБОРАТОРНОГО ПРАКТИКУМА
; MAIN PROGRAM
%INCLUDE "OPIS.INC" ; ПОДКЛЮЧЕНИЕ
%INCLUDE "LAB_IO.INC" ;ДОПОЛНИТЕЛЬНЫХ
%INCLUDE "INIT_BU.MAC" ;ТЕКСТОВЫХ ФАЙЛОВ
RAM EQU 0800H ; стартовый адрес памяти типа RAM(2кбайт)
ROM EQU 0000H ; стартовый адрес памяти типа ROM(2кбайт)
LEN_RAM EQU 0800H ; размер памяти типа RAM
; задание BUF
TEXTSIZE EQU 20H ; размер буферов
DEFSEG DATA1,CLASS=DATA,START=RAM
SEG DATA1
BUF1: DS TEXTSIZE
BUF2: DS TEXTSIZE
BUF3: DS TEXTSIZE
SUMM1: DS 2 ; резервирование 2-х байтового пространства под ;сумму
SUMM2: DS 2 ; для 1 и 3 буферов
;задание STACK
STACKSIZE EQU 32
DEFSEG STACK,CLASS=DATA,START=RAM+LEN_RAM-STACKSIZE
SEG STACK
STACKR: DS STACKSIZE ;
STPOINT EQU $ ;назначение для имени STPOINT значения текущего ;адреса
; FLAGS
SEG DATA1
PASS1 DS 1
; MASKS FOR EXAMPLES
MASK11 EQU 00000011B
MASK12 EQU 01010000B
;
; PROGRAMM
;
EXTERN DEQH ; ОБЪЯВЛЕНИЕ ВНЕШНЕГО ИМЕНИ,
; ПОДКЛЮЧАЕМОГО НА СТАДИИ КОМПОНОВКИ
SEG CODE
PROG:
LXI SP,STPOINT ;установка указателя стека
MVI A,0
OUT DB8355 ;настройка портов ввода
DCR A
OUT DA8355 ;ALL OUTPUT
; инициализация стека и всех трёх буферов данных кодами «.», «1», «2», «3»
INIT1 STACKR,'.',STACKSIZE
INIT1 BUF1,'1',TEXTSIZE
INIT1 BUF2,'2',TEXTSIZE
INIT1 BUF3,'3',TEXTSIZE
;
; MAIN
;
; INPUT TO PORT A 8355
LXI H,BUF1+TEXTSIZE-1 ; HL= BUF1+TEXTSIZE-1
MVI M,0 ;конец BUF1
XCHG ; обмен содержимым DE и HL
LXI H,BUF1 ; HL= BUF1
LOOPIN:
IN PB8355 ; чтение ТБ из файла
MOV M,A ; Переслать из A в M
INX H
CALL DEQH ; ПП сравнения (вычитания) Е-L, если байты не равны, то выход
JNZ LOOPIN
; DECODING
LXI H,BUF1 ; указатель записи BUF1
CALL KONSUM ; вызов ПП контрольной суммы содержимого BUF1
LXI D,BUF2 ; указатель записи BUF2
MVI A,1
STA PASS1 ; установка флага первого прохода
LOOP1:
MOV A,M ; чтение ТБ
ORA A ; проверка ТБ на 0
JZ ENDTEXT
CALL CODING ; использование ПП кодирования
STAX D ; сохранение ТБ в буфере записи
INX H ; модификация текущего указателя чтения
INX D ; и записи
JMP LOOP1
ENDTEXT:
STAX D
LDA PASS1
ORA A ; проверка флага прохода
MVI A,0
STA PASS1 ; сброс первого прохода
JZ HALT ; переход по прежнему значению PASS
PRODOLJ:
; ONCE MORE
LXI H,BUF2 ; загрузка указателей чтения
LXI D,BUF3 ; и записи для 2 прохода
JMP LOOP1
;
HALT:
LXI H,BUF3
CALL KONSUM1
; OUTPUT FROM THE PORT B
LXI H,BUF2 ; указатель чтения для вывода
MVI B,TEXTSIZE-1 ; размер буфера вывода
LOOPOUT:
MOV A,M ; чтение ТБ
OUT PA8355 ;вывод данных
INX H ; модификация ТУ
DCR B
JNZ LOOPOUT ; повторять до конца буфера
HLT ; останов процессора
CODING: ; ПП кодирования/декодирования
CMA ; побитовая инверсия ТБ
RET ; возврат из ПП
KONSUM: ; ПП контрольной суммы содержимого BUF1
PUSH B ; поместить в стек содержимое регистровых пар BC,HL,DE
PUSH H
PUSH D
MVI A,0 ; инициализация регистров A,D,E
MVI D,0
MVI E,0
MVI B,TEXTSIZE ; помещение в регистр В содержимое TEXTSIZE=20Н
LOOL:
MOV A,E ; переслать из E в A
ADC M ; A←М(HL) + (A) + CY
MOV E,A ; переслать из А в Е
INX H ;модификация ТУ
DCR B
MOV A,D ; Переслать из D в A
ADD M ; A←М(HL) + (A)
MOV D,A ; Переслать из A в D
INX H ; Модификация ТУ
DCR B
JNZ LOOL ; проверка на конец
XCHG ; Обмен содержимым DE и HL
SHLD SUMM1 ; Записать HL по адресу SUMM1
POP D ; Извлечь слово из стека в DE, HL ,BC
POP H
POP B
RET ; Возврат из подпрограммы
KONSUM1: ; ПП контрольной суммы содержимого BUF3
PUSH B
PUSH H
PUSH D
MVI A,0
MVI D,0
MVI E,0
MVI B,TEXTSIZE
LOOL1:
MOV A,E
ADC M
MOV E,A
INX H
DCR B
MOV A,D
ADD M
MOV D,A
INX H
DCR B
JNZ LOOL1
XCHG
SHLD SUMM2
POP D
POP H
POP B
RET
END
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.