Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Lekz._6.doc
Скачиваний:
6
Добавлен:
11.08.2019
Размер:
180.74 Кб
Скачать

Системне програмування, доц. І.І. Мітасов, 2010р. Лекція 6, 11 сторінок

Тема 2. Архітектура процесора і мова асемблера: Основи програмування на мові асемблера

ЛЕКЦІЯ 6. Вимоги до написання програм на мові асемблера

Питання лекції:

  • Стандартні вимоги;

  • Речення мови асемблера;

  • Директиви;

  • Структура системи команд.

1. Стандартні вимоги

Коментарі у програмах на асемблері

; Цей рядок повністю є коментарем

ADD AX, BX ;Коментар на одному рядку з командою

Використання коментарів у програмі поліпшує її ясність, Oсобливо там, де призначення набору команд незрозуміло. На будь-якому рядку початкового модуля коментаpі завжди починаються з символу крапка з комою (;) і асемблер вважає в цьому випадку, що всі символи, що знаходяться праворуч від ; є коментарем. Коментар може містити будь-які друковані символи, включаючи пробіл. Коментар може займати весь рядок або слідувати за командою на тому ж рядку, як це показано у двох наступних прикладах:

Коментарі з'являються тільки в лістингах асемблювання початкового модуля і не призводять до створення машинних кодів, тому можна включати будь-яку кількість коментарів, не надаючи впливу на ефективність виконання програми.

Формат кодування

[мітка] команда [операнд]

Основний формат кодування команд асемблера має такий вигляд:

Мітка (якщо є), команда і операнд (якщо є) pозділяються принаймні одним пропуском або символом табуляції. Максимальна довжина рядка - 132 символи, однак, більшість вважають за краще працювати з рядками в 80 символів (відповідно ширині екрану).

Мітки. Мітка в мові асемблера може містити наступні символи:

Букви: від A до Z і від a до z;

Цифри: від 0 до 9;

Спецсимволи: знак питання (?), крапка (.) (тільки перший символ), знак «комерційне ет» (@), підкреслення (_), долар ($).

Першим символом в мітці повинна бути буква або спецсимвол. Асемблер не робить розходження між великими та малими літерами. Максимальна довжина мітки - 31 символ.

Приклади міток: COUNT , PAGE25 , $E10 .

Рекомендується використовувати описові та смислові мітки. Імена регістрів, наприклад, AX, DI або AL є зарезервованими і використовуються тільки для посилання на відповідні регістри. Наприклад, у команді ADD AX,BX асемблер «знає», що AX і BX відноситься до регістрів. Однак, у команді MOV REGSAVE,AX асемблер сприйме ім'я REGSAVE тільки в тому випадку, якщо його буде визначено в сегменті даних.

Команда. Мнемонічна команда вказує асемблеру, яку дію має виконати даний оператор. У сегменті даних команда (директива) визначає поле, робочу oбласть або константу.

У сегменті коду команда визначає дію, наприклад, пересилання (MOV) або додавання (ADD).

COUNTER DB 0 ; Визначити байт (DB) з нульовим значенням

Операнд. У випадку, якщо команда специфікує виконувану дію, то операнд визначає початкове значення даних або елементи, над якими виконується дія по команді. У наступному прикладі байт COUNTER визначений у сегменті даних і має нульове значення:

Команда може мати один або два операнди, або взагалі бути без операндів. Розглянемо наступні три приклади:

Немає операндів: RET ;Повернення

Один операнд: INC CX ;Збільшити CX

Два операнди: ADD AX,12 ;Додати 12 до AX

Мітка, команда і операнд не обов'язково повинні починатися з будь-якої певної позиції в рядку. Однак, рекомендується записувати їх у колонку для більшої зручності при перегляді програми. Для цього, наприклад, редактор DOS EDLIN забезпечує табуляцію через кожні вісім позицій.

2. Речення мови асемблера

Речення мови асемблера описують команди або псевдокоманди (директиви). Речення-команди задають машинні команди обчислювальної системи; обробка асемблером команди приводить до генерації машинного коду. Обробка псевдокоманди не призводить до безпосередньої генерації коду, псевдокоманда керує роботою самого асемблера. Для однієї і тієї ж апаратної архітектури можуть бути побудовані різні асемблери, в яких команди будуть обов'язково однакові, але псевдокоманди можуть бути різні.

У всіх мовах асемблерів кожне нове речення мови починається з нового рядка. Кожне речення, як правило, займає один рядок, хоча зазвичай допускається продовження на наступному рядку (рядках). Формат запису речень мови буває жорстким або вільним. Під час запису у жорсткому форматі складові речення повинні розташовуватися у фіксованих позиціях рядка. (Наприклад: мітка повинна розташовуватися в позиціях 1-8, позиція 9 - порожня, позиції 10-12 - мнемоніка команди, позиція 13 - порожня, починаючи з позиції 14 - операнди, позиція 72 - ознака продовження). Зазвичай для запису програм при жорсткому форматі створюються бланки. Жорсткий формат зручний для обробки асемблером (зручний і для читання).

Вільний формат допускає будь-яку кількість пропусків між складовими речення .

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

º мітка або ім'я; º мнемоніка; º операнди; º коментарі.

Мітка або ім'я не є обов'язковим компонентом-ідентифікатором. Не у всіх мовах асемблерів ці поняття розрізняються. Якщо вони відрізняються (наприклад, MASM), то мітка - точка програми, на яку передається управління, отже, мітка стоїть в реченні, що містить команду; ім'я – це ім'я змінної програми, тобто комірки пам'яті, отже, ім'я стоїть в реченні, що містить псевдокоманду резервування пам'яті або визначення константи. У деяких випадках мітка та ім'я можуть відрізнятися навіть синтаксично, так, в MASM / TASM після мітки ставиться двокрапка, а після імені - ні.

Однак, фізичний зміст і мітки, і імені - однаковий, це - адреса пам'яті. У всіх випадках, коли асемблер зустрічає в програмі ім'я або мітку, він заміняє її на адресу тієї комірки пам'яті, яку ім'я / мітка ідентифікує.

  • У мові повинні передбачатися деякі спеціальні правила, що дозволяють асемблеру розпізнати і виділити мітку / ім'я, наприклад:

  • мітка / ім'я повинна починатися в 1-й позиції рядка

  • якщо мітки / імені немає, то в 1-й позиції повинен бути пробіл, або за міткою / ім'ям має слідувати двокрапка, і т.п.

Мнемоніка — символічне позначення команди / псевдокоманди.

Операнди — один або декілька операндів, зазвичай розділяються комами. Операндами команд є імена регістрів, безпосередні операнди, адреси пам'яті (задаються у вигляді констант, літералів, символічних імен або складних виразів, що включають спеціальний синтаксис). Операнди псевдокоманд можуть бути складніше і різноманітніше.

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

Константи — можуть являти собою безпосередні операнди або абсолютні адреси пам'яті. Застосовуються шістнадцяткові, десяткові, вісімкові, двійкові і символьні константи.

Безпосередні операнди — записуются в код команди.

Імена — адреси комірок пам'яті.

Під час трансляції асемблер перетворює імена в адреси. Спосіб перетворення імені в значення залежить від прийнятих способів адресації. Як правило, основним способом адресації в машинних мовах є адресація відносна: адреса в команді задається у вигляді зміщення щодо деякої базової адреси, значення якої міститься в деякому базовому регістрі. В якості базового можуть застосовуватися або спеціальні регістри (DS, CS в Intel), або регістри загального призначення (S/390).

Літерали - записані в особливій формі константи. Концептуально літерали - ті ж імена. При появі в програмі літералу асемблер виділяє комірку пам'яті і записує в неї задану в літералі константу. Далі всі появи цього літералу асемблер замінює на звернення по адресі цієї комірки. Таким чином, літеральні константи зберігаються в пам'яті в одному примірнику незалежно від кількості звернень до них.

Спеціальний синтаксис — явний опис способу адресації (наприклад, вказівка базового регістра і зміщення).

3. Директиви

Асемблер має ряд операторів, які дозволяють управляти процесом асемблювання та формування лістингу. Ці оператори називаються псевдокомандами або директивами.

Вони діють тільки в процесі асемблювання програми і не генерують машинних кодів.

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