На главную  Программирование на Ассемблере в Fasm  Операционные Системы  Написать Автору  Полезные ссылки



Для поиска введите икомое слово в текстовое поле и нажмите Enter:


Переменные.

db — резервирование памяти для данных размером 1 байт. Директивой db можно задавать следующие значения: выражение или константу, принимающую значение из диапазона: для чисел со знаком –128...+127; для чисел без знака 0...255; 8-битовое относительное выражение, использующее операции HIGH и LOW; символьную строку из одного или более символов. Строка заключается в кавычки. В этом случае определяется столько байт, сколько символов в строке.
dw — резервирование памяти для данных размером 2 байта. Директивой dw можно задавать следующие значения: выражение или константу, принимающую значение из диапазона: для чисел со знаком –32 768...32 767; для чисел без знака 0...65 535; выражение, занимающее 16 или менее бит, в качестве которого может выступать смещение в 16-битовом сегменте или адрес сегмента; 1- или 2-байтовую строку, заключенная в кавычки.
dd — резервирование памяти для данных размером 4 байта. Директивой dd можно задавать следующие значения: выражение или константу, принимающую значение из диапазона: для i8086: для чисел со знаком –32 768...+32 767; для чисел без знака 0...65 535; для i386 и выше: для чисел со знаком –2 147 483 648...+2 147 483 647; для чисел без знака 0...4 294 967 295; относительное или адресное выражение, состоящее из 16-битового адреса сегмента и 16-битового смещения; строку длиной до 4 символов, заключенную в кавычки.
df  — резервирование памяти для данных размером 6 байт;
dp — резервирование памяти для данных размером 6 байт.
Директивами df и dp можно задавать следующие значения: выражение или константу, принимающую значение из диапазона: для i8086: для чисел со знаком –32 768...+32 767; для чисел без знака 0...65 535; для i386 и выше: для чисел со знаком –2 147 483 648...+2 147 483 647; для чисел без знака 0...4 294 967 295; относительное или адресное выражение, состоящее из 32 или менее бит (для i80386) или 16 или менее бит (для младших моделей микропроцессоров Intel); адресное выражение, состоящее из 16-битового сегмента и 32-битового смещения; константу со знаком из диапазона –247...247–1; константу без знака из диапазона 0...248-1; строку длиной до 6 байт, заключенную в кавычки.
dq — резервирование памяти для данных размером 8 байт. Директивой dq можно задавать следующие значения: выражение или константу, принимающую значение из диапазона: для МП i8086: для чисел со знаком –32 768...+32 767; для чисел без знака 0...65 535; для МП i386 и выше: для чисел со знаком –2 147 483 648...+2 147 483 647; для чисел без знака 0...4 294 967 295; относительное или адресное выражение, состоящее из 32 или менее бит (для i80386) или 16 или менее бит (для младших моделей микропроцессоров Intel); константу со знаком из диапазона –263...263–1; константу без знака из диапазона 0...264–1; строку длиной до 8 байт, заключенную в кавычки.
dt — резервирование памяти для данных размером 10 байт. Директивой dt можно задавать следующие значения: выражение или константу, принимающую значение из диапазона: для МП i8086: для чисел со знаком –32 768...+32 767; для чисел без знака 0...65 535; для МП i386 и выше: для чисел со знаком –2 147 483 648...+2 147 483 647; для чисел без знака 0...4 294 967 295; относительное или адресное выражение, состоящее из 32 или менее бит (для i80386) или 16 или менее бит (для младших моделей); адресное выражение, состоящее из 16-битового сегмента и 32-битового смещения; константу со знаком из диапазона –279...279-1; константу без знака из диапазона 0...280-1; строку длиной до 10 байт, заключенную в кавычки; упакованную десятичную константу в диапазоне 0...99 999 999 999 999 999 999.
Прототип использования:
[имя_переменной] [размер_даннах] [значение]
Пример использования :
Perem1 db 0
STR db 'Привет всем!'
Perem2 dd 12345
Perem3 dq 134567890
Perem4 dt 123456

Вызов API Функций.

Программирование в виндовс состоит из вызова API функций и создания своих функций,которые можно поместить прямо в программе,а можно запихнуть в свою DLL библиотеку(тогда их можно использовать много раз(что и делают ленивые работники Мелкософта)).

Вызывается функция так:

invoke procedure, параметр_1, параметр_2, параметр_3

Или так:

push параметр_3
push параметр_2
push параметр_1
call [procedure}

Вообще-то даже если вы используете первый метод(он намного удобней),всё равно комилятор FASM вызовет функцию вторым способом(так решил добрый дадя из Мелкософта,одобривший метод STDCALL).

Кстати каждая Windows программа вызывает хотя-бы одну функцию.Обычно это функция ExitProcess в Win9X,NT и ExitThread в WindowsCE. 

Макрокоманды(макросы).

Это такая  полезная вешь!Представьте что вам надо использовать примерно такой код:

mov eax,9245
mov ebx,3456
mov ecx,7654
add eax,ebx
sub eax,ecx

Вроде-бы ничего такого,но если похожий фрагмент только с другими значениями встречается в вашей программе раз сто?Вот тут с вами и случитися апоплексический удар.
Конечно вы можете создать свою функцию:
proc Вычисления, параметр1,параметр2,параметр3
        mov eax,[параметр1]
        mov ebx,[параметр2]
        mov ecx,[параметр3]
        add eax,ebx
        sub eax,ecx
        return
endp
Вызвать её:
invoke Вычисления, параметр1,параметр2,параметр3
И получить результат в EAX.

Но!Постоянные вызовы функций - это тактика программиста на VisualBASIC,но не Ассемблера.Ведь это постоянные вызовы функций командой CALL и возвращения - RET(мы везде будем загружать процессор двумя(!) лишними инструкциями(2x100 вызовов=200 лишних инструкций )).

А если мы сделаем так:
macro Вычисления параметр1,параметр2,параметр3
 {
   mov eax,параметр1
      mov ebx,параметр2
      mov ecx,параметр3
      add eax,ebx
      sub eax,ecx
                    }

Теперь мы пишем в тексте программы:
Вычисления 9245,3456,7654
А копмпилятор сам пишет:

      mov eax,9245
      mov ebx,3456
      mov ecx,7654
      add eax,ebx
      sub eax,ecx

Где вместо параметр1,параметр2,параметр3  компилятор подставляет значения,которые вы ввели(9245,3456,7654).
Надо,пишем:
Вычисления 5,2,6
и т.д.

Как вы понимаете макросы - находка для лентяя.Они настолько могучи, что при их содействии вы можете реализовать почти всё,что вам вздумается.Например реализовать подобие директив языков высокого уровня и т.д.

Структуры

Это такая штука которая вам очень пригодиться.Вот как она выглядит:
struct Чел
 .Вес         dd ?
 .Рост       dd ?
 .Возраст  dd ?
ends

Вася Чел

Теперь вы можете заполннить эту структуру так:
mov [
Вася.Вес],73
mov [Вася.Рост],175
mov [Вася
.Возраст],30

То есть структура похожа на книжный шкаф.Мы знаем что в этом шкафу детективы?Значит мы будем детиктивы искать в шкафу для детективов?Тогда нам не стоит искать произведение Дж.Х.Чейза в шкафу где пылятся мелодраммы.Так и здесь.Есть чел Вася.Мы храним данные о нём в структуре по адрессу Вася.Нужно сохранить данные Пети?

Петя Чел

mov [Петя.Вес],50
mov [Петя.Рост],140
mov [Петя.Возраст],12


Кроме того мы можем сделать так:
struct Чел
 .Вес         dd ?
 .Рост       dd ?
 .Возраст  dd ?
 .Другое    Данные

ends

struct  Данные

 .Клёвый         dd ?
 .Плохой          dd ?

ends

Для заполнения данных о том насколько хорош чел Вася мы пищем:
mov [Вася..Другое.Клёвый],TRUE
mov [Вася..Другое.Плохой],FALSE


Структуры очень полезны и их активно используют как люди из Мелкософта,так и челы из мира Linux(а также любой нормальный кодер).Значит ивы должны их использовать.

Я знаю вы мало что поняли,но через пару месяцев вам эти знания  будут нужны(так что хотя бы два раза перечитайте этот текст когда вам это понадобиться).И помните:
Только практические занятия помогут вам освоить программирование под виндовс!Тут теория - это костыль который поможет вам идти дальше, когда вы захромаете на тяжком программерском пути(но никак не ноги которыми вам надо будет уверенно топать к вершине программерского искуства).Вы должны копировать нужные вам куски кода(из чужих исходняков) и из них лепить свои проги.Со временем вы начнёите писать свои оригинальные процедуры и вам станет намного легче реализовывать различные бредовые идеи которые без сомнения у вас появяться если у вас есть склонность к написанию программ.

Please download this files(If you dont loaded this files):

Желаю успеха,Трудяги!
Страница1 из 2НаверхСтраница2 из 2
Сайт управляется системой uCoz