Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторна робота14.doc
Скачиваний:
2
Добавлен:
23.11.2019
Размер:
91.65 Кб
Скачать

Виділення елемента запису:

  • Помістити запис у тимчасову пам'ять - регістр (8, 16 або 32-бітний залежно від розміру запису).

  • Одержати бітову маску, що відповідає елементу запису, за допомогою оператора mask .

  • Локалізувати біти в регістрі за допомогою маски й команди and .

  • Зрушити біти елемента до молодших розрядів регістра командою shr . Число розрядів для зрушення одержати з використанням ім'я елемента запису.

У результаті цих дій елемент записи буде локалізований на початку робочого регістра й далі з ним можна робити будь-які дії.

Робота з елементом запису:

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

Приміщення зміненого елемента на його місце в запис:

  • Використовуючи ім'я елемента запису як лічильник зрушень, зрушити вліво біти елемента запису.

  • Якщо ви не впевнені в тому, що розрядність результату перетворень не перевищила вихідну, можна виконати “обрізання” зайвих бітів, використовуючи команду and і маску елемента.

  • Підготувати вихідний запис до вставки зміненого елемента шляхом обнуління битов у записі на місці цього елемента. Це можна зробити шляхом накладення командою and інвертованої маски елемента запису на вихідний запис.

  • За допомогою команди or накласти значення в регістрі на вихідний запис.

Як приклад розглянемо лістинг 8, що обнуляет поле i2 у записі iotest .

Лістинг 8. Робота з полем запису

;prg_12_7.asm

masm

model small

stack 256

iotest record i1:1,i2:2=11,i3:1,i4:2=11,i5:2=00

.data

flag iotest

<>

.code

main:

mov ax,@data

mov ds,ax

mov al,mask i2

shr al,i2 ;біти i2 на початку ax

and al,0fch ;обнулили i2

;поміщаємо i2 на місце

shl al,i2

mov bl,[flag]

xor bl,mask i2 ;скинули i2

or bl,al ;наклали

exit:

mov ax,4c00h ;стандартний вихід

int 21h

end main ;кінець програми

На закінчення ще раз проаналізуйте тип запису й особливості роботи з ним. При цьому зверніть увагу на ту обставину, що ми ніде явно не прораховуємо розташування битов. Тому якщо знадобиться змінити розмір елемента або його початкове значення, досить внести зміни в екземпляр запису або в опис її типу; функціональну частину програми, що працює із цим записом, торкати не потрібно.

  1. Завдання для виконання лабораторної роботи.

  1. Написати програму на мові асемблера яка обнуляє поле f3 в запису ftest:

ftest record f1:2=11, f2:2=00, f3:2=11, f4:1, f5:2=11

  1. Виконання лабораторної роботи.

  1. Опрацювати теоретичні відомості.

  2. Виконати поставлене завдання (п.4), записати результат.

  3. Дати відповіді на контрольні питання(п.6).

  4. Зробити висновки.

  1. Контрольні питання.

  1. Як провести вибіркову ініціалізацію полів запису?

  2. Як організувати роботу з окремими елеметами запису?

  1. Зміст звіту.