Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ida.final.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
6 Mб
Скачать

Success MakeArray(long ea,long nitems)

Функция создает массив состоящий из данных одного типа – байтов, слов, двойных слов, четверных слов, двойных слов в формате float, четверных слов в формате double, packed real, tbyte. Бестиповые байты могут стать частью массива любого типа. Строки не могут быть элементами никакого массива.

Тип массива определяется типом его первого элемента. Все остальные элементы массива на момент его создания должны быть представлены бестиповыми байтами, - последовательность типизированных данных не может быть преобразована в массив.

Элементы массива записываются в строку, отделяясь друг от друга знаком запятой. Если два или более подряд идущих элемента имеют одно и то же значение (в том числе и неинициализированное) для сокращения ассемблерного листинга используется конструкция “DUP”.

Аргумент ea задает линейный адрес первого элемента массива или линейный адрес начала цепочки бестиповых байт.

Аргумент nitems задает размер массива, выраженный в количестве элементов. Массив создается даже в том случае, когда nitems равен единице.

Пример использования:

seg000:0000 db 48h ; H

seg000:0001 db 65h ; e

seg000:0002 db 6Ch ; l

seg000:0003 db 6Ch ; l

seg000:0004 db 6Fh ; o

seg000:0005 db 2Ch ; ,

seg000:0006 db 20h ;

seg000:0007 db 53h ; S

seg000:0008 db 61h ; a

seg000:0009 db 69h ; i

seg000:000A db 6Ch ; l

seg000:000B db 6Fh ; o

seg000:000C db 72h ; r

a) исходные данные

MakeArray(SegByName(“seg000”),14);

b) вызываем функцию MakeArray для преобразования последовательности бестиповых байт в массив байт

seg000:0000 db 48h, 65h, 2 dup(6Ch), 6Fh, 2Ch, 20h, 53h, 61h, 69h

seg000:0000 db 6Ch, 6Fh, 72h, 0

с) результат – успешно созданный массив.

Внимание: если все элементы массива не умещаются на одной строке, они автоматически переносятся на следующую, но слева от них указывается не адрес данного элемента массива, а адрес головы массива!

Замечание: для изменения размеров массива (усечения или расширения) достаточно передать функции адрес его начала и новую длину.

??? #Верстальщику – change table

аргумент

пояснения

ea

линейный адрес первого элемента массива или линейный адрес головы уже существующего массива

nitems

размер массива, выраженный в количестве элементов

return

=return

пояснения

==1

успешное завершение операции

==0

ошибка

Родственные функции: нет

Интерактивный аналог: “~Edit\Array”; <*>

Success MakeAlign(long ea,long count,long align)

Функция помещает в ассемблерный файл директиву выравнивания align и исключает из дизассемблируемого листинга байты, используемые для выравнивания.

Замечание: микропроцессоры серии Intel 80x86 используют выравнивание используется для ускорения доступа к данным и инструкциям (подробнее об этом можно технической документации фирмы Intel), но существуют процессоры, которые требуют обязательного выравнивания и при обращении к не выровненным данным (инструкциям) генерируют исключение.

Аргумент ea задает линейный адрес первого байта, использующегося для выравнивания. Если по этому адресу расположен хвост элемента данных, голова или хвост элемента кода, функция возвратит ошибку.

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

Аргумент align задает кратность выравнивания и представляет собой показатель степени с основанием два. Т.е. если align равен четырем, то кратность выравнивания – шестнадцати, т.к. 24=16. Если align равен нулю, функция определяет необходимую степень выравнивания автоматичен, используя наибольшее возможное значение.

Для изменения величины выравнивания достаточно передать функции MakeAlign линейный адрес уже существующей директивы Align и новые значения count и align.

Пример использования:

seg000:0000 db 48h ; H

seg000:0001 db 65h ; e

seg000:0002 db 6Ch ; l

seg000:0003 db 6Ch ; l

seg000:0004 db 6Fh ; o

a) исходные данные

MakeAlign(SegByName(“seg000”)+1,3,2);

b) вызываем функцию MakeAlign для помещения по адресу seg000:0001 директивы align 4. Для выравнивания используются три байта – seg0001, seg0002 и seg0003.

seg000:0000 db 48h ; H

seg000:0001 align 4

seg000:0004 db 6Fh ; o

c) результат – успешное создание директивы выравнивания

??? #верстальщику – change table

аргумент

пояснения

ea

линейный адрес первого байта, использующегося для выравнивания или уже существующей директивы align

count

число байт, использующихся для выравнивания

align

=align

пояснения

==[1..5]

показатель степени выравнивания с основанием два

==0

автоматическое определение кратности выравнивания

return

=return

пояснения

==1

успешное завершение операции

==0

ошибка

Родственные функции: нет

Интерактивный аналог: “~Edit\Structs\Other\ Create alignment directive”;<L>

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]