Отчет (Всё по лабораторным работам БМТ)
Описание файла
Файл "Отчет" внутри архива находится в следующих папках: Всё по лабораторным работам БМТ, 1, lab. Документ из архива "Всё по лабораторным работам БМТ", который расположен в категории "". Всё это находится в предмете "электроника" из , которые можно найти в файловом архиве МГТУ им. Н.Э.Баумана. Не смотря на прямую связь этого архива с МГТУ им. Н.Э.Баумана, его также можно найти и в других разделах. Архив можно найти в разделе "лабораторные работы", в предмете "электроника и микропроцессорная техника" в общих файлах.
Онлайн просмотр документа "Отчет"
Текст из документа "Отчет"
Задание:
Используя директиву .DEF, присвоить РОН имена: day, month, year, начиная с регистра, номер которого соответствует номеру варианта. Записать в эти регистры числа, соответствующие дню, месяцу и году рождения.
Дополнить программу командами арифметического сложения и вычитания (из 1-го семинара) с заданными числами. Результаты выполнения операций поместить в оперативную память используя прямой и косвенный способы адресации.
Текст программы должен содержать подробные комментарии, т.е. указания:
-выполняемого действия;
- содержимого регистров PC (программный счётчик), SP (регистр-указатель стека), SREG (регистр состояния МК);
-РОН, если они содержат операнды.
Листинг:
.include "m8535def.inc"; подключение файла заголовков портов ввода вывода
;присвоение регистрам общего назначения R3-R6 определенных имен
.def day=R3; r3-->day
.def month=R4;r4-->month
.def year1=R5;r5-->year1
.def year2=R6;r6-->year2
.def reg=R25; r25-->reg
;инициализация указателя стека
ldi r25, LOW(RAMEND); в регистр R25 загружается начальный байт указателя стека
out $3d, r25; по адресу регистра SPL записывается значение
; начального байта указателя стека
ldi r25, HIGH(RAMEND); в регистр R25 загружается конечный байт указателя стека
out $3e, r25; по адресу регистра SPL записывается значение
; конечного байта указателя стека
;загрузка в регистры R16-R19 значений соответствующих
;году месяцу и дню рождения
ldi R16, 0x15; 21 (R16-->000101010-->0x15)
ldi R17, 0x0c; 12 (R17-->00001100-->0x0c)
ldi R18, 0x07; старший байт года(R18-->00000111-->0x07)
ldi r19, 0xC2; младший байт года(R19-->11000010-->0xc2)
;перенос загруженных значений из вышеозначенных регистров в регистры
;day, month, year1, year2
mov day, R16; (day-->00010101-->0x15)
mov month, R17; (month-->00001100-->0x0c)
mov year1, R18; (year1-->00000111-->0x07)
mov year2, R19; (year2-->11000010-->0xc2)
;копируем значения регистров r16, r18, r19 в другие регистры для выполнения
;арифметических операций
mov R10, day; (R10-->00010101-->0x15)
mov R11, year1;(R11-->00000111-->0x07)
mov R12, year2;(R12-->11000010-->0xc2)
;сложение младших 2-х байтов года с числом
;если возникнет перенос разряда, то в регистр SREG C запишется 1
add R10, R12; (R10=00010101+11000010=0x15+0xc2)
;SREG C=+1/-1
;сложение 2-x старших байтов года с нулевым регистром
; при этом используется команда, учитывающая значение
;регистра состояния SREG C
adc R11, R14; (R11=00000111+00000000+C=0x07+0x00+C)
;перносим полученные результаты в регистры R24, R25
mov r24, r10; младший байт (R24=00010101+11000010=0x15+0xc2)
mov r25, r11; старший байт (R25=00000111+00000000+C=0x07+0x00+C)
;очищаем временные регистры
mov r10, r30;(R10=00000000=0x00)
mov R11, R30;(R11=00000000=0x00)
mov R12, R30;(R12=00000000=0x00)
mov R16, R30;(R16=00000000=0x00)
mov R17, R30;(R17=00000000=0x00)
mov R18, R30;(R18=00000000=0x00)
mov R19, R30;(R19=00000000=0x00)
;переносим значения регистров day и month в другие регистры для
;выполенения арифметических операций
mov R10, day;(R10-->00010101-->0x15)
mov R11, month;(R11-->00001100-->0x0c)
;вычитаем значения хранящиеся в этих 2-x регистрах
sub R11, R10;(R11-->00001100-00010101-->0x0c-0x15)
;заносим результат в регистр R26;
mov R26, R11; (R26-->00001100-00010101-->0x0c-0x15)
;очищаем временные регитсры
mov R10, R30;(R10=00000000=0x00)
mov R11, R30;(R11=00000000=0x00)
;переносим полученное значение суммы в оперативную память
;используя прямой способ адресации
sts $0061, r25;по адресу $0061 записывается значение,
;хранящееся в регистре R25 (старшая часть года)
sts $0062, r24;по адресу $0062 записывается значение,
;хранящееся в регистре R24 (младшая часть года)
sts $0063, R26;по адресу $0063 записывается значение,
;хранящееся в регистре R26 (разность)
;переносим полученное значение разности в оперативную память,
;используя косвенный способ адресации
clr R31; очищаем регистр r31
ldi R30, $64; загружаем в регистр r30 значение $64
st Z+, R25; в оперативную память по адресу $0064 загружается
;значение регистра R25, инкреминируется адрес
st Z+, R24; в оперативную память по адресу $0065 загружается
;значение регистра R24, инкреминируется адрес
st Z, R26; в оперативную память по адресу $0066 загружается
;значение регистра R26