Полезное:
Как сделать разговор полезным и приятным
Как сделать объемную звезду своими руками
Как сделать то, что делать не хочется?
Как сделать погремушку
Как сделать так чтобы женщины сами знакомились с вами
Как сделать идею коммерческой
Как сделать хорошую растяжку ног?
Как сделать наш разум здоровым?
Как сделать, чтобы люди обманывали меньше
Вопрос 4. Как сделать так, чтобы вас уважали и ценили?
Как сделать лучше себе и другим людям
Как сделать свидание интересным?
Категории:
АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника
|
Завдання на роботу. 1 Написати програму на Turbo Assembler, що виконує задану операцію відповідно до варіанту (таблиця 5.2) та та скомпілювати її
1 Написати програму на Turbo Assembler, що виконує задану операцію відповідно до варіанту (таблиця 5.2) та та скомпілювати її.
Таблиця 11.1 – Варіанти завдань
Продовження таблиці 11.1
2 Здійснити компіляцію програм. 3 Виконати трасування програми за допомогою Turbo Debugger. Після виконання кожної команди процесора відображати значення регістрів що змінилися. 4 Зробити висновки за результатами роботи.
Приклад оформлення програми:
Програма на мові Assembler
DOSSEG .MODEL SMALL .STACK 100h .DATA Mes db 'Hello!',13,10,'$' .CODE start: mov ax,@Data mov ds,ax; встановити регістр DS так, ; щоб він вказував на сегмент даних. mov ah,9; функція DOS виводу рядка. mov dx,OFFSET Mes; посилання на повідомлення "Hello!". int 21h; виконати 9 функцію DOS. mov ah,4ch; функція DOS закінчення програми. int 21h; виконати 4с функцію DOS. END start
11.4 Контрольні запитання
1 Що таке процес компонування? 2 Що конкретно розуміють під директивою END, якщо вона завершує: а)програму, б)процедуру, в)сегмент? 3 Яка різниця між директивою і командою? 4 Зазначте різницю між RET і END. 5 Напишіть три команди для ініціалізації стоку по адресу в DS і нульовим адресом.
ЛАБОРАТОРНА РОБОТА №12
ПІДПРОГРАМИ. КОМАНДИ РОБОТИ ЗІ СТЕКОМ
12.1 Мета роботи
Засвоїти принципи написання та використання підпрограм, використання стеку в мові Assembler.
12.2 Теоретичні відомості Підчас написання програми приходиться виконувати однотипні операції. Такі частини програмного коду найкраще оформляти у вигляді підпрограми. Чим більше буде використано підпрограм тим зрозумілішим стає вся програма, але кількість таких підпрограм має відповідати доцільності їх використання. Підпрограма не повинна виконувати більше однієї функції. Покажемо синтаксис написання підпрограми :
ім.’я під-ми proc <збереження регістрів, що використовуються в п-мі> код підпрограми ret <ім.’я під-ми> endp
Ключове слово “proc” позначає початок підпрограми з назвою “ ім.’я під-ми ”;”endp” – кінець підпрограми (дужки < > позначають не обов’язковий параметр чи частину коду). Сам код підпрограми завершується командою ret. Порядок підпрограм в тексті програми включаючи й головну програму не має значення, але ім’я головної програми, повинно вказуватися в якості операнда директиви “end”, що завершує весь код. Виклик підпрограми здійснюється за допомогою команди – call адр. початку п-ми (ім’я підпрограми). Після виконання цієї команди до стеку заноситься 16-ти розрядне значення адреси команди наступної за командою call, а до лічильника команд (ІР) заноситься зміщення в сегменті пам’яті початку підпрограми. По команді ret в лічильник команди завантажується 16-ти розрядне значення з стеку на яке вказує покажчик стеку (SP). В попередньому абзаці описано дві команди виконання, яких змушує процесор виконувати запис/читання даних до стеку. Для звернення програмісту до цього сегменту пам’яті передбаченні команди: - push джерело – запис значення до стеку джерело (16,32-ти розрядний): регістр, безпос. операнд, сегментний регістр, змінна. Покажчик вершини стеку зменшується на 2 або 4 (якщо стек “пустий”, то покажчик стеку вказує на адресу на одну меншу ніж адреса кінця сегменту стеку). - pop приймач – читання значення з стеку приймач (16,32-ти розрядний): - регістр, сегментний регістр (крім CS), змінна. - рushа – розміщає в стеку регістри в наступному порядку: AX, CX, DX, SP, SP, BP, SI, DI. - рopа – читає значення з стеку в наступному порядку DI, SI, BP, збільшує SP на 2, DX, CX, AX. - рushf – збереження в стеку регістру флагів. - рорf – читання з стеку регістру флагів. При написанні програм програміст може задати розмір стеку описавши його в програмі директивою “stack розмір стеку ”, розмір стеку задається в байтах. Для роботи зі стеком, програміст може маніпулювати регістрами SS, SP, BP. Регістр ВР можна використовувати для доступу до даних в стеку через непряму адресацію (цей регістр по замовчуванню працює з SS). Найчастіше це використовується, коли параметри в підпрограму передаються через стек. В такому випадку для очищення стеку від переданих параметрів після закінчення роботи підпрограми використовують команду ret з параметром – ret 6. По такій команді стек, крім адреси наступної команди програми, очиститься від шести байт. Програмісту залишається розмістити параметри в правильному порядку. Date: 2015-12-12; view: 430; Нарушение авторских прав |