рефераты конспекты курсовые дипломные лекции шпоры

Реферат Курсовая Конспект

Теоретические сведения

Теоретические сведения - раздел Компьютеры, Темы для предварительной проработки: объекты ядра ОС Windows, API WIN32, MASM   Рассмотрим Пример Консольной Программы Для Ос Windows. ...

 

Рассмотрим пример консольной программы для ОС Windows.

Пример. Программа выводит текст в консоли, ждет 5 секунд и завершает свою работу.

 

.386

.model flat,stdcall

option casemap:none

 

includelib kernel32.lib

include windows.inc

include kernel32.inc

 

.const

 

sTitle db 'Console Application',0

sText1 db 'This Is The Text. Sleeping 5 secs.'

 

.code

 

Lngth PROC

push EBP

mov EBP,ESP

push EAX

cld

mov EDI, dword ptr [EBP+08H]

mov EBX,EDI

mov ECX,100 ; ограничить длину строки

xor AL,AL

repne scasb ; найти символ 0

sub EDI,EBX ; длина строки, включая 0

mov EBX,EDI

dec EBX

pop EAX

pop EBP

ret 4

Lngth ENDP

 

Main PROC

LOCAL hStdout :DWORD

LOCAL dSize :DWORD

 

invoke SetConsoleTitle, offset sTitle

invoke GetStdHandle, STD_OUTPUT_HANDLE

mov hStdout,EAX

push offset sText1

call Lngth

mov dSize,EBX

invoke WriteConsole, hStdout, offset sText1, dSize, NULL, NULL

invoke Sleep, 5000d

invoke ExitProcess, NULL

Main ENDP

 

end Main

Вызов системных функций API win32 из программы на ассемблере подчиняется набору соглашений stdcall: именование функций – как в языке C, передача аргументов – как в языке Pascal. С точки зрения прикладного программиста и с учетом специфики Windows и MASM эти соглашения заключаются в следующем:

  • регистр символов в имени функции не имеет значения. Это отличается от реализации MS Visual C++, где компилятор строго отслеживает совпадение регистра в именах используемых программистом функций с прототипами, содержащимися в системных заголовочных файлах.
  • аргументы передаются вызываемой функции через стек. Если аргумент укладывается в 32-битное значение и не подлежит модификации вызываемой функцией, он обычно записывается в стек непосредственно. В остальных случаях программист должен разместить значение аргумента в памяти, а в стек записать 32-битный указатель на него. Таким образом, все передаваемые функции API параметры представляются 32-битными величинами, и количество байт, занимаемых в стеке для передачи аргументов, кратно четырем.
  • вызывающая программа загружает аргументы в стек последовательно, начиная с последнего, указанного в описании функции, и заканчивая первым. После загрузки всех аргументов программа вызывает функцию командой call.
  • за возвращение стека в исходное состояние после возврата из функции API отвечает сама эта вызываемая функция. Программисту заботиться о восстановлении указателя стека esp нет необходимости.
  • вызываемая функция API гарантированно сохраняет регистры общего назначения ebp, esi, edi. Регистр eax, как правило, содержит возвращаемое значение. Состояние остальных регистров после возврата из функции API следует считать неопределенным.

Соблюдение перечисленных соглашений обеспечивается компилятором автоматически. Для этого необходимо включить в начало исходного файла комбинацию директив:

 

.386

model flat,stdcall

 

Директиву .386 можно заменить на более высокую в зависимости от того, какой процессор используется. Директива model определяет сегментную модель приложения. Для всех приложений win32 она должна иметь именно такой вид.

Для вызова API функций используется оператор invoke. Приведем в качестве примера два эквивалентных фрагмента программы:

 

push NULL

push NULL

push dSize

push offset sText1

push hStdout

call WriteConsole

 

и

 

invoke WriteConsole, hStdout, offset sText1, dSize, NULL, NULL

 

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

 

ml /c /coff FILE.asm

 

и линкер link с параметрами

 

link /SUBSYSTEM:CONSOLE FILE.obj

 

Постановка задачи: разработать консольное приложение в среде программирования MASM. В качестве задачи выбрать любое консольное приложение, написанное ранее на лабораторных работах по Системному программному обеспечению в среде программирования Microsoft Visual C++.

 

– Конец работы –

Эта тема принадлежит разделу:

Темы для предварительной проработки: объекты ядра ОС Windows, API WIN32, MASM

Консольные приложения на ассемблере для ОС Windows... Цель работы изучить основные механизмы создания консольных приложений на ассемблере в операционной системе Windows...

Если Вам нужно дополнительный материал на эту тему, или Вы не нашли то, что искали, рекомендуем воспользоваться поиском по нашей базе работ: Теоретические сведения

Что будем делать с полученным материалом:

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

Все темы данного раздела:

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

Хотите получать на электронную почту самые свежие новости?
Education Insider Sample
Подпишитесь на Нашу рассылку
Наша политика приватности обеспечивает 100% безопасность и анонимность Ваших E-Mail
Реклама
Соответствующий теме материал
  • Похожее
  • Популярное
  • Облако тегов
  • Здесь
  • Временно
  • Пусто
Теги