Разработка приложения на языке Assembler

  • Вид работы:
    Практическое задание
  • Предмет:
    Информационное обеспечение, программирование
  • Язык:
    Русский
    ,
    Формат файла:
    MS Word
    36,86 Кб
  • Опубликовано:
    2015-12-17
Вы можете узнать стоимость помощи в написании студенческой работы.
Помощь в написании работы, которую точно примут!

Разработка приложения на языке Assembler














Разработка приложения на языке Assembler

1. Постановка задачи

Написать на языке Ассемблер программу для управления динамиком системного блока. Обеспечить установку частоты и длительности формируемых сигналов.

Цель работы - разработка программы для управления системным динамиком.

2. Алгоритм работы приложения

Программа работает по алгоритму, изображённому на рисунке 1.

Рисунок 1 - Алгоритм работы

При запуске, приложение прорисовывает главное окно и ожидает нажатия кнопки. При нажатии, срабатывает функция GetDlgItemInt, которая получает значения из контролов и передаёт в регистр eax. Имеет четыре параметра:

- hDlg - дескриптор диалогового окна, который содержит интересующий орган управления;

nIDDlgItem - устанавливает идентификатор органа управления, текст которого должен быть преобразован;

lpTranslated - указатель на переменную, которая получает значение успешного завершения или значение сбоя (успешное завершение обозначается - ИСТИНА (TRUE), сбой обозначается как ЛОЖЬ (FALSE)), если этот параметр - ПУСТО (NULL), функция не возвращает информацию об успехе или сбое;

bSigned - устанавливает, должна ли функция вначале проверять текст на знак минус и возвратить значение целого числа со знаком, если она находит этот минус (значение ИСТИНА (TRUE) устанавливает, что это должно быть сделано, ЛОЖЬ (FALSE), - что не должно).

          Затем полученное значение передаётся командой mov из регистра eax в нужную переменную. Для управления динамиком системного блока (бипером), используется библиотечная функция beep. Данная функция имеет два параметра:

dwFreq - частота звука в герцах, допустимый диапазон - от 37 до 32 767 Гц;

- dwDuration - продолжительность звука в миллисекундах;

Чтобы обеспечить установку частоты и продолжительности, необходимо на форму добавить два контрола Edit с установленным параметром ES_NUMBER, чтобы предотвратить ввод символов, отличных от цифр. Для хранения и передачи в функцию значений, были созданы две переменные freq_var и dur_var (частота и длительность соответсвенно) с типом dd (dword). Для проигрывания звука размещена кнопка play с надписью «Воспроизвести».

3. Пример работы приложения

Внешний вид приложения изображён на рисунке 2.

Рисунок 2 - Внешний вид

приложение алгоритм программа

Пользователь вводит значения частоты звука в верхнее поле, длительности - в нижнее. При нажатии на кнопку «Воспроизвести», из системеного динамика (или звукого устройства по-умолчанию, в случае системы Windows 7) будет звучать тон заданной частоты, в течении заданного времени, однако, при установке частоты меньше 35 Гц или выше 19 кГц звук слышен не будет из-за особенностей человеческого слуха.

Список использованных источников

1. IDE MASM Builder [Электронный ресурс]. - Режим доступа: http://www.digitaction.com/index.php/products/masm-builder-integrated-development-environment-for-masm32.html.

. Beep function (Windows) [Электронный ресурс]. - Режим доступа: http://msdn.microsoft.com/en-us/library/windows/desktop/ms679277% 28v=vs.85% 29.aspx, свободный.

3 GetDlgItemInt (Windows) [Электронный ресурс]. - Режим доступа: http://msdn.microsoft.com/en-us/library/windows/desktop/ms645485% 28v=vs.85% 29.aspx, свободный.

Приложение

Листинг программы

flat, stdcall option casemap:none\masm32\include\windows.inc include \masm32\include\user32.inc include \masm32\include\kernel32.inc include \masm32\include\gdi32.inc include \masm32\include\comdlg32.inc include \masm32\include\shell32.inc includelib \masm32\lib\user32.lib includelib \masm32\lib\kernel32.lib includelib \masm32\lib\gdi32.lib includelib \masm32\lib\comdlg32.lib includelib \masm32\lib\shell32.lib\masm32\procs\controls\baumanets.lib WinMain proto:DWORD,:DWORD,:DWORD,:DWORDmacro red, green, blue      eax, eax      ah, blue          eax, 8          ah, green     al, redMACRO Name, Text:VARARG      lbl      lbldb Text, 0:          equ 5 equ 4ID       equ 3 equ 2ID       equ 1?         HWND?     HWND?     HWND?          HWND?     HWND?     HWND?     HINSTANCE?     LPSTR?LOGFONT <>  db «Воспроизвести», 0      db «0», 0    db «Длительность, мсек», 0   db «0», 0    db «Частота, Гц», 0         db «MS Sans Serif», 0

;_______________        db «mbuilder», 0

BtnClName


db «button», 0

StatClName


db «static», 0

EditClName


db «edit», 0

LboxClName


db «listbox», 0

CboxClName


db «combobox», 0

ReditClName


db «richedit», 0

RichEditLib


db «riched32.dll», 0

FormCaption


db «Звукогенератор», 0

;_______________


freq_var

dd 0



dur_var


dd 0


code




start:




invoke

GetModuleHandle, NULL

mov


hInstance, eax

invoke

GetCommandLine

invoke

WinMain, hInstance, NULL, CommandLine, SW_SHOWDEFAULT

invoke

ExitProcess, eax

WinMain proc



hInst:HINSTANCE, hPrevInst:HINSTANCE, CmdLine:LPSTR, CmdShow:DWORD

LOCAL wc

:WNDCLASSEX

LOCAL msg


:MSG

:HWND

mov


wc.cbSize, SIZEOF WNDCLASSEX

mov


wc.style, CS_BYTEALIGNCLIENT

mov


wc.lpfnWndProc, offset WndProc

mov


wc.cbClsExtra, NULL

mov


wc.cbWndExtra, NULL

push hInst


pop


wc.hInstance

mov


wc.hbrBackground, COLOR_BTNFACE+1

mov


wc.lpszClassName, OFFSET ClassName

invoke

LoadIcon, NULL, IDI_APPLICATION

mov


wc.hIcon, eax

mov


wc.hIconSm, eax

invoke

LoadCursor, NULL, IDC_ARROW

mov


wc.hCursor, eax

invoke

RegisterClassEx, addr wc

invoke CreateWindowEx, 0, ADDR ClassName, ADDR

FormCaption, WS_SYSMENU or WS_SIZEBOX, 209,89,255,130,0,0, hInst, 0

mov


hwnd, eax

INVOKE

ShowWindow, hwnd, SW_SHOWNORMAL

INVOKE

UpdateWindow, hwnd

WHILE TRUE



invoke

GetMessage, ADDR msg, 0,0,0


BREAK.IF (! eax)


invoke

TranslateMessage, ADDR msg


invoke

DispatchMessage, ADDR msg

ENDW



mov

eax, msg.wParam

ret




WinMain endp



WndProc proc hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM

IF uMsg == WM_DESTROY


invoke

PostQuitMessage, NULL


ELSEIF uMsg == WM_CREATE

CreateWindowEx, 0, ADDR BtnClName, ADDR Textplay, WS_CHILD or BS_DEFPUSHBUTTON or WS_VISIBLE, 0,72,243,25, hWnd, playID, hInstance, 0

mov


hwndplay, eax


invoke CreateWindowEx, WS_EX_CLIENTEDGE, ADDR EditClName, ADDR

Textdur, WS_CHILD or ES_LEFT or ES_AUTOHSCROLL or ES_NUMBER or

WS_VISIBLE, 120,40,121,22, hWnd, durID, hInstance, 0

mov


hwnddur, eax


invoke CreateWindowEx, WS_EX_LEFT, ADDR StatClName, ADDR

TextLabel2, WS_CHILD or SS_LEFT or SS_NOTIFY or

WS_VISIBLE, 8,40,109,18, hWnd, Label2ID, hInstance, 0

mov


hwndLabel2, eax


invoke CreateWindowEx, WS_EX_CLIENTEDGE, ADDR EditClName, ADDR

WS_VISIBLE, 120,8,121,22, hWnd, freqID, hInstance, 0

mov


hwndfreq, eax


invoke CreateWindowEx, WS_EX_LEFT, ADDR StatClName, ADDR

TextLabel1, WS_CHILD or SS_LEFT or SS_NOTIFY or

WS_VISIBLE, 8,8,64,18, hWnd, Label1ID, hInstance, 0

mov


hwndLabel1, eax


invoke

lstrcpy, addr lf.lfFaceName, addr szFontName

mov


lf.lfWeight, 500

mov


lf.lfHeight, - 11

invoke

CreateFontIndirect, addr lf

mov


hFontN, eax


invoke

SendMessage, hwnddur, WM_SETFONT, hFontN, 1

invoke

SendMessage, hwndfreq, WM_SETFONT, hFontN, 1

invoke

SendMessage, hwndLabel2, WM_SETFONT, hFontN, 1

invoke

SendMessage, hwndLabel1, WM_SETFONT, hFontN, 1

invoke

SendMessage, hwndplay, WM_SETFONT, hFontN, 1

ELSEIF uMsg == WM_COMMAND


mov

eax, wParam


IF lParam!= 0



IF ax == playID




shr eax, 16




IF ax == BN_CLICKED



invoke

GetDlgItemInt, hWnd, freqID, 0,1



mov freq_var, eax



invoke

GetDlgItemInt, hWnd, durID, 0,1



mov dur_var, eax



invoke Beep, freq_var, dur_var



ENDIF



ENDIF


ENDIF



ELSE




invoke

DefWindowProc, hWnd, uMsg, wParam, lParam

ret




ENDIF




xor

eax, eax


ret




WndProc endp




end start





Похожие работы на - Разработка приложения на языке Assembler

 

Не нашли материал для своей работы?
Поможем написать уникальную работу
Без плагиата!