Лекции.Орг


Поиск:




Категории:

Астрономия
Биология
География
Другие языки
Интернет
Информатика
История
Культура
Литература
Логика
Математика
Медицина
Механика
Охрана труда
Педагогика
Политика
Право
Психология
Религия
Риторика
Социология
Спорт
Строительство
Технология
Транспорт
Физика
Философия
Финансы
Химия
Экология
Экономика
Электроника

 

 

 

 


Конструкции сравнения и повтора




Компилятор MASM

MASM создан специально для написания программ на ассемблере для Win32. В нём есть макросы и специальные директивы для упрощения программирования.

Функции.

Основное преимущество MASM это макрос invoke, он позволяет вызывать API функции по-обычному с проверкой количества и типа параметров. Это почти тот же call, как в TASM, но этот макрос проверяет количество параметров и их типы. Вот так вызывается функция:

Invoke <функция>, <параметр1>, <параметр2>, <\параметр3>

Чтобы использовать invoke для вызова процедуры, вы должны определить ее прототип:

PROTO STDCALL testproc:DWORD,:DWORD,:DWORD

Эта директива объявляет процедуру, названную testproc, которая берет 3 параметра размером DWORD.

Теперь, если вы сделаете это...

invoke testproc, 1, 2, 3, 4...

masm выдаст вам ошибку потому, что процедура testproc берет 3 параметра, а не 4. Masm также имеет контроль соответствия типов, т.е. проверяет, имеют ли параметры правильный тип (размер).

В invoke вы можете использовать ADDR вместо OFFSET. Это сделает адрес в правильной форме, когда код будет собран.

testproc PROTO STDCALL:DWORD,:DWORD,:DWORD.codetestproc proc param1:DWORD, param2:DWORD, param3:DWORD....rettestproc endp

Это создает процедуру, названную testproc, с тремя параметрами. Прототип используется, invoke. Все параметры можно использовать в коде процедуры, они автоматически извлекутся из стека. Также в процедурах можно использовать локальные переменные.

testproc proc param1:DWORD, param2:DWORD, param3:DWORDLOCAL var1:DWORDLOCAL var2:BYTEmov ecx, param1mov var2, clmov edx, param2mov eax, param3mov var1, eaxadd edx, eaxmul eax, ecxmov ebx, var1.IF bl==var2xor eax, eax.ENDIF rettestproc endp

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

Конструкции сравнения и повтора.

If - Она имеет тот же самый синтаксис, что и в TASM.

Repeat - Эта конструкция выполняет блок, пока условие не истинно:

.REPEAT; код здесь.UNTIL eax==1

Эта конструкция повторяет код между repeat и until, пока eax не станет равным 1.

While - Конструкция while это инверсия конструкции repeat. Она выполняет блок, пока условие истинно:

.WHILE eax==1; код здесь.ENDW

Вы можете использовать директиву.BREAK, чтобы прервать цикл и выйти.

.WHILE edx==1inc eax.IF eax==7.BREAK.ENDIF.ENDW

Если eax=7, цикл while будет прерван.

Директива continue осуществляет переход на код проверяющий условие цикла в конструкциях repeat и while.

Теперь наша первая программа видоизменяется следующим образом:

.486.model flat, stdcall option casemap:none includelib.\masm32\lib\kernel32.lib includelib.\masm32\lib\user32.libMessageBoxA PROTO STDCALL:DWORD,:DWORD,:DWORD,:DWORDExitProcess PROTO STDCALL:DWORD.data ttl db '11111',0.codestart: invoke MessageBoxA,0,offset ttl,offset ttl,0 invoke ExitProcess,0end start

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

Прототипы каждой из библиотек есть в одноимённых включаемых файлах в папке include. Теперь не надо писать прототипы функций самому, они уже есть:

includelib.\masm32\lib\kernel32.lib includelib.\masm32\lib\user32.lib include.\masm32\include\kernel32.inc include.\masm32\include\user32.inc

В этих включаемых файлах определены функции без букв A или W в конце. Теперь не надо указывать эти буквы в конце.

Директива option нужна для задания некоторых настроек компиляции. Опция casemap задаёт чувствительность к регистру символов. Мы указали none, тем самым установили чувствительность к регистру символов. Это надо, для того чтобы избежать конфликтов включаемых файлов от разных авторов.





Поделиться с друзьями:


Дата добавления: 2015-10-01; Мы поможем в написании ваших работ!; просмотров: 375 | Нарушение авторских прав


Поиск на сайте:

Лучшие изречения:

Даже страх смягчается привычкой. © Неизвестно
==> читать все изречения...

2421 - | 2132 -


© 2015-2024 lektsii.org - Контакты - Последнее добавление

Ген: 0.01 с.