|
Прежде чем
продолжить разбор этого макро мы сделаем короткое отвлечение на
введение понятия структуры.
Применение директивы STRUC
Структуры представляют собой директивы ассемблера, позволяющие
нам строить сложные форматы данных, состоящие из байтов, слов и
т.д., таким образом, чтобы они имели большую смысловую вырази-
тельность и доступность. Они очень похожи на структуры Си и запи-
си Паскаля. А отличаются они тем, что в МASM индексирование зат-
руднено, вложенность вообще запрещена. В качестве примера,
который мы можем использовать в макросе, передающем параметры,
разрешите предположить, что Вы написали программу, выполняющую
математические функции. Ниже приводится структура, которую Вы
могли бы создать:
- 1-57 -
MathNumbers STRUC
BooLean1 DB (0) ; 1 байт
BooLean2 DB (0) ; 1 байт
ShortInteger1 DW (0) ; 1 слово
ShortInteger2 DW (0) ; 1 слово
LongInteger1 DD (0) ; 1 двойное слово
LongInteger2 DD (0) ; 1 двойное слово
Float1 DT (0) ; 1 10-байтовое слово
; (для 8087)
Float2 DT (0) ; 1 10-байтовое слово
; (для 8087)
MathNumbers ENDS
MathNumbers определяет тип структуры. STRUС и ENDS ограничива-
ют начало и конец описания структуры. Теперь мы можем использо-
вать MаthNumbers для объявления некоторых данных, например, так:
TrueFalse MathNumbers <1,0,,,,,,>
MaxMinShort MathNumbers <,,32767,-32768,,,,>
MaxMinLong MathNumbers <,,,,2147483647,-2147483648,,>
e MathNumbers <,,,,,,,2.718281828>
ListLength = 100
MathList MathNumbers ListLength dup <,,,,,,,>
Память зарезервирована под 104 числа. При 34 байтах под число
наш список чисел займет 3536 байтов. Первоначально структура в
своем описании инициализируется в 0, а затем в секции данных ус-
танавливается в различные значения. Структуры могут рассматри-
ваться как директивы данных, определяемые пользователем.
|