Смекни!
smekni.com

Мова програмування Assembler (стр. 9 из 21)

Директива DQ визначає елементи, що мають довжину чотири слова (вісім байт). Числове вираження може містити одну чи більш констант, кожна з який має максимум вісім байт або 16 шіст.цифр. Найбільше позитивне тичина. число - це сімка і 15 цифр F. Для одержання представлення про величину цього числа, покажемо, що тичина. 1 і 15 нулів еквівалентний наступному десятковому числу:1152921504606846976.

У прикладі на рис. 5.1 поля FLD2DQ і FLD3DQ ілюструють числові значення. Асемблер перетворить усі числові кін станты в директиві DQ у шест. представлення, але записує об'єктний код у зворотній послідовності, як і в директивах DD і DW. Обробка асемблером символьних рядків у директиві DQ aналогічно директивам DD і DW.

ДИРЕКТИВА ВИЗНАЧЕННЯ ДЕСЯТИ БАЙТ (DT)

Директива DT визначає елементи даних, що мають довжину в десять байт. Призначення цієї директиви зв'язане з "упакованими десятковими" числовими величинами (див. гл.13). По директиві DT генеруються різні константи, у залежності від версії асемблера; для практичного застосування ознайомтеся з посібником з вашому aссемблера. На рис. 5.1 приведені приклади директиви DT для невизначеного елемента і для двосимвольної константи. Програма на рис.5.1 містить тільки сегмент даних. Xоча асcемблер не видає повідомлень про помилки, у таблиці LINK MAP з'явиться попередження: "Warning: No STACK Segment", а компоновщик LINK видасть "There were 1 errors detected" (Виявлена 1 помилка). Незважаючи на це попередження можна використовувати відлагоджувач DEBUG для перегляду об'єктного коду, як показано на рис. 5.2. Права сторона дампа чітко показує символьні дані, як, наприклад, "Personal Computer".

БЕЗПОСЕРЕДНІ ОПЕРАНДИ

На рис. 2.1 у розділі 2 було показано використання безпосередніх операндів. КомандаMOV AX,0123Hпересилає безпосередню шіст. константу 0123 у регістр AX. Трьохбайтний об'єктний код для цієї команди є B82301, де B8 позначає "переслати безпосереднє значення в регістр AX", a наступні два байти містять саме значення. Багато команд мають два операнди: перший може бути регістр адреси або пам'яті, а другий - безпосередньо константа.

Використання безпосереднього операнда є ефективнішим ніж визначення числової константи в сегменті даних і організації зсилки на неї в операнді команди MOV, наприклад, cегмент даних: AMT1 DW 0123H? cегмент кодів: MOV AX,AMT1.

Довжина безпосередніх операндів.

Довжина безпосередньої константи залежить від довжини першого операнда. Наприклад, якщо випливає що безпосередній операнд є двобайтним, регістр AL має тільки один байт: MOV AL,0123H (помилка) однак, якщо безпосередній операнд коротший, ніж той що одержує операнд, як у наступному прикладі - ADD AX,25H (немає помилки) то асемблер розширює безпосередній операнд до двох байт, 0025 і записує об'єктний код у вигляді 2500.

Безпосередні формати

Безпосередня константа може бути шістнадцятковою, напpиклад, 0123H; десятковою, наприклад, 291 (яку асемблер конвертує в тичину.0123); чи двійковою, наприклад, 100100011В (яка перетвориться в тичину. 0123). Нижче приведений список команд, що допускають безпосередні операнди:

Команди пересилання і порівняння: MOV, CMP.

Арифметичні команди: ADC, ADD, SBB, SUB.

Команди зрушення: RCL, RCR, ROL, ROR, SHL, SAR, SHR.

Логічні команди: AND, OR, TEST, XOR.

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

ДИРЕКТИВА 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.

Лекція 6 Транслятори мови Assembler

У Турбо Асемблері існує дуже могутній і гнучкий синтаксис командного рядка. Якщо ви запустите Турбо Асемблер, не задавши ніяких аргументів, наприклад:

TASM

то на екран виведеться довідкова інформація, (на англійській мові) яка описує безліч параметрів командного рядка і синтаксис для специфікації асемблюваних файлів. На Рис. 3.1 показано, як вона виглядає.

Turbo Assembler Version 2.0 Copyright (C) 1990

by Borland International, Inc

Usage:

TASM [параметри] исх_файл [,об'єкт_файл] [,лістинг] [,пер_посилання]

/a,/s Упорядкованість сегментів за алфавітним порядком чи порядку вихідного коду /c Генерація в лістингу перехресних посилань

/dSYM[=VAL] Визначається SYM = 0 чи SYM = VAL

/e,/r Эмулируемые чи дійсні інструкції з плавающей крапкою

/h,/? Виводиться дана довідкова інформація

/lPATH файли, що включаються, шукаються по маршруті, обумовленомуPATH

/jCMD Визначає початкову директиву Асемблера (напримір, jIDEAL)

/kh#,/ks# Потужність хеш-таблицы #, потужність обсягу рядка #

/l,/la Генерація лістинга: l=звичайний лістинг, la=розширенаный

/ml,/mx,/mu Розрізнення в регістрі букв ідентифікаторів: ml=усі, mx=глобальні, mu=не розрізняються

/mv# Задає максимальну довжину ідентифікаторів

/m# Дозволяє виконання декількох проходів для зодоволення випереджальних посилань

/n Придушення в лістингах таблиці символів(ідентифікаторів)

/p Перевірка перекриття сегмента коду в захищеномурежимі

/q Придушення записів .OBJ, що не вимагаються при компоновке

/t Придушення повідомлень при успішному асемблировании

/w0,/w1,/w2 Завдання рівня попередження: w0=немає попереджень, w1=w2=є попередження

/w-xxx,/w+xxx чи Заборона дозвіл попередження типу xxx

/x Включення в лістинги блоків умовного асемблирования

/zi,/zd Інформація про ідентифікатори для налагодження: zi=підлоганая, zd=тільки про номери рядків.

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

Загальний вид командного рядка виглядає в такий спосіб:

TASM файли [; файли]...

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

TASM /E FILE1; /A FILE2

У загальному випадку група файлів у командному рядку може мати вигляд:

[параметр]...исх_файл [[+] вихідний_файл]...

[,[об'єктний_файл] [, [файл_лістинга],

[, [файл_перехресних_посилань]]

Цей синтаксис показує, що група файлів може починатися з будь-якого параметра, що ви хочете застосувати до цих файлів а потім можуть випливати файли, що ви хочете асемблировать. Ім'ям файлу може бути одне ім'я файлу, або ви можете використовувати звичайні трафаретні символи DOS * і ? для завдання групи ассемблируемых файлів. Якщо розширення імені файлу не зазначено, Турбо Асемблер використовує за замовчуванням розширення ".ASM".

TASM MYFILE,,,MYXREF

По цій команді файл MYFILE.ASM асемблируется у файл MYFILE.OBJ, лістинг виводиться у файл з ім'ям MYFILE.LST, а перекрестные посилання - у файл MYXREF.XRF.

Якщо при специфікації асемблируемых вихідних файлів ви используете трафаретні символи, їх можна використовувати також для завдання імен файлу лістинга й об'єктного файлу. Наприклад, якщо в поточному каталозі містяться файли XX1.ASM і XX2.ASM, то командний рядок:

TASM XX*,YY*

асемблює усі файли, що починаються з букв XX, генерує об’єктні файли, імена яких будуть починатися з YY, а іншу частина імені формує відповідно до імені вихідного файлу. Результуючі об'єктні файли одержать, таким чином, імена YY1, OBJ і YY2.OBJ.

Якщо ви не хочете створювати об'єктний файл, але хочете підлоги-чить файл лістинга, чи якщо ви хочете одержати файл перехресних посилань, але не хочете створювати файл лістинга чи об'єктний файл, можна як ім'я файлу задати нульове (фіктивне) устройство. Наприклад:

TASM FILE1,,NUL,

Ця команда асемблирует файл FILE1.ASM в об'єктний файл FILE1.OBJ. При цьому файл лістинга не створюється, а створюється файл перехресних посилань FILE1.XRF.

Параметри командного рядка

Необов'язкові параметри командного рядка дозволяють вам управлять поводженням Асемблера, а також тим, яку інформацію він виводить на екран, у лістинг і об'єктний файл. У Турбо Асемблері передбачено деякі параметри, що не виконують ніяких дій, а використовуються тільки для сумісності поточної версії TASM з попередніми версіями MASM (макроасемблер фірми Microsoft):

/B Задає розмір буфера

/V Виводить на екран додаткову статистику

Ви можете задавати параметри, що представляють собою будь-яку комбінацію букв у верхньому і нижньому регістрі. Крім того, параметри можна задавати в будь-якому порядку (крім параметрів /I і /J), вони будуть при цьому оброблятися послідовно. При використанні параметра /D потрібно бути уважним: ідентифікатори треба визначити до того, як вони будуть використані в наступних параметрах /D.

Примітка: за допомогою директив, зазначених у вашому исходном коді, ви можете скасувати еквівалентні їм параметри Асемблера.