Информационные технологииStfw.Ru 🔍

Win32 Заголовки

🕛 17.09.2009, 12:16
С версией Windows плоского ассемблера появляется пакет стандарт включает разработанный, чтобы помочь в письменной форме программам для
окружающей среды Windows.

Пакет, содержит заголовки для 32-битового Windows
программирование в папке корня и специализированном включает в
подпапки. Вообще, заголовки Win32 включают необходимые специализированные файлы для Вас, хотя иногда Вы могли бы предпочесть включать некоторые из пакетов макроинструкции самостоятельно (так как немногие из них не включены некоторыми или даже всеми заголовками).


Есть шесть заголовков Win32, которые Вы можете выбрать из, с названиями, начинающимися с win32, сопровождаемого или в соответствии с письмом для того, чтобы использовать кодирование ASCII, или в соответствии с письмо w для кодирования WideChar. win32a.inc и win32w.inc - основные заголовки,
win32ax.inc и win32wx.inc - расширенные заголовки, они обеспечивают более продвинутые макроинструкции, те расширения будут обсуждены отдельно. Наконец win32axp.inc и win32wxp.inc - те же самые расширенные заголовки с позволенной особенностью проверки счета параметров в вызовах процедуры.


Вы можете включать заголовки любым путем, Вы предпочитаете, обеспечивая полный путь или используя таможенную переменную окружения, но самый простой метод должен определить ВКЛЮЧАТЬ переменную окружения, должным образом указывающую на справочник, содержащий заголовки, и затем включать их точно так же как:

включайте 'win32a.inc'


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


1. Основные заголовки


Основные заголовки win32a.inc и win32w.inc включают декларации Win32, составляет уравнение и структуры и обеспечивать стандартный набор макроинструкций.



1.1 Структуры


Все заголовки позволяют struct макроинструкцию, которая позволяет определять структуры в пути, более подобном другим ассемблерам чем struc директива. Определение структуры должно быть начато с struct макроинструкции, сопровождаемой названием, и закончилось макроинструкцией концов. В линиях между только определением данных директивы позволены, с лейблами, являющимися чистыми названиями для областей структуры:

struct POINT
x dd ?
y dd ?
ends

С таким определением эта линия:

point1 POINT


объявит point1 структуру с point1.x и point1.y областями, давая им ценности по умолчанию - те же самые как предусмотрено в определении структуры (в этом случае, неплатежи оба некалибруются ценности). Но декларация структуры также принимает параметры, в том же самом счете как число областей в структуре, и те параметры, когда определено, отвергают ценности по умолчанию для областей. Например:

point2 POINT 10,20

калибрует point2.x область с ценностью 10, и point2.y с ценностью 20.

struct макрос не только позволяет, чтобы объявить структуры данного типа, но также и определяет лейблы для погашений областей в структуре и константах для размерного из каждой области и целой структуры. Например вышеупомянутое определение структуры ПУНКТА определяет POINT.x и лейблы POINT.y, чтобы быть погашениями областей в структуре, и sizeof. POINT.x, sizeof. POINT.y и sizeof. УКАЖИТЕ как размеры соответствующих областей и целой структуры. Лейблы погашения могут использоваться для того, чтобы получить доступ к структурам, обращенным косвенно, как:

mov eax, [ebx+POINT.x]



когда регистр ebx содержит указатель, чтобы УКАЗАТЬ структуру. Отметьте, что полевая проверка размера будет выполнена с таким
вызов также.



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

struct LINE
start POINT
end POINT
ends

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


Так как ценность для каждой области - единственный параметр в декларации структуры, чтобы калибровать фундаменты с ценностями обычая, параметры для каждого фундамента должны быть сгруппированы в единственный параметр для структуры:
line1 LINE <0,0>,<100,100>

Вышеупомянутая декларация калибрует каждый из line1.start.x и line1.start.y областей с 0, и каждый из line1.end.x и line1.end.y с 100.



То, когда размер данных, определенных некоторой ценностью, прошел к структуре декларации, меньше чем размер соответствующей области, это дополнено к тому размеру с неопределенными байтами (и когда это больше, ошибка случается). Например:

struct FOO
data db 256 dup (?)
ends

some FOO <"ABC",0>


заполняет первые четыре байта some.data с определенными ценностями и резервирует остальных.



В структурах также могут быть определены союзы и неназванные фундаменты. Определение союза должно начаться с союза и закончиться концами, как в этом примере:

struct BAR
field_1 dd ?
union
field_2 dd ?
field_2b db ?
ends
ends


У каждой из областей, определенных в союзе, есть то же самое погашение, и они разделяют ту же самую память. Только первая область союза калибруется с данной ценностью, ценности для остальной части областей проигнорированы (однако, если одна из других областей требует большей памяти чем первый, союз дополнен к необходимому размеру с неопределенными байтами). Целый союз калибруется единственным параметром, данным в декларации структуры, и этот параметр дает ценность первой области союза.

Assembler   Теги:

Читать IT-новости в Telegram
Информационные технологии
Мы в соцсетях ✉