Методы работы со структурой

Для обращения к полю структуры используется специальный оператор — символ «.» (точка) следующим образом:

адресное__выражение.имя_поля_структуры

Здесь:

адреснов_выражение — идентификатор переменной некоторого структурного типа или выражение в скобках в соответствии с указанными ниже синтаксическими правилами (рис. 12.1);

имя_поля_структуры — имя поля из шаблона структуры. Это на самом деле тоже адрес, а точнее, смещение поля от начала структуры. Таким образом оператор. вычисляет выражение:

(адресное_выражение) + (имя_поля_структуры)

Пусть требуется извлечь в ах значения поля с возрастом. Так как вряд ли возраст трудоспособного человека будет больше величины 99 лет, то после помещения содержимого этого символьного поля в регистр ах его будет удобно преобразовать в двоичное представление командой aad. Будьте внимательны, так как из-за принципа хранения данных «младший байт по младшему адресу» старшая цифра возраста будет помещена в аl, а младшая – в ah. Для корректировки достаточно использовать команду xchg al,ah;

mov ax,word ptr storl.age;в al возраст storl

xchg ah.al

;a можно и так:

lea bx, storl

mov ax,word ptr [bx].age

xchg ah,al

Определение массива из 10 структур типа worker:

mas_str worker 10 dup (<>)

Дальнейшая работа с массивом структур производится так же, как и с одномерным массивом. Здесь возникает вопросы: как определить размер массива и как организовать индексацию элементов массива?

Аналогично другим идентификаторам, определенным в программе, транслятор назначает имени типа структуры и имени переменной с типом структуры атрибут типа. Значением этого атрибута является размер в байтах, занимаемый полями этой структуры. Извлечь это значение можно с помощью оператора type. После того, как стал известен размер экземпляра структуры, организовать индексацию в массиве структур не представляет особой сложности. К примеру:

worker struc

worker ends

mas_str worker 10 dup (<>)

mov bx,type worker;bx=77

lea di,mas_str

;извлечь и вывести на экран пол всех сотрудников:

mov сх,10

cycl:

mov dl,[di].sex

…; вывод на экран содержимого поля sex структуры worker

add di,bx;к следующей структуре в массиве mas_srt

loop cycl

Копирование поля из одной структуры в соответствующее поле другой структуры. Копирование поля nam третьего сотрудника в поле nam пятого сотрудника:

worker struc

worker ends

mas_str worker 10 dup (<>)

mov bx, offset mas_str

mov si,(type worker)*2;si=77*2

add si,bx

mov di,(type worker)*4;s1=77*4

add di,bx

mov cx, 30

rep movsb

На прилагаемой к книге дискете в каталоге.. \lessnl2\struct\ приведена програм­ма, которая осуществляет работу с базой данных о сотрудниках. На ее примере вы можете глубже познакомиться с тем, как организовать работу со структурами в своей программе. Возможно, для читателя имеет смысл и полном объеме иссле-. довать работу этой программы после знакомства с макрокомандами на следую­щем уроке.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: