Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
prn_ 51_pr1.doc
Скачиваний:
17
Добавлен:
19.02.2016
Размер:
370.18 Кб
Скачать

Задания 1.

  1. Написать программу сложения или вычитания двух n-байтовых чисел, где число n будет являться параметром.

  2. Написать программу, вычисляющую сумму чисел от 1 до n с помощью цикла.

  3. Написать программу, вычисляющую первые n чисел Фибоначчи. (Т.е. последовательность, в которой каждый последующий член является суммой двух предыдущих: 0,1,1,2,3,...)

  4. Написать программу нахождения наибольшего общего делителя по алгоритму Евклида. (Берется исходная пара чисел. Из большего числа вычитается меньшее, потом меньшее число из первой пары и разность первой пары становятся следующей парой, и алгоритм повторяется снова до тех пор, пока в паре не окажутся одинаковые числа. Это и будет наибольшим общим делителем.)

  5. Написать программы умножения и деления, используя команды сложения и вычитания.

  6. Написать программу поиска максимального элемента в массиве.

  7. Перемножить два беззнаковых 16-разрядных числа, используя команду 8-разрядного умножения.

  8. Написать программы для вычисления приведенных ниже выражений, где переменные являются 8-разрядными положительными числами. Частное и остаток результата отдельно записать в память: Y=12/(14*A+(B-C+35))

  9. Y=(A*B-78)/(27*C+78)

  10. Y=((4*A+B)-(2*A-45))/C

  11. Y=(A+2*B-165)^2/(C+124)

  12. Y=A^2/(25*B-C+119)

  13. Y=A/(B-15*C+37).

Задания 2

Составить программу на основе команд арифметических операций для вычисления следующего выражения согласно своему варианту:

1. Y = (А + В) / С

2. Y = (А - В) * (С - В)

3. Y = А - С / В

4. Y = (А + В - С) * В

5. Y = А * В + С

6. Y = А - В + С

7. Y = (А - С) / В

8. Y=A + C-B*C

Принять значения А равным 14, В равным 2, С равным 4.

Контрольные вопросы.

  1. Объясните логику работы команд сложения и вычитания с учетом флагов С и OV.

  2. Опишите способы адресации команд ADD, ADDC, SUBB.

  3. Опишите способы адресации команд MUL, DIV.

  4. Опишите способы адресации команд INC, DEC.

  5. Как работает команда DA .

  6. Для чего чаще всего используются команды INC и DEC .

7. В чем различие команд арифметических операций без учета и с учетом переноса.

8. Для каких целей применяются команды инкрементирования и декрементирования содержимого отдельных регистров.

9. Каким образом и с какой целью осуществляется десятичная коррекция аккумулятора.

10. В чем особенности команд умножения и деления MUL и DIV. В каком случае при их выполнении взводится флаг переполнения OV.

Лабораторная работа №4

ЛОГИЧЕСКИЕ КОМАНДЫ. КОМАНДЫ СДВИГА И РАБОТЫ С БИТАМИ

Практическая часть.

  1. Маскирование при вводе.

Ввести в регистр R7 информацию из линий 0,1,3,4 и 7:

MOV A,P1 ; Ввод байта из порта 1

ANL A,#10011011B ; Маскирование

MOV R7,A ; Передача

2. Ввести в аккумулятор данные из порта 2 и выделить требуемые биты по маске, находящейся в R0:

MOV A,P2 ; Ввод из порта 2

ANL A,R0 ; Маскирование

3.Выполнить логический сдвиг влево двухбайтного слова,

расположенного в (R2) (A):

SHIF: RLC A ; Сдвиг младшего байта

XCH A,R2 ; Обмен аккумулятора и расширителя

RLC A ; Сдвиг старшего байта

XCH A,R2 ; Обмен

4. Выполнить арифметический сдвиг двухбайтного слова (R2) (A) вправо:

SHIF: SETB C ; Установка флага переноса

XCH A,R2 ; Обмен байтами

B A.7,NO ; Если R2.7 не равно 1, то сброс

CLR C ; флага переноса

NO: RRCA ; Сдвиг флага переноса в расширитель

XCH A,R2 ; Обмен

RRC A ; Сдвиг младшего байта

5. Умножить аккумулятор на число 2 в степени Х, где Х – число не более 8, хранящееся в R2. Умножение на 2 заменяется арифметическим сдвигом влево аккумулятора и расширителя R1:

MOV R1,#0 ; Сброс R1

CLR C ; Сброс флага переноса

L: RLC A ; Арифметический сдвиг влево объединенного

XCH A,R1 ; 16-битного результата в

RLC A ; регистровой паре (R1)(A)

XCH A,R1

DJNZ R2,L

6. Определить четность числа единиц в аккумуляторе :

CLR F0 ; Сброс F0

MOV R7,#9 ; Число повторов

L: RRC A ; Пересылка бита А.0 в перенос

JNC N ; Пропустить, если бит равен 0

CPL F0 ; Подсчет паритета

N: DJNZ R7,L

После выполнения программы аккумулятор сохранит свое значение, флаг F0 будет установлен, если число единиц в аккумуляторе было нечетно. Флаг F0 входит в состав PSW и в данном примере специфицирован пользователем для выполнения функций флага паритета.

  1. Вычислить булеву функцию трех переменных :

Y = X V W (XV). Переменные X, V, W поступают на линии 2, 1, и 0 порта 1 соответственно. Результат Y необходимо вывести на линию 3 порта 1:

Y EQU P1.3

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]