Директива визначення десяти байт (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.

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

Наши рекомендации