РАЗРАБОТКА И ОТЛАДКА ПРОГРАММ СЛОЖЕНИЯ ОДНОБАЙТНЫХ ЧИСЕЛ (ОПЕРАЦИИ ПЕРЕСЫЛКИ ДАННЫХ, СЛОЖЕНИЯ, РАЗЛИЧНЫЕ СПОСОБЫ АДРЕСАЦИИ)
Цель работы: закрепление знаний по данной теме, полученных на лекционных занятиях.
Пояснения к работе
Основные теоретические знания студенты получают в ходе лекционных занятий. Ниже приводятся типовые примеры программ по данной теме:
;4)(20H)<--(27H)+(3AH) MOV R0,#27H; (R0)<--27H MOV A,@R0; (A)<--((R0)) MOV R0,#3AH; (R0)<--3AH ADD A,@R0; (A)<--(A)+((R0)) MOV R0,#20H; (R0)<--20H MOV @R0,A; ((R0))<--(A) END |
;1)(R7)<--(R6)+(R5)
MOV A,R6; (A)<--(R6)
ADD A,R5; (A)<--(A)+(R5)
MOV R7,A; (R7)<--(A)
;2)(R5)<--(R3)+(2AH) MOV R0,#2AH; (R0)<--2AH MOV A,@R0; (A)<--((R0)) ADD A,R3; (A)<--(A)+(R3) MOV R5,A; (R5)<--(A) END |
END
;5) (2CH)<--(2AH)+(2BH) MOV R1,#2AH; (R1)<--2AH MOV A,@R1; (A)<--((R1)) INC R1; (R1)<--(R1)+1 ADD A,@R1; (A)<--(A)+((R1)) INC R1; (R1)<--(R1)+1 MOV @R1,A; ((R1))<--(A) END |
;3)(R2)<--(24H)+(3EH)
MOV R1,#24H; (R1)<--24H
MOV A,@R1; (A)<--((R1))
MOV R1,#3EH; (R1)<--3EH
ADD A,@R1; (A)<--(A)+((R1))
MOV R2,A; (R2)<--(A)
END
Порядок выполнения работы
1. Набрать исходный текст примера программы, произвести его трансляцию. Запустить отладчик-симулятор, загрузить программу в НЕХ-формате.
|
|
2. По исходному тексту определить количество байтов ПЗУ, занимаемого программой, а также время выполнения в машинных циклах.
3. По заданию преподавателя получить исходные значения слагаемых; произвести суммирование слагаемых вручную в двоичном, шестнадцатеричном и десятичном видах; сопоставить результаты суммирования.
4. Занести заданные слагаемые в соответствующие регистры или ячейки ОЗУ. Включить счетчик циклов (set-cYcles), установить в нем 0 (если это необходимо).
5. Выполняя программу в пошаговом режиме (клавиша F10), наблюдать за соответствующими изменениями содержимого аккумулятора, регистров, ячеек ОЗУ. Запомнить получившееся время выполнения; с помощью адресов первой и последней команд в ПЗУ определить занимаемое программой количество байтов (конечный адрес минус начальный адрес и плюс единица).
6. Сопоставить результаты сложения п.3 и п.5, а также количество байт ПЗУ и время выполнения в машинных циклах п.2 и п.5.
7. Повторить пп.3-6 для других значений слагаемых.
8. По заданию преподавателя, не выходя из отладчика-симулятора, оперативно изменить программу так, чтобы были задействованы другие регистры или ячейки ОЗУ (с помощью изменения кодов операторов в ПЗУ); повторить пп.3-7.
9. Повторить пп.1-8 для других примеров программ.
Лабораторная работа №3
РАЗРАБОТКА И ОТЛАДКА ПРОГРАММ С ИСПОЛЬЗОВАНИЕМ ПЕРЕХОДОВ, ЦИКЛОВ
Цель работы: закрепление знаний по данной теме, полученных на лекционных занятиях.
Пояснения к работе
Ниже приводятся типовые примеры программ по данной теме:
|
|
;1) (20H)-(3FH)<--FFH
MOV R7,#20H
MOV R0,#20H
MOV A,#0FFH
M1: MOV @R0,A
INC R0
DJNZ R7,M1
END
;2) (30H)-(3FH)<--(20H)-(2FH)
MOV R7,#10H
MOV R0,#20H
MOV R1,#30H
M1: MOV A,@R0
MOV @R1,A
INC R0
INC R1
DJNZ R7,M1
END
;3) (30H)-(3FH)<-->(20H)-(2FH)
MOV R7,#10H
MOV R0,#2FH
MOV R1,#3FH
M1: MOV A,@R0
XCH A,@R1
MOV @R0,A
DEC R0
DEC R1
DJNZ R7,M1
END
;4) (00H)-(3FH)<--00H
CLR A
MOV R0,#3FH
M1: MOV @R0,A
DJNZ R0,M1
END
;5) (10H)-(3FH)<--10H-3FH
MOV R5,#30H
MOV R1,#3FH
M1: MOV A,R1
MOV @R1,A
DEC R1
DJNZ R5,M1
END
;6) (25H)-(3FH)<--20H,25H,2AH...
MOV R7,#1BH
MOV R0,#25H
MOV A,#20H
M1: MOV @R0,A
INC R0
ADD A,#05H
DJNZ R7,M1
END
;7) (20H)-(2FH)<--(20H)-(2FH) +;(30H)-(3FH)
MOV R7,#10H
MOV R0,#2FH
MOV R1,#3FH
M1: MOV A,@R0
ADD A,@R1
MOV @R0,A
DEC R0
DEC R1
DJNZ R7,M1
END
;8) поиск FFH в (20H)-(3FH) и замена на 00H
MOV R7,#20H
MOV R0,#3FH
M1: MOV A,#0FFH
XRL A,@R0
JNZ M2
MOV @R0,A
M2: DEC R0
DJNZ R7,M1
END
;9)поиск FFH в (20H)-(3FH) и замена на EEH
MOV R7,#20H
MOV R0,#3FH
M1: MOV A,#0FFH
XRL A,@R0
JZ M2
JMP M3
M2: MOV A,#0EEH
MOV @R0,A
M3: DEC R0
DJNZ R7,M1
END
Порядок выполнения работы
1.Выполнить пп. 1 и 2 лабораторной работы №2.
2. По заданию преподавателя занести начальные значения в соответствующие регистры или ячейки ОЗУ. Включить счетчик циклов (set-cYcles), установить в нем 0.
3. Выполнить пп. 5-7 лабораторной работы №2.
Лабораторная работа №4
РАЗРАБОТКА И ОТЛАДКА ПРОГРАММ С ИСПОЛЬЗОВАНИЕМ МНОГОБАЙТНЫХ ЧИСЕЛ, ФЛАГОВ, ОРГАНИЗАЦИЯ ОПЕРАЦИИ ВЫЧИТАНИЯ, ЛОГИЧЕСКИЕ ОПЕРАЦИИ
Цель работы: закрепление знаний по данной теме, полученных на лекционных занятиях.
Пояснения к работе
Основные теоретические знания студенты получают в ходе лекционных занятий. Ниже приводятся типовые примеры программ по данной теме:
;1) (R6)<--(R5)and(R4)
MOV A,R5
ANL A,R4
MOV R6,A
NOP
;(R3)<--(R4)or(2BH)
MOV R0,#2BH
MOV A,R4
ORL A,@R0
MOV R3,A
NOP
;(2DH)<--(2EH)xor(2FH)
MOV R0,#2FH
MOV A,@R0
DEC R0
XRL A,@R0
DEC R0
MOV @R0,A
END
;2) сброс 0-го бита R3
MOV A,#0FEH; 1111 1110 B
ANL A,R3
MOV R3,A
NOP
;установка 7-го бита (3EH)
MOV R0,#3EH
MOV A,@R0
ORL A,#80H; 1000 0000 B
MOV @R0,A
NOP
;сброс 2,3-го и уст-ка 4,5-го бита R7
MOV A,R7
ANL A,#0F3H; 1111 0011 B
ORL A,#30H; 0011 0000 B
MOV R7,A
NOP
;сброс младшей тетрады (2CH)
MOV R0,#2CH
MOV A,@R0
ANL A,#0F0H; 1111 0000 B
MOV @R0,A
NOP
;установка старшей тетрады (3CH)
MOV R0,#3CH
MOV A,@R0
ORL A,#0F0H; 1111 0000 B
MOV @R0,A
NOP
;инверсия R2
MOV A,R2
CPL A
MOV R2,A
END
;3) при(F1)=0 - инверсия B0 (2FH)
; при(F1)=1 - инверсия B7 (2FH)
MOV R0,#2FH
MOV A,@R0
JF1 M1
;инверсия B0
XRL A,#01H; 0000 0001 B
JMP M2
;инверсия B7
M1: XRL A,#80H; 1000 0000 B
M2: MOV @R0,A
END;
4) (R6)<--(R5)-(R4), 1 сп.
MOV A,R4
CPL A
INC A
ADD A,R5
MOV R6,A
NOP
;(39H)<--(3AH)-(3BH), 2 сп.
MOV R0,#3AH
MOV A,@R0
CPL A
INC R0
ADD A,@R0
CPL A
MOV R0,#39H
MOV @R0,A
END
;5) (A)<--max (R4),(R6)
CLR C
MOV A,R4
CPL A
ADD A,R6
JNC NC
MOV A,R6
JMP M2
NC: MOV A,R4
M2: NOP
END
;6) (R6,R5)<--(R6,R5)+(R4,R3)
CLR C
MOV A,R5
ADD A,R3
MOV R5,A
MOV A,R6
ADDC A,R4
MOV R6,A
END
;7) сдвиг (R4,R3) влево
CLR C
MOV A,R3
RLC A
MOV R3,A
MOV A,R4
RLC A
MOV R4,A
END
;8) (R6,R5)<--(R6,R5)-(R4,R3)
MOV A,R5
CPL A
ADD A,R3
CPL A
MOV R5,A
MOV A,R6
CPL A
ADDC A,R4
CPL A
MOV R6,A
END
Порядок выполнения работы
1. Повторить пп. 1-3 занятия №3.
Лабораторная работа №5
ОТЛАДКА ПРОГРАММ УМНОЖЕНИЯ И ДЕЛЕНИЯ
Цель работы: закрепление знаний по данной теме, полученных на лекционных занятиях.
Пояснения к работе
Основные теоретические знания студенты получают в ходе лекционных занятий. Ниже приводятся примеры программ по данной теме:
;(R7,R6,R5)<--((R0+2),(R0+1))*((R0))
;(R7,R6,R5) – результат и частичная ; сумма (ЧС)
; при (R0)=29H ((R0)) – множитель (Мн)
; ((R0+2),(R0+1)) – умножаемое (Ум)
;установка начальных значений
CLR A; очистка A
MOV R7,A; R7
MOV R6,A; R6
MOV R5,A; R5
MOV R1,#08H; 8 циклов
MOV R0,#29H; указать на Мн
MOV A,@R0; загрузить Мн в A
;сдвиг ЧС влево через С
M0: CLR C; очистка C
XCH A,R5; сдвиг R5 влево
RLC A; через C без
XCH A,R5; потери (A)
XCH A,R6; сдвиг R6 влево
RLC A; через C без
XCH A,R6; потери (A)
XCH A,R7; сдвиг R7 влево
RLC A; через C без
XCH A,R7; потери (A)
;сдвиг Мн влево через C
RLC A;
;анализ (С)
JNC M1; при (C)=0 обход суммирования
;сложение ЧС и Ум
CLR C; очистка C
INC R0; указать на мл. байт Ум
XCH A,R5;сложить мл. байты Ум и
ADD A,@R0; ЧС без потери (A),
XCH A,R5; результат в R5
INC R0; указать на ст. байт Ум
XCH A,R6; сложить ст. байт Ум и
ADDC A,@R0; ср. байт ЧС с учетом (C)
XCH A,R6; без потери (A), результат в R6
|
|
XCH A,R7; сложить ст. байт ЧС
ADDC A,#00H; и признака C без
XCH A,R7; потери (A), результат в R7
DEC R0; вернуть
DEC R0; указатель на Мн
M1: DJNZ R1,M0; проверка конца цикла
END
;((R0+3),(R0+2).(R0+1),(R0))<--(R7,R6,R5)/(R4,R5)
; (R7,R6,R5) - делимое
; (R4,R3) - делитель
; ((R0+3),(R0+2)) - частное
; ((R0+1),(R0)) – остаток при (R0)=20H
;установка начальных значений
MOV R0,#24H; очистка
MOV R1,#04H; частного
CLR A; и остатка
D1: DEC R0; R0 укажет
MOV @R0,A; на мл. байт
DJNZ R1,D1; остатка
MOV R1,#18H; 24 цикла
;сдвиг делимого влево через C
D2: CLR C
MOV A,R5; старший бит
RLC A; старшего байта
MOV R5,A; делимого
MOV A,R6; попадает
RLC A; в C
MOV R6,A
MOV A,R7
RLC A
MOV R7,A
;сдвиг остатка влево через C
MOV A,@R0; бит из C
RLC A; попадает
MOV @R0,A; на место
INC R0; мл. бита
MOV A,@R0; мл. байта
RLC A; остатка
MOV @R0,A
DEC R0; вернуть указатель
;вычисление остатка
;((R0+1),(R0))<--((R0+1),(R0))-(R4,R3)
CLR C; разность
MOV A,@R0;
CPL A; младших
ADD A,R3;
CPL A;
MOV @R0,A;
INC R0; байтов
MOV A,@R0; разность
CPL A;
ADDC A,R4; старших
CPL A;
MOV @R0,A; байтов
DEC R0;вернуть указатель
;анализ остатка
JNC D3;обход, если остаток >=0
;восстановление остатка
;((R0+1),(R0))<--((R0+1),(R0))+(R4,R3)
MOV A,@R0; сумма
ADD A,R3; младших
MOV @R0,A; байтов
INC R0
MOV A,@R0; сумма
ADDC A,R4; старших
MOV @R0,A; байтов
DEC R0
;запись бита и сдвиг частного влево
D3: CPL C; инверсия С
INC R0; указать на младший
INC R0; байт частного
MOV A,@R0; сдвиг
RLC A; младшего байта
MOV @R0,A; частного
INC R0; указать на ст. байт частного
MOV A,@R0; сдвиг
RLC A; старшего байта
MOV @R0,A; частного
DEC R0; вернуть указатель
DEC R0; на младший
DEC R0; байт остатка
DJNZ R1,D2;анализ окончания цикла
END