, 9; перехід до наступного поля
pop CX
loop m1
add BX, type tst; перехід до наступного запису; BX + кількість байтів, займаної структурою типу tst
pop CXm2
message DB «hello», 0dh, 0ah, «$» struc; опис типу структури
s DB?
f DB? DB?
tst endstst < «Student $», «Inanov $», «Ivan, $» > Tst < «Student $», «Petrov $», «Petr, $» >
nd start
Результат роботи програми:
helloIvanov Ivan, student Petrov Petr
17. Записи в Асемблері
Запис - це упаковані дані, які займають не окремі, повні комірки пам'яті (байти або слова), а частини осередків. Запис у Ассемблері займає байт або слово (інші розміри осередків для запису не допускаються), а поля запису - це групи послідовних бітів. Поля повинні бути притиснуті один до одного, між ними не повинно бути пробілів. Розмір поля в бітах може бути будь-яким, але в сумі розмір усіх полів не повинен бути більше 16. Сума розмірів всіх полів називається розміром запису. Якщо розмір запису менше 8 або 16, то поля притискаються до правої межі комірки, що залишилися ліві біти дорівнюють нулю, але до запису не відносяться і не розглядаються. Поля мають імена, але звертатися до них по іменах не можна, так як найменший адресованих елементів пам'яті це байт. Для роботи із записом необхідно описати спочатку тип запису, а потім описати змінні цього типу.
Опис типу може розташовуватися в будь-якому місці програми, але до опису змінних цього типу. Директива опису типу запису має вигляд:
<ім'я типу запису> record <поле> {, <Поле>}
<поле> ::=<Ім'я поля> : <Розмір> [= <Вираз>]
Тут <розмір> і <вираз>- Це константні вирази.
<розмір> визначає розмір поля в бітах, <вираз> визначає значення поля за замовчуванням. Знак? Не допускається.
Наприклад:
Рік (Y), записаний двома останніми цифрами, задовольняє співвідношенню: 2 6 < Y max=99 < 7 лютого, а це означає, що для зберігання року досить 7 бітів.
Імена полів, також як і в структурах, повинні бути унікальними в рамках всієї програми, в описі вони перераховуються зліва направо. В описі поля <вираз> може бути відсутнім, якщо воно є, то його значення повинне вміщатися у відведений йому розмір в бітах. Якщо для деякого поля вираз відсутня, то його значення за замовчуванням дорівнює нулю, що непевних полів не може бути.
Певне директивою record ім'я типу (Trec, TData) використовується далі як директива для опису змінних - записів такого типу.
ім'я запису ім'я типу запису <початкові значення>,
Кутові дужки тут не метасимволи, а символи мови, всередині яких через кому вказуються початкові значення полів. Початковими значеннями можуть бути:
) константне вираз, 2) знак?, 3) пусто
На відміну від структури, знак? Визначає нульове початкове значення, а «порожньо», як і в структурі, визначає початкове значення рівним значенню за замовчуванням. Наприклад: <...