Лекции.Орг


Поиск:




Категории:

Астрономия
Биология
География
Другие языки
Интернет
Информатика
История
Культура
Литература
Логика
Математика
Медицина
Механика
Охрана труда
Педагогика
Политика
Право
Психология
Религия
Риторика
Социология
Спорт
Строительство
Технология
Транспорт
Физика
Философия
Финансы
Химия
Экология
Экономика
Электроника

 

 

 

 


Побудова програм з різною структурою мовою Асемблер




МП фірми Motorola

 

Лінійні програми

 

Вхідний контроль:

1 В який спосіб будуть розміщуватись у пам’яті байти команди мовою Асемблер-86 MOV AX,7000 H, якщо команду розташовано розпочинаючи з адреси 7000:0100?

2 Команда з якою адресою виконуватиметься наступною у лінійній програмі?

3 Яка адреса вміщується у вказівнику команд ІР МП фірми Intel на лінійних ділянках програми?

 

За приклад побудови лінійної програми розглянемо ділення 16-розрядного числа $5679 зі знаком на 16-розрядне число $0004.

 

MOVЕ.L #$00005679,D2

MOVЕ.L #$00000004,D1

DIVS D1,D2

NOP

 

Результатом виконання фрагмента буде частка від ділення (розряди 0...15), яка дорівнює $159 E, вона буде розміщена у D 2 (розряди 0...15), і стача $0001 (розряди 16...31), яку буде розміщено також у регістрі D 2.

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

 

EOR.L D3,D3

MOVE.L D2,D3

MULS D1,D2

SWAP D3

ADD D3,D2

 

Результатом виконання фрагмента буде наявність у регістрі D 2 числа $5679, вміст регістра D 1 не зміниться.

 

Контрольні питання:

1 Яку частку програм, на Ваш погляд, займають лінійні ділянки?

2 В який спосіб будуть розміщуватись у пам’яті байти команди мовою Асемблер МП М 680 Х 0 MOVE #$1234, D 0, якщо команда розташована розпочинаючи з адреси $400600?

3 Команда з якою адресою буде виконуватись наступною у лінійній програмі?

4 Яка адреса вміщується у лічильнику команд РС МП фірми Motorola на лінійних ділянках програми?

 

Контрольні питання підвищеної складності:

1 Віднайти добуток даних $1234 та $2 усіма відомими Вам способами: написати фрагменти програми, які їх зреалізовують.

2 Віднайти частку від ділення здобутого у попередньому завданні результату на $2 усіма відомими Вам способами: написати фрагменти програми, які їх зреалізовують.

 

Розгалужені та циклічні програми. Підпрограми

 

Вхідний контроль:

1 Наведіть приклад застосування арифметичного циклу.

2 Наведіть приклад застосування ітераційного циклу.

3 За яким принципом зреалізовуються підпрограми часової затримки?

 

Приклад 12.3.1 Написати фрагмент програми, який здійснював би часову затримку на термін, визначуваний найбільшим числом, котре можна трактувати як байт.

 

400600 MOVЕ.В #$FF,D6; Затримка здійснюється за рахунок

400602 SUB #1,D6; повторювання у циклі команди віднімання 1 з

400604 BNE *-2; лічильника D6; цикли повторюються, допоки

400608 NOP; його вміст не дорівнюватиме нулю

 

Фрагмент програми, який зреалізовує затримку, може бути оформлено у вигляді підпрограми.

 

Приклад 12.3.2 Написати фрагмент програми, який виводить слово $1234 до додаткового регістра РААR РІ/Т, а через час, визначуваний вмістом D 2 у підпрограмі ТІМЕ, слово $5678 – до того самого регістра РААR РІ/Т.

 

МOVЕ,B #$1234,D0; Завантаження даного $1234 до регістра D0

MOVЕ,L #$800015,A0; Завантаження адреси регістра

; PAAR PI/T у А0

MOVЕP.B D0,(A0); Запис даного $1234 до регістра PAAR

JSR ТІМЕ; Звернення до підпрограми TIME

MOVЕ.B #$5678,D1; Завантаження даного $5678 до регістра D1

MOVЕP.B D0,(A0); Запис даного до регістра PAAR РІ/Т

ТІМЕ: MOVЕ #$AB,D2; Підпрограма

М2: SUB #1,D2; ТIME

BNE M2;

RTS;

 

Приклад 12.3.3 Написати підпрограму визначення парності чи непарності кількості одиниць у байті, який міститься в регістрі.

 

Задача розв’язується шляхом логічного зсуву байта у циклі, наприклад, праворуч, та підрахування кількості разів, коли встановлювався прапорець перенесення С. Структурну схему алгоритму підраховування кількості одиниць у байті зображено на рис. 12.10.

Програма розв’язання задачі на Асемблері МП МС 68020:

 

EVEN: MOVE SR,D5; Завантаження регістра стану до D5

CLR.L D2; Обнулення D2, лічильника суми

MOVE.L #$7,D3; Організація лічильника циклів у D3

MOVE.L #$09,D0; Завантаження байта $9 до регістра D0

M1: LSR.B #$1,D0; Зсув праворуч регістра D0 на один розряд

BCS.B M2; Перехід до лічильника суми

BRA.B M3; Обхід підсумовування

M2: ADDI #$1,D2; Додавання 1, якщо С = 1

M3: DBF D3,M1; Організація повторення циклів

BTST #$0,D2; Перевірка парності кількості

Одиниць суми у D2

BNE.B M4; Число непарне?

CLR.L D2; Ні, обнулення D2

BRA.B M5; Обхід запису числа FDH до D2

M4: MOVE.L #$FD,D2; Так, запис до D2 числа $FD





Поделиться с друзьями:


Дата добавления: 2015-10-19; Мы поможем в написании ваших работ!; просмотров: 544 | Нарушение авторских прав


Поиск на сайте:

Лучшие изречения:

Стремитесь не к успеху, а к ценностям, которые он дает © Альберт Эйнштейн
==> читать все изречения...

2276 - | 2240 -


© 2015-2025 lektsii.org - Контакты - Последнее добавление

Ген: 0.007 с.