Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
2 курс / Лекции / Лекция 22 - Сложные типы данных.ppt
Скачиваний:
41
Добавлен:
18.02.2023
Размер:
277.5 Кб
Скачать

Структуры

Структура – это тип данных, состоящий из фиксированного числа элементов различных типов.

Для использования структур в программе необходимо выполнить три действия:

Задать шаблон структуры.

Определить экземпляр структуры.

Организовать обращение к элементам структуры.

Структуры

Описание шаблона структуры имеет вид: имя_структуры STRUC

<описание полей> имя_структуры ENDS

Здесь <описание полей> представляет собой последовательность описания данных db, dw, dd и т.д.

Пример описания структуры СТУДЕНТ student STRUC

fio

db

30 dup(“ “)

year

db

0

rate

db

0

student ENDS

Структуры

Для описания переменных структурного типа на языке Ассемблер используется следующая синтаксическая конструкция:

[имя_переменной] имя_структуры <[список_значений]>

имя_переменной – идентификатор переменной данного структурного типа (если имя не указано, то просто будет выделен блок памяти для хранения значения).

список_значений – заключенный в угловые скобки список начальных значений элементов структуры, разделенных запятыми. Если список указан не полностью, то все поля структуры для данной переменной инициализируются значениями из шаблона.

Пример:

st1

student <‘Ivanov Ivan’, 1, 7>

st2

student <‘Petrov Petr’, 2, 8>

st3

student <>

arr_st

student 10 dup(<>)

 

 

 

Структуры

Для доступа к отдельным элементам (полям) структуры в программе используется следующая синтаксическая конструкция:

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

Здесь:

адресное_выражение – идентификатор переменной некоторого структурного типа или выражение в скобках в соответствии с правилами:

[

Имя регистра

+

]

 

 

Константа

 

 

-

 

 

 

(

Имя переменной

+

)

 

 

Константа

 

 

-

 

 

 

имя_поля_структуры – имя поля из шаблона структуры Таким образом оператор вычисляет выражение: (адресное_выражение)+(имя_поля_структуры)

Структуры

Пример обращения к полям структуры:

Первый способ:

mov al, byte ptr st1.year

Второй способ:

lea

bx, st2

mov

al, byte ptr [bx].year

 

 

Структуры

Пример: вывести на экран список студентов средний балл которых больше или

 

равен 6:

 

student STRUC

 

 

student ENDS

 

 

st_list student

10 dup(<>)

 

 

mov

bx, 32

 

lea

di, st_list

 

mov

cx, 10

cycl:

 

 

mov

al, byte ptr [di].rate

 

cmp

al, 6

 

jl

next0

 

;вывод значения на экран

next0:

 

 

add

di, 32

 

loop

cycl

 

 

 

Структуры

Копирование одной структуры в другую (целиком или только часть) осуществляется с помощью команд пересылки строк: movsb, movsw или movsd

Пример копирования структурной переменной st1 в структурную переменную st3:

mov

si, offset st1

mov

di, offset st2

mov

cx, 32

rep movsb

Объединения

Объединение – тип данных, позволяющий трактовать одну и туже область памяти как имеющую разные типы и имена.

Описание объединения осуществляется практически также, как и описание структур:

имя_объединения UNION <описание полей> имя_объединения ENDS

Объединения

Пример:

mystruc STRUC pole1 dw 0 pole2 dw 0 mystruc ENDS

myunion UNION val1 dd 0 val2 mystruc<> myunion ENDS

Пример описания переменной:

un1 myunion <>

arr_un myunion 10 dup(<>)

Обращение к полям объединения осуществляется аналогично обращению к полям структуры:

mov

eax, un1.val1

mov

un1.val2.pole1, ax

Пример

Пользователь с клавиатуры вводит список студентов. О каждом студенте вводится следующая информация: ФИО (строка 30 символов), курс и средний балл (целые числа размером 1 байт). Вывести на экран записи о студентах, средний балл которых не менее 6.

include \masm32\include\masm32rt.inc student STRUC

fio

db

30 dup(0)

year

db 0

rate

db

0

student ENDS