способів

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

ВУЗ:
Національний університет Львівська політехніка
Інститут:
Не вказано
Факультет:
КН
Кафедра:
Не вказано

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

Рік:
2012
Тип роботи:
Лабораторна робота
Предмет:
Засоби системного програмування

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

МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ “ЛЬВІВСЬКА ПОЛІТЕХНІКА” / Лабораторна робота №3 з дисципліни " Засоби системного програмування " Тема: способів представлення даних в пам’яті комп’ютера з архітектурою х86. Мета: вивчити способи задання констант та змінних в Асемблері, набути навики інтерпретування даних в пам’яті комп’ютера з архітектурою х86. Теоретична частина. Визначення даних в мові Assembler. Асемблер допускає два основні методи визначення даних: через вказування довжини даних та за їх значенням. В першому випадку використовуються директиви визначення даних, а у другому безпосереднє значення або директива EQU. Розглянемо основний формат визначення даних: [ім’я] Dn вираз - Ім’я елемента даних не є обов’язковим але якщо в програмі є посилання на деякий елемент, те це робиться за допомогою імені. - Для визначення елементів даних є наступні директиви: DB (байт) DW (слово – 2 байти) DD (подвійне слово – 4 байти), DQ (8 байт) DT (10 байт). Вираз може містити константу, наприклад: FLD1 DB 25, або знак питання для невизначеного значення, наприклад: FLDB DB ? Вираз може містити кілька констант, розділених комами й обмеженими тільки довжиною рядка: FLD3 DB 11, 12, 13, 14, 15, 16, ... Асемблер визначає ці константи у вигляді послідовності сусідніх байт. Звертання за FLD3 вказує на першу константу 11, за FLD3+1 - на другу 12. (FLD3 можна представити як FLD3+0). Наприклад команда MOV AL,FLD3+3 завантажує в регістр AL значення 14 (0Eh). Вираз допускає також повторення константи в наступному форматі: [ім’я] Dn кількість повторень DUP (вираз) ... Директива EQU Директива EQU не визначає елемент даних, але визначає значення, що може бути використане для підстановки в інших командах. Припустимо, що в сегменті даних закодовано наступну директиву EQU: TIMES EQU 10 Ім’я, у цьому випадку TIMES, може бути представлено будь-яким припустимим в асемблері ім’ям. Тепер, у якій би команді або директиві не використалося слово TIMES асемблер підставить значення 10. Наприклад, асемблер перетворить директиву FIELDA DB TIMES DUP (?) в директиву FIELDA DB 10 DUP (?) Ім’я, пов’язане з деяким значенням за допомогою директиви EQU, може використатися в командах, наприклад: COUNTR EQU 05 MOV CX,COUNTR Асемблер заміняє ім’я COUNTR у команді MOV на значення 05, створюючи операнд з безпосереднім значенням, так, ніби було закодовано MOV CX,05 ;Асемблер підставляє 05. Перевага директиви EQU полягає в тому, що багато команд можуть використати значення, визначене іменем COUNTR. Якщо це значення повинне бути змінене, то зміні підлягає лише одна директива EQU. Природно, що використання директиви EQU доцільне лише там, де підстановка має сенс для асемблера. У директиві EQU можна використати символічні імена: 1. TP EQU TOTALPAY 2. MPY EQU MUL Перший приклад припускає, що в сегменті дані програми визначене ім’я TOTALPAY. Для будь-якої команди, що містить операнд TP, асемблер замінить його на адресу TOTALPAY. Другий приклад показує можливість використання в програмі слова MPY замість звичайного мнемокоду MUL. Директива LABEL Директива LABEL створює мітку, яка не займає місця в пам’яті, а просто вказує на адресу команди або дані, що слідують за нею. Має наступний формат: мітка LABEL тип Мітка – це назва мітки, параметр тип може приймати одне з значень: BYTE (1 байт), WORD (2 байти), DWORD (4 байти), FWORD (6 байт), QWORD (8 байт), TBYTE (10 байт), NEAR (ближня мітка), FAR (дальня мітка). Мітка отримує значення рівне зміщенню в сегменті адрес наступної за нею команди або зміщенню в сегменті даних наступного за нею операнду і тип вказаний явно. За допомогою міток з різними типами зручно організовувати доступ до одних і тих самих даних, що інтерпретуватимуться по різному в залежності від типу мітки. Наприклад, як байти чи як слова. Або здійснювати ближні чи дальні переходи. Вирівнювання сегментів Оголошення сегменту має наступну структуру: ім’я_сегменту segment readonly вирівнювання тип розрядність ’клас’ ім’я_сегменту ends П’ять операндів директиви segment, що відображені курсивом є необов’язковими. Для того, щоб задати вирівнювання сегментів в адресному просторі необхідно задати параметру вирівнювання одне з значень: BYTE – адреса сегменту може починатися з будь-якої адреси; WORD – адреса сегменту може починатися з парної адреси; DWORD – адреса сегменту може починатися з адреси, кратної 4; PARA – адреса сегменту може починатися з адреси, кратної 16 (границя параграфа); PAGE – адреса сегменту може починатися з адреси, кратної 256 (границя сторінки). За замовчуванням вирівнювання відбувається по границі параграфу. Задавши ’клас’ сегменту можна забезпечити послідовне розташування сегментів у пам’яті. Клас сегменту – це будь-яка мітка, що розташована в лапках. Всі сегменти з однаковим класом розташовуються в пам’яті один за одним. Індивідуальне завдання 3 A4,B3u,C4,Dfd,E10,F8, K 37788663   Текст програми STACK SEGMENT PARA STACK 'STACK' db 100h DUP (?) STACK ENDS DATA SEGMENT WORD 'DATA' HelloMessage db 'Voloshyn',13,10,'$' A dd 0123Q,0ABCh, 9874 B dw 00A5h,0AB3Ch C dd 512h DATA ENDS DATA1 SEGMENT PARA 'DATA' LBL LABEL BYTE D dt 3.1487878788 E dt 11111010b F dq 12356789ABCDEFh K equ 37788663h DATA1 ENDS CODE SEGMENT PARA 'CODE' ASSUME cs:CODE, ds:DATA ProgramStart: push ds sub ax,ax push ax mov ax,Data mov ds,ax mov ah,09 mov dx,OFFSET HelloMessage int 21h mov ah,4Ch int 21h CODE ENDS END ProgramStart Результат програми / Висовок: На даній лабораторній роботі я вивчив способи задання констант та змінних в Асемблері, набув навики інтерпретування даних в пам’яті комп’ютера з архітектурою х86.
Антиботан аватар за замовчуванням

25.03.2016 12:03-

Коментарі

Ви не можете залишити коментар. Для цього, будь ласка, увійдіть або зареєструйтесь.

Ділись своїми роботами та отримуй миттєві бонуси!

Маєш корисні навчальні матеріали, які припадають пилом на твоєму комп'ютері? Розрахункові, лабораторні, практичні чи контрольні роботи — завантажуй їх прямо зараз і одразу отримуй бали на свій рахунок! Заархівуй всі файли в один .zip (до 100 МБ) або завантажуй кожен файл окремо. Внесок у спільноту – це легкий спосіб допомогти іншим та отримати додаткові можливості на сайті. Твої старі роботи можуть приносити тобі нові нагороди!
Нічого не вибрано
0%

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

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

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

Admin

26.02.2023 12:38

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