Assembler
00
отже при допомозі однобайтного двійково-десяткового числа можна записати десяткові числа 0 – 99.
10011001
99
При необхідності працювати з більшими числами необхідно використовувати кілька байт. Зауважимо, що не має стандартної форми запису для від’ємного представлення таких чисел: старший біт тут не можна використовувати як знаковий. Програміст сам повинен турбуватися про збереження інформації про знак числа і самостійно обробляти знак при виконанні арифметичних дій. МП для такої обробки не мають відповідних команд.
Неунаковані двійково-десяткові числа.
Як і унаковані вони займають 1б, але в цьому байті записується тільки одна десяткова цифра, ця цифра записується в молодшій тетраді:
0 – 9
Отже діапазон представлення чисел 0 – 9. Значення старшоWптетради не суттєве:
хххХ1001
9
Для зручності відладки в старшCптетраду записують 0:
0 0 0 0
ХххХ1001
0 –9Зворотне представлення просте: молодш0птетрада, якщо вона знаходиться у межах представлення чисел 0 – 9 визначає відповідне двійково-десяткове неунаковане число. При необхідності працювати з великою розрядністю таких чисел необхідно використовувати також кілька байт.
Лекція за 24.09.98.
Приклад структури програми на мові асемблера (ш0блон).
Приведемо основні директиви, які використовуються і програмі на мові асемблера. Тепер використовуються спрощені способи опису сегментів. Сегменти – це частини програми (сегменти даних). Текст програми можна набирати великими або малими буквами, програма асемблера самостійно переводить текст у верхній регістр. Обов’язково у тексті програми писати коментарі. Текст який стоїть за символом “;” є коментарем, він ігнорується при асемблюванні програми. Директива яка як правило йде з початку програми dosseg описує розташування сегментів. Директива mode small – директива опису моделі пам’яті, наприклад в цьому випадку говорять, що модель пам’яті типу small, тобто є один сегмент коду і один сегмент коду і один сегмент даних. Директива .stack 100 – директива, яка задає початок сегменту стеку. В стеці зберігаються тимчасові змінні і адреси повернення з підпрограми або переривань. Як правило будь-яка програма має сегмент стеку. В даному випадку такий запис директиви .stack 100 позначає, що стек має довжину 100байтів. Точну величину стеку визначає число викликів підпрограм та системних ф-цій, стек треба збільшувати. В кінцевому підсумку розмір стеку підбирають експериментально, коли програма вже написана і відлагоджена. Директива .data – директива початку сегменту ініціалізованих даних, після цього рядка поміщають змінні значення яких відоме (ініціалізовані змінні). Директива .data ? – директива початку сегменту неініціалізованих даних. Директива .code – початок сегменту коду. Сегмент коду – це частина коду яка містить команди МП, власне це й є сама програма. В деяких випадках в цей сегмент можна поміщати не тільки команди, а й дані. Наприклад у підпрограмах обробки переривань. Директива .startup – точка початку виконання програми. З наступного після даного рядка починається виконання програми після її завантаження в пам’ять, ця директива повинн0пбути обов’язково всередині сегмента коду, але не обов’язково н0пйого початку. Директива .exit 0. – це директива закінчення програми при виконанні цього рядка управління буде передане ОС. Таких директив в програмі може бути кілька, число після директиви може приймати кілька значень, це число після закінчення програми присвоюється змінній ОС з назвою ERRORLEVEL, ця змінна використовується в командних файлах. Є спеціальні команди для роботи з цією змінною. Використовуючи різні числа можна повідомляти ОС, яка причина закінчення програми. Директиви початку і закінчення програми є по суті макровизначеними, вони визначають необхідний код який автоматично додається на початок і кінець програми. Цей код можна подивитись у файлі лістингу після асемблювання. End – директива закінчення тексту програми на мові асемблера. Рядки які розміщені після директиви end можна писати коментар в довільній формі.