- •1. Преобразование систем счисления чисел в двоичную систему счисления.
- •2. Преобразование результата в различные системы счисления.
- •3. Выделение старшего и младшего байта результата и представление их в различных системах счисления.
- •Задание №2. Выполнение логических операций. Наложение масок.
- •Результат вычислений представить в следующих системах счисления: двоичная, восьмеричная, шестнадцатеричная и десятичная.
- •1. Произведем преобразование систем счисления чисел в двоичную систему счисления.
- •2. Преобразование результата в различные системы счисления.
- •3. Формирование устанавливающей маски.
- •4. Формирование сбрасывающей маски.
- •5. Формирование инвертирущей маски.
- •Задание №3. Программирование микроконтроллеров. Работа с массивами.
- •Inc r0 ; увеличиваем указатель ячейки памяти на 1
- •Inc r0 ; увеличиваем указатель ячейки памяти
- •Inc r1 ; увеличиваем указатель ячейки памяти
- •Inc b ; учитываем перенос в старшем байте суммы
- •Inc r0 ; увеличиваем указатель ячейки памяти
5. Формирование инвертирущей маски.
Требуется инвертировать следующие биты – 0, 4, 8, 9, 12, 15. Сформируем инвертирующую маску. Для этого запишем двоичное число, в котором эти биты равны 1, а все остальные 0.
15 |
14 |
13 |
12 |
11 |
10 |
09 |
08 |
07 |
06 |
05 |
04 |
03 |
02 |
01 |
00 |
Номера битов |
1 |
|
|
1 |
|
|
1 |
1 |
|
|
|
1 |
|
|
|
1 |
Биты для сброса |
1 |
0 |
0 |
1 |
0 |
0 |
1 |
1 |
0 |
0 |
0 |
1 |
0 |
0 |
0 |
1 |
Маска |
Итак, устанавливающая маска для указанных битов следующая:
1001 0011 0001 0001B = 4311H = 111421O
Произведем наложение инвертирующей маски на результат, полученный в п. 1. Для этого требуется выполнить логическую операцию Исключающее ИЛИ (XOR) числа с маской.
XOR |
0 |
0 |
0 |
0 |
0 |
1 |
0 |
0 |
0 |
1 |
1 |
1 |
0 |
0 |
0 |
0 |
Число |
1 |
0 |
0 |
1 |
0 |
0 |
1 |
1 |
0 |
0 |
0 |
1 |
0 |
0 |
0 |
1 |
Маска |
|
|
1 |
0 |
0 |
1 |
0 |
1 |
0 |
0 |
0 |
1 |
1 |
0 |
0 |
0 |
0 |
1 |
результат |
В результате наложения маски биты с номерами 0, 4, 8, 9, 12, 15 инвертированы, остальные биты не изменили своего состояния.
Задание №3. Программирование микроконтроллеров. Работа с массивами.
Разработать программы, выполняющие следующие задачи (для каждой задачи, разрабатывается отдельная программа):
Имеется массив элементов размером байт. Массив начинается с адреса ADDR1. Количество элементов массива N. Требуется заполнить элементы массива в соответствии со способом, указанным в варианте задания.
Имеется два массива элементов размером байт. Количество элементов для обоих массивов N. Первый массив находится с адреса ADDR1, второй – с адреса ADDR2. Требуется переслать элементы первого массива во второй массив.
Требуется произвести сложение всех элементов массива, начинающегося с адреса ADDR2. Сложение производит с удвоенной точностью (два байта).
Значения ADDR1, ADDR2, N и способ заполнения массива выбирается из таблицы 3.1 для требуемого варианта.
Требования по оформлению программ
привести алгоритм (блок-схему) для каждой, разработанной программы
текст программы с подробными комментариями.
Таблица 3.1. Варианты для задания №3
Номер варианта |
ADDR1 Адрес первого массива |
ADDR2 Адрес второго массива |
N количество элементов массива |
Действие при заполнении массива |
1 |
20H |
30H |
8 |
Начать с числа 000H, увеличивать число на 1 для каждой новой ячейки |
2 |
28H |
30H |
6 |
|
3 |
30H |
40H |
8 |
|
4 |
38H |
40H |
6 |
|
5 |
40H |
50H |
8 |
|
6 |
20H |
30H |
8 |
Начать с числа 0FFH, уменьшать число на 1 для каждой новой ячейки |
7 |
28H |
30H |
6 |
|
8 |
30H |
40H |
8 |
|
9 |
38H |
40H |
6 |
|
10 |
40H |
50H |
8 |
|
11 |
20H |
30H |
8 |
Начать с числа 000H, увеличивать число на 2 для каждой новой ячейки |
12 |
28H |
30H |
6 |
|
13 |
30H |
40H |
8 |
|
14 |
38H |
40H |
6 |
|
15 |
40H |
50H |
8 |
|
16 |
20H |
30H |
8 |
Начать с числа 0FFH, уменьшать число на 2 для каждой новой ячейки |
17 |
28H |
30H |
6 |
|
18 |
30H |
40H |
8 |
|
19 |
38H |
40H |
6 |
|
20 |
40H |
50H |
8 |
Пример выполнения задания №3
1. Программа, заполняющая массив из 8 элементов, начиная с адреса 50H, числа в ячейках начинаются с 000H, и для каждой новой ячейки увеличиваются на 1.
Блок-схема алгоритма.
Текст программы.
; начальная настройка
MOV A, #00H ; в аккумуляторе число которое надо занести в ячейку,
; начинаем с 00H
MOV R0, #50H ; в R0 – указатель на текущую ячейку массива
; первая ячейка имеет адрес 050H
MOV R2, #8H ; в R2- счетчик количества элементов = 8
M0:
; запись числа в массив
MOV @R0, A ; записываем текущее значение числа
; в текущую ячейку памяти
; изменение значения числа
ADD A, #01H ; увеличиваем значение числа на 1
; переход к следующей ячейке массива
