Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
LEC-ASM80.DOC
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
928.77 Кб
Скачать

Програма

ORG 800H

800

97

SUB A

801

21 12 08

LXI H,ADDR1

804

46

MOV B,M

805

11 16 08

LXI D,ADDR3

808

23

MPAD:

INX H

809

1A

LDAX D

80A

8E

ADC M

80B

77

MOV M,A

80C

13

INX D

80D

05

DCR B

80E

C2 08 08

JNZ MPAD

811

76

HLT

812

03

ADDR1:

DB 03H

813

29 A4 50

ADDR2:

DB 29H,0A4H,50H

816

FB 37 28

ADDR3:

DB 0FBH,37H,28H

END

Приклад 10. Додавання десяткових чисел

В більшості 8-бітних мікропроцесорів є спеціальна команда DAA (десяткова корекція), що використовує біти Cy та AC регістру F. Вона розрахована на те, що в акумуляторі знаходиться сума упакованих десяткових операндів, отриманих будь-якою із команд ADD, ADC, ADI, ACI. Ця команда служить для аналізу змісту тетрад акумулятора і станів прапорців Cy та AC . Як підсумок цього аналізу в акумуляторі формується вірний десятковий результат, а прапор Сy відображає значення десяткового переносу.

DAA (Decimal adjust accumulator) - неявна адресація

додавання в двійково – десятковому коді

Якщо значення [A3A2A1A0] > 9H v AC=1, діє на всі біти F

то A  A + 6H,

Якщо значення [A7A6A5A4] > 9H v Cy=1,

то A  A + 60H.

Зауваження: команда використовується для одного байту і здійснюється лише над акумулятором.

Завдання: нехай необхідно додати два рядки, кожен з яких складається із шести десяткових цифр

376529 + 224388 = 600917

В пам’яті вони розміщені наступним чином

(ADDR1) = 3 – лічильник,

(ADDR2) = 29H, (ADDR2+1) = 65H, (ADDR2+2) = 37H - перше число,

(ADDR3) = 88H, (ADDR3+1) = 43H (ADDR3+2) = 22H – друге число.

Результат розмісти починаючи з адреси ADDR2.

П рограма Алгоритм

ORG 800H

800

97

SUB A

801

21 13 08

LXI H,ADDR1

804

46

MOV B,M

805

11 16 08

LXI D,ADDR3

808

23

MPAD:

INX H

809

1A

LDAX D

80A

8E

ADC M

80B

27

DAA

80C

77

MOV M,A

80D

13

INX D

80E

05

DCR B

80F

C2 08 08

JNZ MPAD

812

76

HLT

813

03

ADDR1:

DB 03H

814

29 65 37

ADDR2:

DB 29H,65H,37H

817

88 43 22

ADDR3:

DB 88H,43H,22H

END

Розглянуті приклади ілюструють наступні особливості програмування на мові асемблера:

  1. Майже всі операції обробки даних здійснюються над змістом акумулятору.

  2. Програміст повинен передбачити якомога менше звернень до пам’яті. Число звернень можна зменшити, використовуючи посередню адресацію регістрів, а також запам’ятовувати дані в регістрах загального призначення (РЗП).

  3. Слід уважно аналізувати вплив команд на стан регістру ознак.

  4. За допомогою команди “логічне І” можна обнулити деякі розряди комірки, що дає можливість працювати з даними, які мають довжину меншу довжини комірки.

  5. За допомогою команд зсуву можна здійснювати переміщення даних із одних розрядів в інші з метою як обробки, так і економії часу.

  6. Кожна програма складається із блоків встановлення початкових значень (ініціалізації), обробки і керування циклами. ЕОМ виконує блок ініціалізації один раз перед входом в цикл. Блок керування циклом визначає число повторів циклу.

  7. Використання адресних вказівників зменшує число адрес пам’яті процесора.

  8. Робота з масивами і організація циклів потребує більшої уваги до всіх деталей.

Програміст повинен знати:

  • вірність завдання початкових значень (ініціалізація) всіх змінних перед входом в цикл;

  • вірність завдання адреси в командах посереднього переходу;

  • вірність вибору умов, що перевіряються в місцях розгалуження;

  • вірність виконання першого і останнього переходу.

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