Программирование на Ассемблере


         

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


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

Имя структуры. Имя поля.

Если адрес структуры задан в регистре, то поле структуры задается в виде [(Имя структуры reg). Имя поля].

Пример. Задан массив с возрастами. Определить возраст самого старшего человека списка

ideal

p386

model   flat

extrn ExitProcess:proc

dataseg

STRUC AGE

day db 1

month db 1

year dw 1980

ends

list  AGE < 3,10>, <1,1,1993>

      AGE  < 1,1, 1989>, <>

count dd 4

old AGE ?

codeseg

begin:

mov eax, offset list

mov bx, [(AGE eax).year]

mov dl, [(AGE eax).month]

mov dh, [(AGE eax).day]

mov ecx, [count]

dec ecx

add eax, 4

for1:

cmp bx, [(AGE eax).year]

jl short next

jg write

cmp dl, [(AGE eax).month]

jl short next

jg short write

cmp dh, [(AGE eax).day]

jle short next

write:

mov bx, [(AGE eax).year]

mov dl, [(AGE eax).month]

mov dh, [(AGE eax).day]

next:

add eax, 4

loop for1

mov [old.year], bx

mov [old.month], dl

mov [old.day], dh

call ExitProcess

end begin

Вариант 2.

Использовать для сравнения целиком всю запись.

ideal

p386

model   flat

extrn ExitProcess:proc

dataseg

STRUC AGE

day db 1

month db 1

year dw 1980

ends

list  AGE < 3,10>, <1,1,1993>, < 1,1, 1989>, <>

count dd 4

old AGE ?

codeseg

begin:

mov eax, offset list

mov ebx, [ eax]

mov ecx, [count]

dec ecx

for1:

add eax, 4

cmp ebx, [ eax]

jle short next

write:

mov ebx, [ eax]

next:

loop for1

mov [dword old], ebx

call ExitProcess

end begin

Пример 2. Составить программу для упорядочивания списка студентов в порядке убывания среднего балла

Способ 1. В запись включить фамилию и оценки - недостаток - размер фамилии может содержать разное число символов - надо выделять память по максимуму.

Способ 2. Записать список фамилий. Адрес каждой фамилии -в запись. Достоинства:

памяти, сколько требуется;

при сортировке перемещается не строка, а ее адрес - уменьшается требуемое время.



Содержание  Назад  Вперед