Разработка приложения на языке Assembler
Методика разработки и листинг программы для управления динамиком системного блока, обеспечения установки частоты и длительности формируемых сигналов. Алгоритм и этапы работы проектируемого приложения, анализ полученных результатов. Пример его работы.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | лабораторная работа |
Язык | русский |
Дата добавления | 17.12.2015 |
Размер файла | 79,0 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
Размещено на http://www.allbest.ru/
Разработка приложения на языке 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.
2. 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, свободный.
Приложение
Листинг программы
386
model flat, stdcall option casemap:none
include \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
includelib \masm32\procs\controls\baumanets.lib WinMain proto:DWORD,:DWORD,:DWORD,:DWORD
RGB macro red, green, blue
xor eax, eax
mov ah, blue
shl eax, 8
mov ah, green
mov al, red
endm
szText MACRO Name, Text:VARARG
LOCAL lbl
jmp lbl
Name db Text, 0
lbl:
ENDM
const
playID equ 5
durID equ 4
Label2ID equ 3
freqID equ 2
Label1ID equ 1
data?
hFontN HWND?
hwndplay HWND?
hwnddur HWND?
hwndLabel2 HWND?
hwndfreq HWND?
hwndLabel1 HWND?
hInstance HINSTANCE?
CommandLine LPSTR?
data
lf LOGFONT <>
Textplay db «Воспроизвести», 0
Textdur db «0», 0
TextLabel2 db «Длительность, мсек», 0
Textfreq db «0», 0
TextLabel1 db «Частота, Гц», 0
szFontName db «MS Sans Serif», 0
;_______________
ClassName 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 |
|||
LOCAL hwnd |
: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
invoke 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 |
||||
Textfreq, WS_CHILD or ES_LEFT or ES_AUTOHSCROLL or ES_NUMBER or |
||||
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 |
Размещено на Allbest.ru
Подобные документы
Разработка программного решения по созданию мобильного приложения. Изучение технологий для разработки приложений. Анализ работы торговых агентов. Обоснование выбора языка программирования. Проектирование интерфейса структуры и верстка, листинг программы.
дипломная работа [2,2 M], добавлен 08.06.2017Этапы разработки программного приложения, выполняющего синтаксический анализ программы на языке С и форматирование текста программы на языке С. Требования к программному обеспечению и интерфейсу. Конфигурация технических средств и оценка надежности.
курсовая работа [1,6 M], добавлен 22.06.2011Создание приложения, исполняющего трансляцию программы из языка Паскаль в язык Си: разработка алгоритма реализации задачи, описание необходимых констант, переменных, функций и операторов, представление листинга программы и распечатка результатов.
курсовая работа [305,9 K], добавлен 03.07.2011Разработка программы создания заметок в любом месте компьютера. Выбор технологии, языка и среды разработки приложения. Описание основных алгоритмов работы программного обеспечения. Проектирование пользовательского интерфейса. Выбор стратегии тестирования.
отчет по практике [700,5 K], добавлен 24.11.2014Разработка программы для рисования различных правильных многоугольников с помощью объектно-ориентированного языка программирования. Использование для разработки среды C++ Builder 6 и библиотеки VCL. Разработка интерфейса приложения и алгоритма его работы.
курсовая работа [616,4 K], добавлен 18.10.2010Общие сведения о языке ассемблера. Назначение команды прерывания INT число. Описание логической структуры программы: алгоритм работы, используемые методы, входные и выходные данные. Структура и тестирование программы. Руководство оператора программы.
курсовая работа [90,0 K], добавлен 01.12.2009Анализ проектирования интерфейса программы. Выбор и назначение визуальных компонентов. Изучение экранных форм приложения. Модули, процедуры, функции проекта и их назначение. Листинг программного кода. Результаты работы автоматизированного продукта.
курсовая работа [1,9 M], добавлен 11.12.2017- Обзор Windows Vista. Разработка консольного приложения, реализующего кольцевую очередь(20 элементов)
Обзор и комплексный анализ операционной системы Windows Vista, оценка ее преимуществ и недостатков. Разработка программы, которая реализует алгоритм очереди на 20 элементов. Построение блок-схемы и листинг алгоритма, контрольный пример его работы.
курсовая работа [4,2 M], добавлен 20.11.2013 Создание программы для вычисления значения функции на основе определённой формулы. Уточнение структуры входных и выходных данных и определение ассемблерного формата их представления. Разработка алгоритмов для реализации работы программного обеспечения.
курсовая работа [240,6 K], добавлен 17.06.2013Принцип работы регулятора громкости в ОС Windows. Требования к интерфейсу программного продукта, программному и техническому обеспечению. Выбор ядра для разработки приложения. Инсталляция и выполнение программы. Контекстная диаграмма и листинг приложения.
курсовая работа [978,4 K], добавлен 18.06.2015