Цель работы
Изучение регистров общего назначения (РОН) и команд пересылки данных.
Постановка задачи
1. Занести число из столбца «Число 1» таблицы 7 и строки, соответствующей заданному варианту, в регистр R 24;
2. Занести число из столбца «Число 2» таблицы 7 и строки, соответствующей заданному варианту, в в регистр R 25;
3. Занести число из столбца «Число 3» таблицы 7 и строки, соответствующей заданному варианту, в регистровую пару X(R 26:27);
4. Занести число из столбца «Число 4» таблицы 7 и строки, соответствующей заданному варианту, в в регистр в регистровую пару Y(R 28:29);
5. Занести содержимое регистровой пары X в оперативную память, младшую часть регистровой памяти занести по адресу $0070, старшую – по адресу $0071.
6. Занести содержимое регистровой пары Y в оперативную память, младшую часть регистровой памяти занести по адресу $0080, старшую – по адресу $0081.
7. Обменять числа, хранящиеся в регистрах R 24 и R 25 после выполнения пунктов 1 и 2, между собой, 3-мя разными способами;
8. Обменять числа, хранящиеся в регистровых парах X и Y после выполнения пунктов 3 и 4, между собой, 3-мя разными способами;
9. Обменять между собой содержимое четырех ячеек оперативной памяти: содержимое ячейки памяти с адресом $0070 поменять с содержимым ячейки $0080, а содержимое ячейки памяти с адресом $0071 поменять с содержимым ячейки памяти с адресом $0081.
Таблица 7
Номер варианта | Число 1 | Число 2 | Число 3 | Число 4 |
1 | 38 | 45 | 4F5A | 8765 |
2 | 56 | 48 | 6BCF | 7654 |
3 | 54 | 42 | 0123 | 6543 |
4 | 48 | 54 | 1234 | 5432 |
5 | 89 | 52 | 2345 | 4321 |
6 | 58 | 59 | 3456 | 3210 |
7 | 55 | 12 | 4567 | 210F |
8 | 98 | 25 | 5678 | 10FE |
9 | 48 | 34 | 6789 | 0FED |
10 | 54 | 48 | 789A | 2468 |
11 | 75 | 56 | 89AB | 468A |
12 | 25 | 67 | 9ABC | 68AC |
13 | 26 | 62 | ABCD | 8ACE |
14 | 53 | 78 | BCDE | ACE8 |
15 | 24 | 83 | CDEF | CE86 |
16 | 15 | 94 | DEF0 | E864 |
17 | 81 | 71 | EF01 | 8642 |
18 | 11 | 54 | F012 | 1357 |
19 | 15 | 82 | FEDC | 3579 |
20 | 45 | 8 | EDCB | 579B |
21 | 52 | 3 | DCBA | 79BD |
22 | 57 | 54 | CBA9 | 9BDE |
23 | 64 | 58 | BA98 | BDE1 |
24 | 54 | 64 | A987 | DE13 |
25 | 68 | 67 | 9876 | E135 |
Содержание отчета
Отчет по лабораторной работе должен содержать номер, название, цель лабораторной работы, задание на лабораторную работу, текст программы на языке ассемблера.
Лабораторная работа №2. Арифметические команды
Цель работы
Изучение арифметических команд и получение навыка работы с ними.
Постановка задачи
Занести числа в память:
a = ;
b = ;
c = N;
d = N - 1;
e = ;
Для вариантов 1 – 10:
f = ;
Для вариантов после 10:
f = .
N – номер варианта по списку группы или выданный преподавателем.
Произвести операции над числами a,b,c,d,e,f по вариантам, заданным в таблице 8.
Таблица 8
Номер варианта | Выражение | Номер варианта | Выражение |
1 | 15 | ||
2 | 16 | ||
3 | 17 | ||
4 | 18 | ||
5 | 19 | ||
6 | 20 | ||
7 | 21 | ||
8 | 22 | ||
9 | 23 | ||
10 | 24 | ||
11 | 25 | ||
12 | 26 | ||
13 | 27 | ||
14 | 28 |
Содержание отчета
Отчет по лабораторной работе должен содержать номер, название, цель лабораторной работы, задание на лабораторную работу, текст программы на языке ассемблера.
Лабораторная работа №3. Логические команды и команды манипулирования битами
Цель работы
Изучение логических команд и команд манипулирования битами и получение навыка работы с ними.
Постановка задачи
Занести числа в память:
a = N +100;
b = ;
c = N+60;
d = N+125.
N – номер варианта по списку группы или выданный преподавателем.
Произвести операции над числами a,b,c,d следующие задания:
Содержание отчета
Отчет по лабораторной работе должен содержать номер, название, цель лабораторной работы, задание на лабораторную работу, текст программы на языке ассемблера.
Литература
1. Балакина Е.П., Воробьёва Л.Н., Гречишников В.А. Интегрирование программных модулей ассемблера в среде DELPHI. Методические указания к лабораторным работам по дисциплине «Машино-Ориентированные Языки». – М.: МИИТ, 2009. –56 с.
2. Хусаинов Р.З., Садов В.Б. Программирование микроконтроллеров ATmega8535: методические указания к выполнению лабораторных работ.– Челябинск, 2009.– 123с.
3. http://www.gaw.ru/html.cgi/txt/doc/micros/avr/asm/start.htm
Приложение 1
Таблица 9. Арифметические и логические команды
Мнемоника | Операнды | Описание | Операция | Флаги | Кол-во циклов |
ADD | Rd , Rr 0≤ d≤31, 0≤r≤31 | Сложить без переноса | Rd Rd + Rr | Z, C, N, V, H | 1 |
ADC | Rd.Rr 0≤d≤31 , 0≤ r ≤31 | Сложить с переносом | Rd Rd + Rr+ С | Z, C, N, V, H | 1 |
ADIW | Rd,K dE{24,26,28,30} 0≤ K ≤63 | Сложить непосредственное значение со словом | Rdh:Rdl Rdh:Rdl+ К | Z, C, N, V | 2 |
SUB | Rd,Rr 0≤d≤31 , 0≤ r ≤31 | Вычесть без заема | Rd Rd – Rr | Z, C, N, V, H | 1 |
SUBI | Rd, К 16≤d≤31 0≤K≤255 | Вычесть непосредственное значение | Rd Rd – К | Z, C, N, V, H | 1 |
SBC | Rd, Rr 0≤d≤31 , 0≤ r ≤31 | Вычесть с заемом | Rd ß Rd-Rr-C | Z, C, N, V, H | 1 |
SBCI | Rd, К 16≤d≤32 , 0≤ K ≤255 | Вычесть непосредственное значение с заемом | Rd ß Rd-K-C | Z, C, N, V, H | 1 |
SBIW | Rd, К dE{24,26,28,30} О ≤ К ≤ бЗ | Вычесть непосредственное значение из слова | Rdh:Rdl ß Rdh:Rdl-K | Z, C, N, V | 2 |
AND | Rd, Rr 0≤d≤31 , 0≤r≤31 | Выполнить логическое AND | Rd ß Rd • Rr | Z, N, V | 1 |
ANDI | Rd, К 16<d<31 0<k≤255 | Выполнить логическое AND | Rd ß Rd • К | Z, N, V | 1 |
OR | Rd, Rr 0≤d≥31 , 0≤ r ≤31 | Выполнить логическое OR | Rd ß Rd v Rr | Z, N, V | 1 |
ORI | Rd , К 16≤d≤31, 0≤ K ≤255 | Выполнить логическое OR с непосредственным значением | Rd ß Rd v К | Z, N, V | 1 |
EOR | Rd, Rr 0≤d≤31 , 0≤г≤31 | Выполнить исключающее OR | Rd ß Rd Rr | Z, N, V | 1 |
СОМ | Rd 0≤d≤31 | Выполнить дополнение до единицы | Rd ß SFF-Rd | Z, C, N, V | 1 |
NEG | Rd 0≤d≤31 | Выполнить дополнение до двух | Rd ß S00 - Rd | Z, C, N, V, H | 1 |
SBR | Rd , К 16≤d≤31, 0≤K≤255 | Установить биты в регистре | Rd ß Rd v К | Z, N,V | 1 |
CBR | Rd , К 16≤ d ≤31 O ≤ K ≤255 | Очистить биты в регистре | Rd ß Rd • (SFF - К ) | Z, N, V | 1 |
INC | Rd 0≤d≤31 | Инкрементировать | Rd ß Rd + 1 | Z, N,V | 1 |
DEC | Rd 0≤d≤31 | Декрементировать | Rd ß Rd - 1 | Z, N,V | 1 |
TST | Rd 0≤r≤31 | Проверить на ноль или минус | Rd ß Rd.Rd | Z, N, V | 1 |
CLR | Rd 0≤d≤31 | Очистить регистр | Rd ß Rd Å Rd | Z, N, V | 1 |
SER | Rd 16≤d≤31 | Установить все биты регистра | Rd ß S FF | нет | 1 |
MUL | Rd,Rr 0≤d≤31 , 0≤ r ≤31 | Беззнаковое умножение целых чисел | R1:R0 ß Rd*Rr | Z,C | 2 |
MULS | Rd,Rr 16≤d≤31 , 16≤r≤31 | Умножение целых чисел с учётом знака | R1:R0 ß Rd*Rr | Z,C | 2 |
MULSU | Rd,Rr 16≤ d ≤23, 16≤ r ≤23 | Целочисленное умножение числа со знаком на число без знака | R1:R0 ß Rd*Rr | Z,C | 2 |
FMUL | Rd,Rr 16≤d≤23 , 16≤ r ≤23 | Беззнаковое умножение дробных чисел | R1:R0 ß (Rd*Rr)<<1 | Z,C | 2 |
FMULS | Rd,Rr 16≤d≤23 , 16≤ r ≤23 | Умножение дробных чисел с учётом знака | R1:R0 ß (Rd*Rr)<<1 | Z,C | 2 |
FMULSU | Rd,Rr 16≤d≤23 , 16≤ r ≤23 | Умножение дробного числа со знаком на дробное число без знака | R1:R0 ß (Rd*Rr)<<1 | Z,C | 2 |
CP | Rd, Rr 0≤d≤31 , 0≤ r ≤31 | Сравнить | Rd - Rr | Z, C, N, V, H | 1 |
CPC | Rd, Rr 0≤d≤31 , 0≤r≤31 | Сравнить с учетом переноса | Rd-Rr-C | Z, C, N, V, H | 1 |
CPI | Rd, К 16≤d≤31 , 0≤K≤255 | Сравнить с константой | Rd-K | Z, C, N, V, H | 1 |
Таблица 10. Команды сдвигов и операций с битами
Мнемоника | Операнды | Описание | Операция | Флаги | Кол-во циклов |
LSL | Rd 0≤d≤31 | Логически сдвинуть влево | Rd(n+1) ß Rd(n), Rd(0) ß 0, Cß Rd(7) | Z,C,N,V,H | 1 |
LSR | Rd 0≤d≤31 | Логически сдвинуть вправо | Rd(n) ß Rd(n+1), Rd(7) ß 0, C ß Rd(0) | Z,C,N,V | 1 |
ROL | Rd 0≤d≤31 | Сдвинуть влево через перенос | Rd(0) ß C, Rd(n+1) ß Rd(n), C ß Rd (7) | Z,C,N,V,H | 1 |
ROR | Rd 0≤d≤31 | Сдвинуть вправо через перенос | Rd(7) ß C, Rd(n) ß Rd(n+1), C ß Rd (0) | Z,C,N,V | 1 |
ASR | Rd 0≤d≤31 | Арифметически сдвинуть вправо | Rd(n) ß Rd(n+1), n=0...6, Rd(0) ß C | Z,C,N,V | 1 |
SWAP | Rd 0≤d≤31 | Поменять нибблы местами | Rd (3...0) <–> Rd (7...4) | Нет | 1 |
BSET | s 0≤s≤7 | Установить флаг | SREG ( s ) ß 1 | SREG(s) | 1 |
BCLR | s 0≤ s ≤7 | Очистить флаг | SREG(s) ß 0 | SREG(s) | 1 |
SBI | P,b O≤P≤31, 0≤b≤7 | Установить бит в регистр I/O | l/0(P,b) ß 1 | Нет | 2 |
CBI | P , b 0≤ P ≤31, 0≤ b ≤7 | Очистить бит в регистре I/O | l/0(P,b) ß 0 | Нет | 2 |
BST | Rd,b 0≤d≤31, 0≤b≤7 | Переписать бит из регистра во флаг Т | Т ß Rd(b) | Т | 1 |
BLD | Rd,b 0≤ d ≤31, 0≤b≤7 | Загрузить Т флаг в бит регистра | Rd(b) ß Т | Нет | 1 |
SEC | Установить флаг переноса | С ß 1 | С | 1 | |
CLC | Очистить флаг переноса | С ß 0 | С | 1 | |
SEN | Установить флаг отрицательного значения | N ß 1 | N | 1 | |
CLN | Очистить флаг отрицательного значения | N ß 0 | N | 1 | |
SEZ | Установить флаг нулевого значения | Z ß 1 | Z | 1 | |
CLZ | Очистить флаг нулевого значения | Z ß 0 | Z | 1 | |
SEI | Установить флаг глобального прерывания | I ß 1 | I | 1 | |
CLI | Очистить флаг глобального прерывания | I ß 0 | I | 1 | |
SES | Установить флаг знака | S ß 1 | S | 1 | |
CLS | Очистить флаг знака | S ß 0 | S | 1 | |
SEV | Установить флаг переполнения | V ß 1 | V | 1 | |
CLV | Очистить флаг переполнения | V ß 0 | V | 1 | |
SET | Установить флаг Т | T ß 1 | T | 1 | |
CLT | Очистить флаг Т | Т ß 0 | T | 1 | |
SEH | Установить флаг полу переноса | Н ß 1 | Н | 1 | |
CLH | Очистить флаг полу переноса | Н ß 0 | Н | 1 | |
NOP | Выполнить холостую команду | Нет | 1 | ||
SLEEP | Установить режим SLEEP | Нет | 1 | ||
WDR | Сбросить сторожевой таймер | Нет | 1 |
Таблица 11. Команды пересылки данных
Мнемоника | Операнды | Описание | Операция | Флаги | Кол-во циклов |
ELPM | Расширенная загрузка из памяти программ в регистр RO | R0 ß (Z+RAMPZ) | Нет | 3 | |
MOV | Rd,Rr 0≤d≤31, 0≤ r ≤31 | Копировать регистр | Rd ß Rr | Нет | 1 |
LDI | Rd , k 16≤ d ≤31,0≤ k ≤255 | Загрузить непосредственное значение | Rd ß K | Нет | 1 |
LDS | Rd , k 0≤d≤31 0≤k≤65535 | Загрузить из ОЗУ | Rd ß ( k ) | Нет | 3 |
LD | Rd,X 0≤d≤31 | Загрузить косвенно | Rd ß (X) | Нет | 2 |
LD | Rd , X + 0≤d≤31 | Загрузить косвенно с постинкрементом | Rd ß (X), X ß X+1 | Нет | 2 |
LD | Rd , X - 0≤d≤31 | Загрузить косвенно с преддекрементом | X ß X-1, Rd ß (X) | Нет | 2 |
LD | Rd , Y 0≤ d ≤31 | Загрузить косвенно | Rd ß ( Y ), | Нет | 2 |
LD | Rd,Y+ 0≤ d ≤31 | Загрузить косвенно с постинкрементом | Rd ß (Y), Y ß Y+1 | Нет | 2 |
LD | Rd , Y 0≤ d ≤31 | Загрузить косвенно с преддекрементом | Y ß Y-1, Rd ß (Y) | Нет | 2 |
LDD | Rd,Y+q 0≤d≤31 , 0≤ q ≤63 | Загрузить косвенно со смещением | Rd ß (Y+q) | Нет | 2 |
LD | Rd , Z 0≤d≤31 | Загрузить косвенно | Rd ß ( Z ) | Нет | 2 |
LD | Rd,Z+ 0≤ d ≤31 | Загрузить косвенно с постинкрементом | Rd ß (Z), Z ß Z+1 | Нет | 2 |
LD | Rd ,- Z 0≤ d ≤31 | Загрузить косвенно с преддекрементом | Z ß Z-1, Rd ß (Z) | Нет | 2 |
LDD | Rd,Z+q 0≤ d ≤31, 0≤ q ≤31 | Загрузить косвенно со смещением | Rd ß (Z+q) | Нет | 2 |
STS | k,Rr 0≤d≤31 , 0≤k≤65535 | Загрузить непосредственно в ОЗУ | ( k ) ß Rr | Нет | 3 |
ST | X,Rr 0≤r≤31 | Записать косвенно | (X) ß Rr | Нет | 2 |
ST | X+,Rr 0≤ r ≤31 | Записать косвенно с постинкрементом | (X) ß Rr, X ß X+ 1 | Нет | 2 |
ST | -X,Rr 0≤r≤31 | Записать косвенно с преддекрементом | X ß X-1, (X) ß Rr | Нет | 2 |
ST | Y,Rr 0≤r≤31 | Записать косвенно | ( Y ) ß Rr | Нет | 2 |
ST | Y+,Rr 0≤r≤31 | Записать косвенно с постинкрементом | (Y) ß Rr, Y ß Y+ 1 | Нет | 2 |
STD | Y+q,Rr 0≤r≤31 , 0≤ q ≤63 | Записать косвенно со смещением | (Y+q) ß Rr | Нет | 2 |
ST | Z,Rr 0≤ r ≤31 | Записать косвенно | ( Z ) ß Rr | Нет | 2 |
ST | Z+,Rr 0≤r≤31 | Записать косвенно с постинкрементом | (Z) ß Rr, Z ß Z+ 1 | Нет | 2 |
ST | -Z,Rr 0≤ r ≤31 | Записать косвенно с преддекрементом | Z ß Z-1, (Z) ß Rr | Нет | 2 |
STD | Z+q,Rr 0≤r≤31 , 0≤ q ≤63 | Записать косвенно со смещением | (Z+q) ß Rr | Нет | 2 |
LPM | Загрузить байт из памяти программ | R 0 ß ( Z ) | Нет | 3 | |
IN | Rd,P 0≤d≤31 , 0≤ P ≤63 | Загрузить данные из порта I/O в регистр | Rd ß P | Нет | 1 |
OUT | P,Rr 0≤r≤31 , 0≤ P ≤63 | Записать данные из регистра в порт I/O | P ß Rr | Нет | 1 |
PUSH | Rr 0≤r≤31 | Сохранить регистр в стеке | STACK ß Rr | Нет | 2 |
POP | Rr 0≤r≤31 | Загрузить в регистр из стека | Rr ß STACK | Нет | 2 |
Таблица 12. Команды переходов
Мнемоника | Операнды | Описание | Операция | Флаги | Кол-во циклов |
RJMP | k -2K<k<2K | Перейти относительно | PC ß PC + k + 1 | Нет | 2 |
LJMP | Перейти косвенно | PC ß Z | Нет | 2 | |
JMP | k 0<k<4M | Перейти | PC ß k | Нет | 3 |
RCALL | k -2K≤k≤2K | Вызвать подпрограмму относительно | PC ß PC + k + 1 | Нет | 3 |
ICALL | Вызвать подпрограмму косвенно | PC ß Z | Нет | 3 | |
CALL | k 0≤k≤64K | Выполнить длинный вызов подпрограммы | PC ß k | Нет | 4 |
RET | Вернуться из подпрограммы | PC ß STACK | Нет | 4 | |
RETI | Вернуться из прерывания | PC ß STACK | I | 4 | |
CPSE | Rd,Rr 0≤d≤31, 0≤ r ≤31 | Сравнить и пропустить, если равно | If Rd=Rr then PC ß PC + 2 (or 3) | Нет | ½/3 |
SBRC | Rr,b 0≤r≤31 , 0≤ b ≤7 | Пропустить, если бит в регистре очищен | if Rr(b)=0 then PC ß PC + 2 (or 3) | Нет | ½/3 |
SBRS | Rr,b 0≤r≤31 , 0≤ b ≤7 | Пропустить, если бит в регистре установлен | If Rr(b)=1 then PC ß PC + 2 (or 3) | Нет | ½/3 |
SBIC | P,b 0≤P≤31 , 0≤ b ≤7 | Пропустить, если бит в регистре I/O очищен | if l/O P(b)=0 then PC ß PC + 2 (or 3) | Нет | ½/3 |
SBIS | P,b 0≤r≤31 , 0≤ b ≤7 | Пропустить, если бит в регистре I/O установлен | If l/O P(b)=1 then PC ß PC + 2 (or 3) | Нет | ½/3 |
BRBS | s,k 0≤ s ≤7, -64≤k≤+63 | Перейти, если бит в регистре статуса установлен | if SREG(s)=1 then PC ß PC + k + 1 | Нет | ½ |
BRBC | s,k 0≤ s ≤7, -64≤ k ≤+63 | Перейти, если бит в регистре статуса очищен | if SREG(s)=0 then PC ß PC + k + 1 | Нет | ½ |
BREQ | k -64≤k≤+63 | Перейти, если равно | if Rd=Rr (Z=1) then PC ß PC + k + 1 | Нет | ½ |
BRNE | k -64≤k≤+63 | Перейти, если не равно | if Rd ¹ Rr(Z=0) then PC< ß PC+ k+ 1 | Нет | ½ |
BRCS | k -64 £ k £ +63 | Перейти, если флаг переноса установлен | if C=1 then PC ß PC + k + 1 | Нет | 1/2 |
BRCC | k -64≤k≤+63 | Перейти, если флаг переноса очищен | if C=0 then PC ß PC + k + 1 | Нет | 1/2 |
BRSH | K -64≤k≤+63 | Перейти, если равно или больше (без знака) | if Rd<Rr(C=0) then PC ß PC+ k+ 1 | Нет | 1/2 |
BRLO | k -64≤k≤+63 | Перейти, если меньше (без знака) | if Rd<Rr (C=1) then PC ß PC + k + 1 | Нет | 1/2 |
BRMI | k -64≤k≤+63 | Перейти, если минус | if N=1 then PC ß PC + k + 1 | Нет | 1/2 |
BRPL | k -64≤k≤+63 | Перейти, если плюс | if N=0 then PC ß PC + k + 1 | Нет | 1/2 |
BRGE | k -64≤k≤+63 | Перейти, если больше или равно (с учетом знака) | if Rd>Rr (N Å V=0) then PC ß PC + k + 1 | Нет | 1/2 |
BRLT | k -64≤k≤+63 | Перейти, если меньше чем (со знаком) | if Rd<Rr (N Å V=1)then PC ß PC + k+ 1 | Нет | 1/2 |
BRHS | K -64≤k≤+63 | Перейти, если флаг полупереноса установлен | if H=1 then PC ß PC + k + 1 | Нет | 1/2 |
BRHC | k -64≤k≤+63 | Перейти, если флаг полупереноса очищен | if H=0 then PC ß PC + k + 1 | Нет | 1/2 |
BRTS | k -64≤k≤+63 | Перейти, если флаг Т установлен | if T=1 then PC ß PC + k + 1 | Нет | 1/2 |
BRTC | k -64≤k≤+63 | Перейти, если флаг Т очищен | if T=0 then PC ß pc + k + 1 | Нет | 1/2 |
BRVS | k -64≤k≤+63 | Перейти, если флаг переполнения установлен | if V=1 then PC ß PC + k + 1 | Нет | 1/2 |
BRVC | k -64≤k≤+63 | Перейти, если флаг переполнения очищен | if V=0 then PC ß PC + k + 1 | Нет | 1/2 |
BRIE | k -64≤k≤+63 | Перейти, если глобальное прерывание разрешено | if I=1 then PC ß PC + k + 1 | Нет | 1/2 |
BRID | k -64k £ k £ +63 | Перейти, если глобальное прерывание запрещено | if I=0 then PC ß PC + k + 1 | Нет | 1/2 |
https://otvet.mail.ru/question/184778171
[1] См приложение
Дата: 2018-12-28, просмотров: 285.