Иллюстрированный самоучитель по Assembler


Структуры - часть 3


Известно, что дата создания файла хранится в каталоге диска в виде 16-битового слова, в котором старшие 7 бит обозначают год (от 1980), следующие 4 бит - месяц и последние 5 бит - день (рис. 2.14).

Рис. 2.14. Формат записи даты в каталоге диска.

Эти данные удобно специфицировать с помощью записи filedate, определяемой в программе следующим образом:

fdate record year:7, month: 4, day:5

Ключевое слово record говорит о том, что имя fdate относится к записи, а мнемонические обозначения year, month и day являются произвольными именами отдельных битовых полей описываемого слона.

Включение в программу описания шаблона битовых полей позволяет отказаться от утомительного и чреватого ошибками определения "вручную" содержимого полного данного по задаваемым значениям его отдельных составляющих. Для приведенной выше записи объявления конкретных переменных будут выглядеть следующим образом:

filel fdate <5,6,7> ;7 июня 1985г.


file2 fdate <18,12,30> ;30 декабря 1998г.


file3 fdate <> ;"Пустая" (пока) переменная

Переменная filel будет определена, как число 0AC7h, file2 - как число 259Eh, а fileЗ - как число 0000h. При необходимости программного заполнения переменной типа fdate можно пользоваться именами ее составляющих, которые трактуются ассемблером, как индексы соответствующих битовых полей, отсчитываемые от младшего конца слова. Для приведенного примера day=0, month=5, a year=9. Однако в системе команд МП 86 практически нет средств работы с битовыми полями. Поэтому программное заполнение придется осуществлять с помощью команд сдвигов и логического сложения:

mov flle3,30 ;Помещаем день


mov AX,12 ;Месяц пока в АХ


mov CL,month ;Будем сдвигать на month бит


shl AX,CL ; Сдвинули месяц в АХ на 5 бит


or file3,AX ;Добавили биты месяца в file3


mov AX, 18 ;Год пока в АХ


mov CL,month ;Будем сдвигать на year бит


shl AX,CL ;Сдвинули год в АХ на 9 бит


or file3,AX ;Добавили биты года в file3

В итоге в переменной file3 окажется тот же код 259Eh, что и в переменной file2.

 




- Начало -  - Назад -  - Вперед -



Книжный магазин