Структура программы на masm

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

Общая структура программы.

.386p ;тип процессора .model flat, stdcall ; модель памяти и вызова подпрограмм ;объявление включаемых (заголовочных) файлов, макросов, макроопределений, ; также внешних определений .data ; Инициализированные данные .data? ; неинициализированные данные .const ; константы .code ; исполняемый код End «метка точки входа»

Процессоры могут быть 386, 486, 586, обычно всегда стоит 386p, но ничто вам не мешает поставить 486p или 586.

Модель памяти всегда flat и никакой другой не может быть. Вызов подпрограмм обычно всегда stdcall, стандарт вызова почти всех API функций. Секция .data секция с инициализированными данными она включается в исполняемый файл. Секция .data? секция с неинициализированными данными, она не включается в исполняемый файл и появляется только тогда, когда программа загружается в память.

Урок 17. Язык ассемблера. Основы

Секция .const секция констант. Секция .code содержит исполняемый код программы. В конце программы всегда должно стоять слово end, которая задаёт точку входа программы, т.е. место с которого начнётся выполняться программа. Секции .data, .data? имеют полный доступ. Разумеется, секции .const и .code имеют атрибут доступа — только чтение.

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

При программировании под Win32 мы не имеем доступ к портам ввода вывода и не можем вызывать прерывания (самые главные команды в DOS), у нас есть только WIN API, которые экспортируют системные библиотеки. Вызывая API функцию, вы просто передаёте управление точке входа функции (точка входа функции это первая инструкция функции), сама функция находится где-то в памяти вашего процесса внутри некоторой библиотеки. API функции находятся в библиотеках kernel32.dll, user32.dll, gdi32.dll (классика) advapi32.dll и т.д., для того чтобы использовать некоторую функцию этих библиотек надо сначала загрузить нужную библиотеку в свою память, либо включить используемые функции в таблицу импорта и тогда загрузчик загрузит библиотеки за вас. О kernel32.dll можно не волноваться, потому что эта библиотека есть в каждом процессе в любом случае, тем более она там существует ещё до запуска главной нити процесса, она даже проецируется в вашу память всегда по одинаковым адресам. Как я уже говорил все функции, используют модель вызова stdcall, а значит, параметры подпрограмме передаются «задом-на-перёд» и вызываемый очищает стек. Общий вид вызова API функции будет такой:

Push параметр 3 Push параметр 2 Push параметр 1 Call функция ; если быть точнее то здесь должен стоятб ажрес функции ; т.е. адрес её точки входа

Каждая программа в Win32 в конце своего выполнения ОБЯЗАТЕЛЬНО должна вызвать функцию ExitProcess. Сами подумайте, после выполнения последней инструкции программы, дальше идёт пустота, даже если там что-то осмысленное, все равно у выделенной памяти есть конец, а после конца идёт невыделенная (т.е. несуществующая) память. Процессор начнёт выполнять непоймёшь чё, пойдут глюки, и ваша программа даст в конце хорошо всем знакомый звук — «ДУНГ». А это уже бессмыслица. Вот определение ExitProcess из MS SDK:

Современный ассемблер masm 64. Урок 1 Часть 1.


VOID ExitProcess( UINT uExitCode // exit code for all threads );

uExitCode — это значение никогда не используется и всегда равно 0.

Первая программа.

Теперь я приведу вам программу, которая выводит легендарное сообщение «Hello, World!».

.386 .model flat extrn ExitProcess:PROC extrn MessageBoxA:PROC .data Ttl db «First ASSEMBLER program»,0h Msg db ‘Hello, World. ‘,0h .code start: push 0h push offset Msg push offset Ttl push 0h call MessageBoxA push 0h call ExitProcess end start

Структура программы на masm

Рассылка закрыта

Вы можете найти рассылки сходной тематики в Каталоге рассылок.

Читайте также:
В отношении является разновидностью находятся объекты программа память принтер сканер ответ

Автор Гость

Статистика

5.733 подписчиков
за неделю

Программирование на Ассемблере (masm32) под Windows. #1

—————————————————————————- —- EAX=00005305 EBX=C4920074 ECX=C14698E4 EDX=00000000 ESI=C1476EC0 EDI=C49202B0 EBP=67890000 ESP=C4687E2C EIP=000080D2 o d I s z a P c CS=0128 DS=0030 SS=0030 ES=0030 FS=0078 GS=0030 —————————————————byte——————-PRO T16- 0030:00000000 9E 0F C9 D8 65 04 70 00-16 00 C9 09 65 04 70 00 . e.p. e.p. 0030:00000010 65 04 70 00 54 00 FF F0-58 7F 00 F0 FF E7 00 F0 e.p.T. 0030:00000020 00 00 00 C9 D2 08 A3 0A-6F EF 00 F0 6F 00 F0 00 . o. o.. 0030:00000030 6F EF 00 F0 6F EF 00 F0-9A 00 C9 09 65 04 70 00 o. o. e.p. ——Cancel_Call_When_Idle+002C——————————————PRO T16- 0128:80D1 POPF 0128:80D2 CLS 0128:80D3 RETF 0128:80D4 POPF 0128:80D5 STC 0128:80D6 RETF 0128:80D7 CMP AL,13 0128:80D9 NOP 0128:80DA NOP 0128:80DB JBE 80E1 —————————————————————————- —- :rs :g WINICE: Free32 Obj=01 Mod=NOTEPAD WINICE: Free32 Obj=02 Mod=NOTEPAD WINICE: Free32 Obj=03 Mod=NOTEPAD WINICE: Free32 Obj=04 Mod=NOTEPAD WINICE: Free32 Obj=05 Mod=NOTEPAD WINICE: Free16 Sel=351F :X —————————————————————————- —- X, XFRAME, XG, XP, XRSET, XT KERNEL32 —————————————————————————- —-

nbsp Поэкспериментируйте с разными командами, не бойтесь чего-нибудь испортить. Только перед этим сохраните все не сохраненные файлы. Очень важно освоиться в SoftICE, преодолеть страх перед ним. Я знаю людей, у которых при одном упоминании о нем шевелятся волосы, как при воспоминании о ночном кошмаре. Однако SoftICE — это очень мощный, удобный и приятный инструмент программиста.

Думаю, что к концу курса вы полюбите его настолько, что любая машина без него будет казаться вам неполноценной.
X;»

SET FONT 2;LINES 40;WD 4;FAULTS OFF;X;»

nbsp Таких ошибок у вас будет много, поэтому очень неудобно, если отладчик будет всплывать всякий раз, когда произойдет GPF. Включить эту функцию обратно можно командой FAULTS ON.
глюк»: после выхода из отладчика курсор мыши начинает скакать по экрану, как сумасшедший, запускает ярлыки, изменяет размеры окон. Управлять мышью становится совершенно невозможно. Остается только перезагрузить компьютер. Если оставить строку PHYSMB без изменений, то такой «глюк» все равно случается, но гораздо реже.
Examples of export symbols that can be included for Windows 95″. Удалите комментарии (точку с запятой) со всех строк, которые расположены ниже. В них прописаны пути к системным DLL. Это необходимо сделать для того, чтобы SoftICE всегда загружал таблицы экспорта системных DLL. Объясню на примере, зачем это нужно.

Допустим, мы вызываем функцию MessageBoxA. В дизассемблированном виде в SoftICE ее вызов будет выглядеть примерно так:

call 0044F2A1

nbsp Измените диск и пути, если Windows на вашем компьютере установлен в другую папку, нежели С:Windows.
nbsp Основная задача Symbol Loader — загружать в SoftICE символьную отладочную информацию, чем мы сейчас и займемся. Запустите Symbol Loader, выберите пункт меню File-Open Module и найдите файл testdb.exe, который вы должны были сохранить в каталоге C:masm32win32asmTestdb. Появится сообщение:

C:masm32win32asmTestdbtestdb.exe opened successfully

nbsp Это означает, что символьная информация нормально загрузилась и приложение можно отлаживать. Если вы не увидели комментария, попробуйте понажимать клавишу F3, которая переключает окно для отображения кода в дизассемблированном и смешанном виде. После этого загрузите модуль снова.
nbsp Сохраните его в каталоге MASM32BIN и пропишите в переменной окружения PATH путь к каталогу, куда установлен SoftICE, и путь к директории MASM32BIN. В Windows 9x это можно сделать в файле Autoexec.bat таким образом:

SET PATH = %PATH%;C:MASM32BIN;C:PROGRA~1NUMEGADRIVER~1SOFTICE;

  • Том Сван. Освоение Turbo Assembler. Второе издание. Киев, Москва, Санкт-Петербург: Диалектика, 1996.
  • В.Юров, С.Хорошенков. Assembler. Санкт-Петербург, Москва, Харьков, Минск: Питер, 1999.
  • В.Григорьев. Микропроцессор i486. Архитектура и программирование. В 4-х книгах. М.: Гранал, 1993.
  • С.Зубков. Assembler для DOS, Windows и UNIX. М.: ДМК, 2000.
  • Г.Майко. Assembler для IBM PC. М.: Бизнес-Информ, 1997.

01 .386 02 .model flat, stdcall 03 option casemap: none 04 include masm32includewindows.inc 05 include masm32includeuser32.inc 06 includelib masm32libuser32.lib 07 .data 08 szMessage byte «Hello, world!», 0 09 szCaption byte «Caption», 0 10 .code 11 start: 12 push MB_OK 13 push offset szCaption 14 push offset szMessage 15 push NULL 16 call MessageBoxA 17 ret 18 end start

Читайте также:
Программа исправить ошибки Андроид

out.txt masm32binlink.exe /SUBSYSTEM:WINDOWS first.obj >> out.txt

Что такое объектный файл?» Слово «объектный» в данном случае не имеет никакого отношения к объектно-ориентированному программированию. Создание приложения состоит минимум из двух операций — трансляции (ассемблирования) и компоновки (связывания).

На этапе трансляции происходит перевод ассемблером исходного текста в машинные инструкции и данные, которые записываются в объектный файл с расширением .obj. Объектные файлы могут иметь различный формат.

Windows поддерживает два формата: OMF (Object Module Format — старый формат, разработанный корпорацией Intel, в котором до сих пор создает объектный код Turbo Assembler) и COFF (Common Object Format — новый формат, разработанный корпорацией Microsoft). В итоге после выполнения команд в первой строке нашего bat-файла, мы получаем файл first.obj.

Но для того чтобы создать из него полноценное приложение, которое можно запустить на исполнение, мы должны создать исполняемый файл, то есть в данном случае exe-файл. Для этого воспользуемся специальной программой — компоновщиком, или, как еще говорят, линкером. Линкер запускается с ключом /SUBSYSTEM:WINDOWS, который означает, что мы создаем оконное графическое приложение. Если бы мы создавали консольное приложение, которое работает в текстовом режиме в окне сеанса MS-DOS, то мы бы так и написали /SUBSYSTEM:CONSOLE.
nbsp Многие программисты создают свои библиотеки кода, ассемблируя исходные тексты, но не компонуя полученные объектные файлы, а собирая в другие файлы — библиотеки, которые имеют расширение .lib. Кстати говоря, ни MASM, ни TASM, в отличие от компиляторов языков высокого уровня, не поставляются вместе с программной библиотекой.

Например, для Visual Basic 6.0 библиотекой является msvbvm60.dll («виртуальная машина Microsoft Visual Basic 6.0»), для MS VC++ — msvcrt.dll («ран-тайм библиотека для Microsoft Visual C++») и некоторые другие файлы. А программистам на ассемблере остается только самим создавать программные библиотеки. Но в общем-то вам не придется много работать в этом направлении, так как команда MASM32 распространяет пакет вместе с готовой библиотекой MASM32.LIB. Мы в процессе обучения дополнять ее не будем, чтобы не портить ее первозданный вид, но будем создавать свою.
Hello, world!». Если вы не знаете, то по традиции, которую ввел создатель языка С Дэннис Ричи, изучение нового языка программирования начинается с создания программы, которая каким-то образом приветствует мир, сообщая о своем успешном рождении.

Возможно, что у вас ничего не получилось, о чем я сейчас толковал. Вы запустили make.bat, но никакого first.exe не увидели. Это даже очень вероятно, если вы не схитрили и набирали текст программы вручную, а не скопировали. Рекомендую вам все-таки набирать текст, поскольку так вы быстрее запомните необходимые команды. При наборе текста ошибка очень вероятна.

Тогда откройте файл out.txt и посмотрите, какие сообщения об ошибках написали ассемблер с линкером. Исправьте их и попробуйте снова. Кстати, про out.txt. Он довольно полезен, когда ошибок так много, что они не помещаются в окне MS-DOS, которое не прокручивается. Поэтому я рекомендую процесс ассемблирования и компоновки протоколировать таким образом.

Между прочим, чаще всего бывают важны именно первые ошибки, которые обычно и вылезают за пределы окна MS-DOS. Исправив первые ошибки, можно избавиться от всех остальных, которые возникли благодаря им.
out.txt masm32binlink.exe /SUBSYSTEM:WINDOWS /DEBUG /DEBUGTYPE:CV first.obj >> out.txt

Источник: subscribe.ru

Разработка программы в среде MASM

Разработка программы в среде MASM — это разработка программы на языке макроассемблера.

Общие сведения о языках программирования

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

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

Читайте также:
Программа запускается в трее

Сдай на права пока
учишься в ВУЗе
Вся теория в удобном приложении. Выбери инструктора и начни заниматься!

Все языки программирования, как правило, могут относиться к машинно-независимым или машинно-ориентированным языкам. К машинно-независимым следует отнести Си, Си++, Паскаль и другие. С их помощью можно довольно оперативно формировать достаточно сложные программы. А в тех случаях, когда нужно создать самый компактный машинный код и сформировать наиболее быстродействующие программы, следует использовать машинно-ориентированные языки. Они взаимодействуют непосредственно с ячейками памяти и доступными программно компонентами микропроцессора.

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

«Разработка программы в среде MASM»
Готовые курсовые работы и рефераты
Решение учебных вопросов в 2 клика
Помощь в написании учебной работы

Разработка программы в среде MASM

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

  1. Программы, которые требуют максимальной скорости исполнения, такие как, главные элементы компьютерных игр, ядра операционных систем реального времени, а также критичные по времени фрагменты программ.
  2. Программы, которые взаимодействуют с внешними устройствами, то есть, это драйверы, программы, взаимодействующие напрямую с портами, звуковыми и видео платами.
  3. Программы, которые используют полностью имеющиеся возможности процессора, такие как, ядра многозадачных операционных систем, серверы.
  4. Программы, которые полностью используют возможности операционной системы, а именно, это вирусы, антивирусные программы, программы защиты от несанкционированного доступа, программы обхода защиты от несанкционированного доступа.

К числу достоинств языка ассемблера можно отнести следующие моменты:

  1. Наличие максимальной оптимизации программ, как по скорости исполнения, так и по размерам.
  2. Наличие максимальной адаптации под соответствующий процессор.

К числу недостатков языка ассемблера необходимо причислить следующие аспекты:

  1. Существенная трудоемкость составления программ, которая значительно больше, чем в языках высокого уровня.
  2. Наличие трудоемкости чтения программ.
  3. Наличие непереносимости на другие платформы, кроме совместимых платформ.
  4. Язык ассемблера является малопригодным для совместных проектов.

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

  • операционной части, которая определяет, что следует сделать,
  • операндной части, которая определяет объекты обработки.

Машинная команда микропроцессора, которая записана на языке Ассемблера, является одной строкой, следующего вида:

$[метка]$ команда/директива $[операнд(ы)]$ ;комментарии

Метка, если она есть, команда/директива и операнд, если он есть, должны разделяться по крайней мере одним символом пробела или табуляции.

Программа, которая написана на ассемблере MASM (Microsoft Macro Assembler), может иметь несколько частей, именуемых модулями, в каждом из которых можно определить один или ряд сегментов данных, стека и кода. Каждая законченная программа на ассемблере обязана иметь один главный, или базовый, модуль, с которого начинается ее исполнение. В модуле могут содержаться программные сегменты, сегменты данных и стека, которые были объявлены с помощью определенных директив. Помимо этого, перед объявлением сегментов следует указывать модель памяти с помощью директивы .MODEL.

Приведем пример «ничего не делающей» программы:

.MODEL FLAT, STDCALL

В этой программе присутствует всего одна команда микропроцессора. Эта команда RET. Она должна обеспечить правильное окончание работы программы. В общем варианте данная команда применяется для выхода из процедуры.

Источник: spravochnick.ru

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru