DevioLabавтоматичне керування капіталом
ПРАЦЮЄ 24/7
КРИПТОВАЛЮТИ · АКЦІЇ · 10 БІРЖ

Портфель, який керується автоматично

DevioLab підбирає стратегії, відстежує ринки та автоматизує купівлю і продаж активів. Кількість доступних криптовалют, акцій і торгових можливостей зростає щодня.

10підключених біржCrypto + Stocksв одному портфелі24/7автоматичний контроль

Збірка програм асемблера для мікропроцесора Intel 8085

Інформація про навчальний заклад

ВУЗ:
Національний університет Львівська політехніка
Інститут:
Інститут комп’ютерних технологій, автоматики та метрології
Факультет:
Комп’ютерні науки
Кафедра:
Кафедра електронних обчислювальних машин

Інформація про роботу

Рік:
2015
Тип роботи:
Практична робота
Предмет:
Цифрова техніка і мікропроцесори
Група:
КН-11
Коротко про документ

Про що ця робота

Збірка містить набір програм мовою асемблера для виконання базових арифметичних та логічних операцій в пам'яті. Розглянуто роботу з масивами, сортування та обробку даних на рівні регістрів.

У роботі розглядаються

  • Програмування асемблера
  • Обробка масивів у пам'яті
  • Арифметичні операції
  • Сортування даних
  • Пам'ять та адресація
  • Двійково-кодовані числа
  • Робота з матрицями

Зміст і розділи

  1. Пересилання послідовних байтів
  2. Обчислення суми елементів масиву
  3. Обчислення контрольної суми
  4. Додавання багатобайтових чисел
  5. Множення однобайтових чисел
  6. Пошук максимального та мінімального елементів
  7. Впорядкування масиву
Для кого:Студенти технічних спеціальностей вищих навчальних закладів, які вивчають мікропроцесорну техніку та програмування на асемблері.
Викладачі:Не вказано

Ключові поняття

пам'ятьмасивсумасортуванняматрицябайтовийпідпрограма

Частина тексту файла (без зображень, графіків і формул):

1) пересилання N послідовних байтів з однієї області пам'яті в іншу, ORG 100H SADR EQU 1000H ;Початкова адреса 1-ї області пам’яті DADR EQU 2000H ;Початкова адреса 2-ї області пам’яті N EQU 10 ;Кількість байтів, що потрібно передати LXI h,SADR ;Завантажуємо адресу 1-ї області пам’яті LXI d,DADR ;Завантажуємо адресу 2-ї області пам’яті MVI b,N ;Завантажуємо в регістр В кількість елементів, ; ;щопотрібно передати ;Вхiднi данi передаємочерез регiстри call peres ;Виклик підпрограми пересилання N ;послідовних байтів з однієї області пам'яті в ;іншу HLT l1: MOV a,m ;Перенесення числа з 1-ї області пам’яті в 2-у STAX d ;Запис вмісту акумулятора в 1-у область пам’яті INX h ;Інкрементування регістру H INX d ; Інкрементування регістру D DCR b ;Зменшуємо число елементів, що потрібно перенести JNZ l1 ;Якщо число елементів нерінре “0” топереходимо на мітку ;L!, інакше — вихід з підпрограми ret 2) пересилання послідовності бантів (до заданого) з однієї області в іншу, ORG 100H SADR EQU 1000H ;Початкова адреса 1-ї області пам’яті DADR EQU 2000H ;Початкова адреса 1-ї області пам’яті N EQU 10 ;Кількість байтів, що потрібно передати LXI H, SADR ;Завантажуємо адресу 1-ї області пам’яті LXI D, DADR ;Завантажуємо адресу 2-ї області пам’яті MVI B, N ;Завантажуємо в регістр В кількість елементів, ;Вхiднi данi передаємочерез регiстри CALL PERED ;Виклик підпрограми пересилання послідовності ;байтів (до заданого) з однієї області пам'яті в іншу HLT ;підпрограма пересилання послідовності байтів (до заданого) з однієї області пам'яті в іншу PERED MOV A, M ;Перенесення числа з 1-ї області пам’яті в 2-у CMPI 07H : до числа 7H STAX D ;Запис вмісту акумулятора в 1-у область пам’яті INX h ;Інкрементування регістру H INX d ; Інкрементування регістру D JNZ PERED ;Якщо число елементів нерінре “0” топереходимо на ;мітку PERED, інакше — вихід з підпрограми RET 3) обчислення суми однобайтових елементів масиву, ORG 100H SADR EQU 1000H :Початкова адреса масиву N EQU 10 :Кількість елементів масиву lxi h, SADR ;Завантажуємо адресу масиву mvi b, N ;Завантажуємо кількість елементів масиву ;Вхiднi данi передаємо через регiстри call SUMM ;Виклик підпрограми обчислення суми одиобайтових ;елементів масиву hlt ; підпрограма обчислення суми одиобайтових елементів масиву SUMM: mvi a, 0 ;заносимо в аккумулятор “0” l1: mov C, M ;Занесення в регістр C елемент масиву add C ;Сумуємо його з акумулятором inx h ;Інкрементування регістру H dcr b ;Зменшуємо число елементів jnz l1 ;Якщо число елементів не рівне “0” топереходимо на мітку ;L!, інакше — вихід з підпрограми RET 4) Обчислення контрольної суми області пам'яті шляхом додавання за модулем 2 старших і молодших тетрад кожного байту окремо; результат роботи програми — два байти; ORG 100H ADR EQU 1000H N EQU 10 lxi h, ADR mvi e, N mvi b, 0fh mvi c, 0fh ;Вхiднi данi передаємо через регiстри CALL SUMM HLT SUMM: NOP l2: mov a, m mov b, a xri 0fh xra c mov c, a mov a, b xri 0f0h mov d, 4 l1: rrc dcr d jnz l1 xra b mov b,a inx h dcr e jnz l2 RET 5) додавання двох багатобайтовнх чисел; ORG 100H ADR1 EQU 1000H ADR2 EQU 2000H N EQU 10 lxi H, ADR1 lxi D, ADR2 mvi B, N ;Вхiднi данi передаємочерез регiстри CALL DODAV HLT DODAV: STC CMC PUSH PSW L1: POP PSW LDAX D ADC M PUSH PSW STAX D INX H INX D DCR B JNZ L1 RET 6) обчислення суми N двобайтових елементів масиву, ORG 100H ADR1 EQU 1000H ADR2 EQU 2000H N EQU 10 lxi H, ADR1 lxi D, ADR2 mvi B, N ;Вхiднi данi передаємочерез регiстри CALL SUM hlt SUM: NOP L1: LDAX D ADD M STAX D PUSH PSW INX H INX D POP PSW LDAX D ADC M STAX D PUSH PSW INX D POP PSW LDAX D ADCI 0 STAX D DCX D DCX D INX H DCR B JNZ L1 RET 7) порівняння двох чисел і запису в задану комірку пам'яті більшого; ORG 100H ADR1 EQU 1000H N1 EQU 100 N2 EQU 200 MVI A, N1 MVI B, N2 LXI H, ADR1 ;Вхiднi данi передаємочерез регiстри CALL PEREN HLT PEREN: CMP B JP L1 MOV A, B L1: MOV M, A RET 8) перемноження двох однобайтових чисел без знака; ORG 100H N1 EQU 5 N2 EQU 7 MVI A, N1 MVI B, N2 LXI H, 0H L1: DAD B DCR A JNZ L1 HLT 9) запис нулів в область пам'яті з адреси А1 до адреси А2 включно; ORG 100H ADDR1 EQU 1000H ADDR2 EQU 1020H LXI H, ADDR1 LXI D, ADDR2 L3: MVI M, 0 MOV A, H CMP D JNZ L1 MOV A, L CMP E JZ L2 L1: INX H JMP L3 L2: HLT 10) знаходження максимального числа в масиві даних, представлених як ціле число без знака; ORG 100H ADR1 EQU 1000H N EQU 10 LXI H, ADR1 MVI B, N MOV A, M INX H DCR B L1: MOV D, M CMP D JP L2 MOV A, D L2: INX H DCR B JNZ L1 HLT ORG 1000H DB 1, 2, 3, 4, 12, 6, 7, 8, 0, 10, 31 11) віднімання двох багатобайтових десяткових двійково-кодоваиих чисел без знака; ORG 100H N1 EQU 17 N2 EQU 5 LXI H, 1000H MVI C, N1 MVI E, 1111B MVI A, N2 CMA INR A ADD C HLT 12) ділення 16-розрядного числа без знака на 8-розрядне число без знака; ORG 100H MVI B, 5 MVI A, 45 MVI C, 0 MOV D, A L1: SUB B JM L2 INR C JMP L1 L2: HLT 13) визначення кількості одиниць в заданому байті; ORG 100H MVI A, 11001100B MVI B, 0 MVI C, 8 M2: RRC JNC M1 INR B M1: DCR C JNZ M2 HLT 14) визначення кількості одиниць і двох байтах; ORG 100H BYTES EQU 0010011001001001B LXI H, BYTES MVI A, H CALL NUM MOV D, B MOV A, L CALL NUM MOV A, B ADD B HLT NUM: MVI B, 0 MVI C, 8 M2: RRC JNC M1 INR B M1: DCR C JNZ M2 RET 15) визначення кількості нулів в байті; ORG 100H MVI A, 10001000B MVI B, 0 MVI C, 8 M2: RRC JC M1 INR B M1: DCR C JNZ M2 HLT 16) визначення кількості нулів у двох байтах; ORG 100H BYTES EQU 0010011001001001B LXI H, BYTES MVI A, H CALL NUM MOV D, B MOV A, L CALL NUM MOV A, B ADD B HLT NUM: MVI B, 0 MVI C, 8 M2: RRC JC M1 INR B M1: DCR C JNZ M2 RET 17) знаходження мінімального числа в масиві даних, представлених як ціле без знака; ORG 100H ADR1 EQU 1000H N EQU 10 LXI H, ADR1 MVI B, N MOV A, M INX H DCR B L1: MOV D, M CMP D JM L2 MOV A, D L2: INX H DCR B JNZ L1 HLT ORG 1000H DB 1, 2, 3, 4, 12, 6, 7, 8, 0, 10, 31 18) дадавання двох 8-розрядних десяткових двійково-кодоваиих чисел; 19) додавання двох 4-розрядних десяткових двійково-кодованих чисел; 20) множення двох 2-розряцних двійково-кодоваиих десяткових чисел; ORG 100H VAL1 EQU 10 VAL2 EQU 4 LEN EQU 1 ;N=1 LXI H, ADR1 MVI D, LEN LXI B, ADR2 RNC L1: LDAX B ADC M MOV M, A PUSH PSW INX H INX B DCR D POP PSW JNZ L1 HLT 21) віднімання двох Іб-розрядних двійкових чисел; ORG 100H VAL1 EQU 100 VAL2 EQU 30 LXI H, VAL1 LXI D, VAL2 MOV A, L ;Заносимо в аккумулятор мол. байт зменшуваного SUB E ;Вінімаємо від нього мол. байт від’ємника MOV L, A ;Запам’ятовуємо мол. байт результату в регістрі L MOV A, H ;Заносимо в аккумулятор старший байт зменшуваного для ;віднімання SBB D ;Віднімаємо сиарший байт від’ємника з врахуванням переносу MOV H, A ;Запам’ятовуємо старший байт результату в регістрі H HLT 22) впорядкування масиву однобайтових чисел за зростанням; ORG 100H ADDR1 EQU 1000H LEN EQU 10 ; LEN - довжина масиву LXI H, ADDR1 MVI C, LEN MOV E, C L1: PUSH H MVI B, 0 L2: DCR C JZ L3 MOV A, M INX H CMP M JC L4 MOV D, M MOV M, A DCX H MOV M, D INX H MVI B, 1 L4: JMP L2 L3: POP H DCR B JNZ L5 MOV C, E JMP L1 L5: HLT 23) формування квадратної матриці 5Х5 (значення діагональних елементів дорівнює номеру рядка, в якому знаходиться елемент, позадіагональних елементів - нулю); ORG 100H A1 EQU 1000H N EQU 5 LXI H, A1 MVI C, 0 L1: SUB A L2: CMP C JNZ L3 INR A MOV M, A JMP L4 L3: INR A MVI M, 0 L4: INX H CPI N JNZ L2 INR C MOV A, C CPI N JNZ L1 HLT 24) впорядкування масиву чисел за спаданням. ORG 100H ;Основна програма ADDR1 EQU 1000H LEN EQU 10 ;LEN - довжина масиву ;Вхiднi данi передаємочерез регiстри LXI H, ADDR1 ;У регiстровiй парi [HL] - адреса початку масиву MVI C, LEN ;У регiстрi [C] — ;кiлькiсть елементiв масиву CALL SORT HLT SORT: MOV E, C L1: PUSH H MVI B, 0 L2: DCR C JZ L3 MOV A, M INX H CMP M JNC L4 MOV D, M MOV M, A DCX H MOV M, D INX H MVI B, 1 L4: JMP L2 L3: POP H DCR B JNZ L5 MOV C, E JMP L1 L5: RET
Допоможи студентському архіву

Ми допомогли тобі — допоможи наступному студенту

Файл ще не обрано

Оголошення від адміністратора

Антиботан аватар за замовчуванням

Подякувати Студентському архіву довільною сумою

Admin

26.02.2023 12:38

Дякуємо, що користуєтесь нашим архівом!