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

  • Вид работы:
    Практическое задание
  • Предмет:
    Информационное обеспечение, программирование
  • Язык:
    Русский
  • Формат файла:
    MS Word
  • Размер файла:
    36,86 Кб
Разработка приложения на языке Assembler
Разработка приложения на языке 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.

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

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

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

1. IDE MASM Builder [Электронный ресурс]. - Режим доступа: #"justify">. Beep function (Windows) [Электронный ресурс]. - Режим доступа: #"justify">3 GetDlgItemInt (Windows) [Электронный ресурс]. - Режим доступа: #"justify">Приложение

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

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, blueeax, eaxah, blueeax, 8ah, greenal, redMACRO Name, Text:VARARGlbllbldb Text, 0:equ 5equ 4IDequ 3equ 2IDequ 1?HWND?HWND?HWND?HWND?HWND?HWND?HINSTANCE?LPSTR?LOGFONT <>db «Воспроизвести», 0db «0», 0db «Длительность, мсек», 0db «0», 0db «Частота, Гц», 0db «MS Sans Serif», 0

;_______________db «mbuilder», 0

BtnClNamedb «button», 0StatClNamedb «static», 0EditClNamedb «edit», 0LboxClNamedb «listbox», 0CboxClNamedb «combobox», 0ReditClNamedb «richedit», 0RichEditLibdb «riched32.dll», 0FormCaptiondb «Звукогенератор», 0;_______________freq_vardd 0dur_vardd 0codestart:invokeGetModuleHandle, NULLmovhInstance, eaxinvokeGetCommandLineinvokeWinMain, hInstance, NULL, CommandLine, SW_SHOWDEFAULTinvokeExitProcess, eaxWinMain prochInst:HINSTANCE, hPrevInst:HINSTANCE, CmdLine:LPSTR, CmdShow:DWORDLOCAL wc:WNDCLASSEXLOCAL msg:MSGLOCAL hwnd:HWNDmovwc.cbSize, SIZEOF WNDCLASSEXmovwc.style, CS_BYTEALIGNCLIENTmovwc.lpfnWndProc, offset WndProcmovwc.cbClsExtra, NULLmovwc.cbWndExtra, NULLpush hInstpopwc.hInstancemovwc.hbrBackground, COLOR_BTNFACE+1movwc.lpszClassName, OFFSET ClassNameinvokeLoadIcon, NULL, IDI_APPLICATIONmovwc.hIcon, eaxmovwc.hIconSm, eaxinvokeLoadCursor, NULL, IDC_ARROWmovwc.hCursor, eaxinvokeRegisterClassEx, addr wcinvoke CreateWindowEx, 0, ADDR ClassName, ADDRFormCaption, WS_SYSMENU or WS_SIZEBOX, 209,89,255,130,0,0, hInst, 0movhwnd, eaxINVOKEShowWindow, hwnd, SW_SHOWNORMALINVOKEUpdateWindow, hwndWHILE TRUEinvokeGetMessage, ADDR msg, 0,0,0BREAK.IF (! eax)invokeTranslateMessage, ADDR msginvokeDispatchMessage, ADDR msgENDWmoveax, msg.wParamretWinMain endpWndProc proc hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAMIF uMsg == WM_DESTROYinvokePostQuitMessage, 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

movhwndplay, eaxinvoke CreateWindowEx, WS_EX_CLIENTEDGE, ADDR EditClName, ADDRTextdur, WS_CHILD or ES_LEFT or ES_AUTOHSCROLL or ES_NUMBER orWS_VISIBLE, 120,40,121,22, hWnd, durID, hInstance, 0movhwnddur, eaxinvoke CreateWindowEx, WS_EX_LEFT, ADDR StatClName, ADDRTextLabel2, WS_CHILD or SS_LEFT or SS_NOTIFY orWS_VISIBLE, 8,40,109,18, hWnd, Label2ID, hInstance, 0movhwndLabel2, eaxinvoke CreateWindowEx, WS_EX_CLIENTEDGE, ADDR EditClName, ADDRTextfreq, WS_CHILD or ES_LEFT or ES_AUTOHSCROLL or ES_NUMBER orWS_VISIBLE, 120,8,121,22, hWnd, freqID, hInstance, 0movhwndfreq, eaxinvoke CreateWindowEx, WS_EX_LEFT, ADDR StatClName, ADDRTextLabel1, WS_CHILD or SS_LEFT or SS_NOTIFY orWS_VISIBLE, 8,8,64,18, hWnd, Label1ID, hInstance, 0movhwndLabel1, eaxinvokelstrcpy, addr lf.lfFaceName, addr szFontNamemovlf.lfWeight, 500movlf.lfHeight, - 11invokeCreateFontIndirect, addr lfmovhFontN, eaxinvokeSendMessage, hwnddur, WM_SETFONT, hFontN, 1invokeSendMessage, hwndfreq, WM_SETFONT, hFontN, 1invokeSendMessage, hwndLabel2, WM_SETFONT, hFontN, 1invokeSendMessage, hwndLabel1, WM_SETFONT, hFontN, 1invokeSendMessage, hwndplay, WM_SETFONT, hFontN, 1ELSEIF uMsg == WM_COMMANDmoveax, wParamIF lParam!= 0IF ax == playIDshr eax, 16IF ax == BN_CLICKEDinvokeGetDlgItemInt, hWnd, freqID, 0,1mov freq_var, eaxinvokeGetDlgItemInt, hWnd, durID, 0,1mov dur_var, eaxinvoke Beep, freq_var, dur_varENDIFENDIFENDIFELSEinvokeDefWindowProc, hWnd, uMsg, wParam, lParamretENDIFxoreax, eaxretWndProc endpend start

Похожие работы

 

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