Програмування портів комп'ютера на прийом і передачу даних
Розробка програми для передачі даних через com-порт комп'ютера з допомогою мов програмування С та асемблера. Описання програмних продуктів. Вивчення теорії оптимізації коду, онулення регістру. Контроль суми посилки, оцінка швидкості передачі інформації.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | украинский |
Дата добавления | 23.04.2014 |
Размер файла | 124,2 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
Зміст
Вступ
1. Теоретичні відомості
1.1 Описання програмних продуктів
1.2 Підключення функції
1.3 Аналіз "каркасу"
1.4 Опис директив
2. Оптимізація коду
2.1 Теорія оптимізації коду
2.2 Онулення регістру
2.3 Тест на те, чи рівний регістр нулеві
2.4 Тест на те, чи рівний регістр 0FFFFFFFFh
2.5 Переміcтити 0FFFFFFFFh у регістр
2.6 Онулити регістр і перемістити що-небудь у нижнє слово або байт
2.7 Використання стека
Висновок
Список літератури
Додатки
Вступ
Метою даної курсової роботи є розробка програми для ЕОМ яка дозволяє передавати даний час в послідовний порт комп'ютера в відповідності з наступним протоколом: перший знак $-символ початку рядка; наступні шість цифр відображають даний час. Наступний знак * - контрольна сума посилки. Швидкість передачі інформації 2400 біт/с.
Даний курсовий проект реалізується на мові програмування С та асемблера.
В даній курсовій роботі ми повинні навчитися програмувати порти комп'ютера на прийом і передачу даних. Ми розробляємо програму для передачі даних через com-порт комп'ютера. Програмуємо порти з допомогою мов програмування С та асемблера. Ми повинні передати інформацію в нашому випадку час з одного комп'ютера на інший.
1. Теоретичні відомості
1.1 Описання програмних продуктів
Win32 програми виконуються в захищеному режимі, що доступний починаючи з 80286. Але 80286 тепер історія. Тому ми припускаємо, що маємо справу тільки з 80386 і його нащадками.
Як відомо, кожну Win32 програму Windows запускає в окремому віртуальному просторі. Це означає, що кожна Win32 програма буде мати 4-х гігабайтовий адресний простір, але зовсім не означає, що кожна програма має 4 гігабайта фізичної пам'яті, а тільки те, що програма може звертатися за будь-якою адресою в цих межах. А Windows зробить усе необхідне, щоб зробити пам'ять, до якої програма звертається, "існуючою". Звичайно, програма повинна дотримуватися правил, встановлених Windows, або це викликає General Protection Fault.
Кожна програма одна у своєму адресному просторі, у той час як у Win16 справа об стоїть не так. Усі Win16 програми можуть "бачити" одна одну, що неможливо в Win32. Ця особливість допомагає знизити шанс того, що одна програма запише що-небудь поверх даних або коду іншої програми.
Модель пам'яті також докорінно відрізняється від 16-бітних пpогpам. Під Win32, ми більше не повинні турбуватися про моделі пам'яті або сегменти. Тепер тільки одна модель пам'яті: плоска, без 64-ти кілобайтних сегментів. Тепер пам'ять - це великий послідовний 4-х гігабайтовий простір. Це також означає, що можна не турбуватися про сегментні регістри, зате можна використовувати будь-який сегментний регістр для адресації до будь-якого місця пам'яті. Це те, що робить програмування на асемблері під Win32 таким же простим, як C.
При програмуванні під Win32 потрібно пам'ятати кілька важливих правил. Найважливіше наступне: Windows використовує esi, edi, ebp і ebx для своїх цілей і не очікує, що зміняться значення цих регістрів. Якщо ж використовується який-небудь з цих чотирьох регістрів у викликуваній функції, то потрібно не забути відновити їх перед поверненням керування Windows.
1.2 Підключення функції
Ось шаблон програми
.386
.MODEL Flat, STDCALL
.DATA
<ініціалізовані дані>
......
.DATA?
<неініціалізовані дані>
......
.CONST
<константи>
......
.CODE
<мітка>
<код>
......
end <мітка>
1.3 Аналіз "каркасу"
.386
Це асемблерна директива, що вказує асемблеру використовувати набір операцій для процесора 80386. Можна використовувати і .486, .586, але самий безпечний вибір - це вказувати .386. Також є два практично ідентичних вибори для кожного варіанта CPU. .386/.386p, .486/.486p. Ці "p"-версії необхідні тільки в тих випадках, коли ваша програма використовує привілейовані інструкції, тобто інструкції, зарезервовані процесором/операційною системою для захищеного режиму. Вони можуть бути використані тільки в захищеному коді, наприклад, vdx-драйверами. Як правило, програми будуть працювати в непривілейованому режимі, так що краще використовувати не-"p" версії.
1.4 Опис директив
.MODEL FLAT, STDCALL
.MODEL - це асемблерна директива, що визначає модель пам'яті програми. Під Win32 є тільки одна модель -- плоска
STDCALL говорить МаSм'у про порядок передачі параметрів, ліворуч праворуч або праворуч ліворуч, а також про те, хто зрівнює стек після того як функція викликана.
Під Win16 існує два типи передачі параметрів, C і PASCAL. За C-домовленістю, параметри передаються справа наліво, тобто самий правий параметр кладеться в стек першим. Hапpиклад, при виклику функції з ім'ям foo(int first_param, int second_param, int third_param), використовуючи C-пеpедачу паpаметpів, асемблеpний код буде виглядати так:
push [third_param]; Покласти в стек третій параметр
push [second_param] ; Слідом - другий
push [first_param]; И, нарешті, перший
call foo
addsp, 12 ; зрівнюється стек
PASCAL-пеpедача параметрів - це C-передача навпаки. Відповідно до неї, параметри передаються зліва направо і викликуваний повинний зрівнювати стек.
Win16 використовує цей порядок передачі даних, тому що тоді код програми стає менше. C-поpядок корисний, коли не знаємо, як багато паpаметpів будуть пеpедані функції, як наприклад, у випадку wsprintf(), коли функція не може знати наперед скільки паpаметpів будуть покладені до стеку, так що вона не може його зpівняти.
STDCALL - це гібрид C і PASCAL. Відповідно до нього, дані передаються справа наліво, але викликуваний відповідальний за вирівнювання стека. Платформа Win32 використовує винятково STDCALL, хоча є одне виключення: wsprintf(). В останньому випадку потрібно випливати С-порядкові виклику.
.DATA
.DATA?
.CONST
.CODE
Усі чотири директиви - це те, що називається секціями. Відомо, що в Win32 немає сегментів? Але можливо поділити адресний простір на логічні секції. Початок однієї секції визначає кінець попередньої. Є дві групи секцій: даних і коду.
.DATA - Ця секція містить ініціалізовані дані вашої програми.
.DATA? - Ця секція містить неініціалізовані дані вашої програми.
Іноді нам потрібно тільки *попередньо* виділити деяку кількість пам'яті, але ми не хочемо ініціалізовати її. Ця секція для цього і призначається. Перевага неініціалізованих даних наступна: вони не займають місця у файлі, що виконується. Наприклад, якщо потрібно виділити 10.000 байт у вашій .DATA? секції, наш exe-файл не збільшитися на 10kb. Його розмір залишиться таким же. Цим усього лише говоримо компіляторові, скільки місця необхідно, коли програма завантажиться в пам'ять.
.CONST - Ця секція містить оголошення констант, використовуваних програмою. Константи не можуть бути змінені їй. Це усього лише *константи*.
Не обов'язково задіювати всі три секції. Повідомляйте тільки ті, котрі хочете використовувати.
Є тільки одна секція для коду: .CODE, там де міститься весь код.
<мітка>
.....
end <мітка>
де <мітка> - будь-яка довільна мітка, що встановлює границі коду. Обидві мітки повинні бути ідентичні. Весь код повинний розташовуватися між
<мітка>
і
end <мітка>
2. Оптимізація коду
2.1 Теорія оптимізації коду
Оптимізація має кілька аспектів.
Загалом, ми оптимізуємо наш код, щоб він:
· був менше
· був швидше
· був менше і швидше
Якщо ми оптимізуємо наш код:
· код буде менше, але повільніше
· код буде більше, але швидше
· код буде менше і швидше
Ми повинні знайти компроміс (якщо ми не можемо зробити так, як у третьому пункті) між першим і другим пунктом. Я впевнений, що не потрібно турбувати користувача якістю роботи системи, що погіршилася через:
· великий і не оптимізований код
· маленький, але повільний код
або турбувати користувача різким зменшенням вільного місця на диску.
Потрібно вирішувати, який шлях вибрати:
· якщо наш код (або блок коду, наприклад процедура треда) маленька, ми повинні оптимізувати її так, щоб вона була більш швидкою
· якщо наш код (або блок коду) великий, ми повинні знайти компроміс між швидкістю і розміром
Проте, ми повинні оптимізувати наш код зменшуючи його розмір і підвищуючи його швидкість, але це важко.
Але все-таки є ще багато аспектів оптимізації. Візьмемо для приклада дві інструкції, що роблять те саме, але:
· одна інструкція більше
· одна інструкція менше
· одна інструкція змінює інший регістр
· одна інструкція пише в пам'ять
· одна інструкція змінює прапори
· одна інструкція швидше на одному пpоцесоpі, але повільніше на іншому
Приклад:
LODSB MOV AL, [ESI] + INC ESI
-і-і-і-і-і-і-і-і-і-і-і-і-і-і-і-і-і-і-і-і-
розмір меншебільше
швидше на 80386швидше на 80486, на Pentium один такт
Чому LODSB швидше на 80386 і чому він займає тільки один такт на Pentium?
Pentium - це суперскалярний процесор, що підтримує пайплайнінг, тому він може запускати пари двох цілочисельних інструкцій у пайпі, тобто він може запускати ці інструкції одночасно.
Дві інструкції, що можуть бути запущені одночасно, називаються спареними інструкціями.
Зараз ми крок за кроком переглянемо кожну з технік оптимізації.
2.2 Онулення регістру
По-перше, інструкції, начебто
;1)
mov eax, 00000000h ;5 байт
Це найгірша інструкція, що я коли-небудь, бачив.
Звичайно, здається логічним, що ми пишемо в pегістр нуль, але можливо зробити більш оптимізовано так:
;2)
sub eax, eax ;2 байти
або
;3)
xor eax, eax ;2 байти
На одній інструкції зекономлено три байти, прекрасно.
2.3 Тест на те, чи рівний регістр нулеві
Давайте подивимося на рішення:
;1)
cmp eax, 00000000h ;5 байтів
je _label_ ;2/6 байтів
;(короткий/ближній)
Це 7 або 15 (!) байт для простого порівняння. Краще зробити так:
;2)
or eax, eax ;2 байти
je _label_;2/6 (короткий/ближній)
або
;3)
test eax, eax ;2 байти
je _label_;2/6 (короткий/ближній)
Якщо не важливий зміст регістру ECX або неважливо, де буде знаходитись вміст регістрів (EAX і ECX), можна зробити так:
;4)
xchg eax, ecx ;1 байт
jecxz _label_ ;2 байти
Оптимізувавши код, ми зберегли 4 байти.
2.4 Тест на те, чи рівний регістр 0FFFFFFFFh
Багато API повертають -1, коли виклик функції провалюється, тому важливо вміти тестувати це значення.
;1)
cmp eax, 0ffffffffh ;5 байта
je _label_;2/6 байтів
А зараз подивимося, як це можна оптимізувати:
;2)
inc eax;1 байт
je _label_ ;2/6 байта
dec eax;1 байт
Так, так, так, ми зберегли три байти і зробили код швидше.
2.5 Перемістити 0FFFFFFFFh у регістр
Деякі API вимагають значення -1 як параметр. Давайте подивимося, це можна зробити:
Найгірш оптимізоване:
;1)
mov eax, 0ffffffffh ;5 байт
Більш оптимизіоване:
;2)
xor eax, eax ;/ sub eax, eax ;2 байти
dec eax;1 байт
Або з таким же результатом:
;3)
stc;1 байт
sbb eax, eax ;2 байти
Цей код дуже корисний у деяких випадку, наприклад:
jnc _label_
sbb eax, eax ;всього два байти!
_label_: ...
2.6 Онулити регістр і перемістити що-небудь у нижнє слово або байт
Приклад неоптимізованого коду:
;1) xor eax, eax ;2 байти mov ax, word ptr [esi+xx] ;4 байти
386+ підтримує нову інструкцію за назвою MOVZX.
Приклад оптимізованого коду, коли ми можемо зберегти два байти:
;2)
movzx eax, word ptr [esi+xx] ;4 байти
Наступний приклад "виродженого коду":
;3)
xor eax, eax;2 байти
mov al, byte ptr [esi+xx] ;3 байти
Тепер ми можемо зберегти коштовний 1 байт:
;4)
2.7 Використання стека
Як зберегти 50h у EAX...
Погано:
;1)
mov eax, 50h ;5 байт
Краще:
;2)
push 50h ;2 байти
pop eax;1 байт
Використання PUSH і POP трохи повільніше, але також і менше. Коли операнд досить малий (1 байт довжиною), push займає 2 байти. У зворотному випадку - 5 байт.
Давайте спробуємо інший випадок. Заштовхаємо сім нулів у стек...
Hеоптимізовано:
;3)
push 0 ;2 байти
push 0 ;2 байти
push 0 ;2 байти
push 0 ;2 байти
push 0 ;2 байти
push 0 ;2 байти
push 0 ;2 байти
Опимізовано, але все рівно забагато:
;4)
xor eax, eax ;2 байти
push eax ;1 байт
push eax ;1 байт
push eax ;1 байт
push eax ;1 байт
push eax ;1 байт
push eax ;1 байт
push eax ;1 байт
Компактніше, але повільніше:
;5)
push 7 ;2 байти
pop ecx;1 байт
_label_: push 0;2 байти
loop _label_;2 байти
Ми заощадили 7 байт.
Ми хочемо перемістити що-небудь з однієї перемінної в іншу. Усі регістри повинні бути збережені. На перший погляд, це робиться так:
;6)
push eax;1 байт
mov eax, [ebp + xxxx] ;6 байтів
mov [ebp + xxxx], eax ;6 байтів
pop eax ;1 байт
А тепер, використовуючи тільки стек, без регістрів:
;7)
push dword ptr [ebp + xxxx] ;6 байтів
pop dword ptr [ebp + xxxx];6 байтів
Це корисно, коли немає вільних регістрів. Використовувати це можна, наприклад, коли потрібно зберегти старе місце входу в іншу змінну...
;8)
push dword ptr [ebp + header.epoint] ;6 байтів
pop dword ptr [ebp + originalEP] ;6 байтів
Це збереже два байти. Хоча це набагато повільніше, ніж нормальні маніпуляції з EAX (без його збереження), усе-таки може статися, коли ми не хочемо (або не можемо) використовувати який-небудь регістр.
Висновок
Програма виконана мовою С++ з використанням ассемблерних уставок для доступу до зовнішніх функцій Windows API. Вона дозволяє відображати поточний час на екрані і виводити його в послідовний порт (com1 або com2) комп'ютера у відповідності з наступним протоколом: перший знак - $ - символ початку рядка, наступних 6 цифр відображають поточний час. Потім випливає знак * - ознака кінця рядка.
Наступні 2 знаки - контрольна сума посилки. Швидкість передачі інформації - 2400 біт/с., можлива передача так само на швидкостях 4800, 9600, 14400. Можливе використання пересилання даних за таймером і вручну з завданням частоти відновлення таймера.
Додатки
Додаток А
Лістинг програми:
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "ComSync.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
char SYStime[10]="";// Time buffer
// vars for COM work
void * CommHandle;
TDCB _DCB;
TOverlappedOvr;
TComStat Stat;
HANDLE CommThread;
HANDLE hEvent;
bool Flag,StopResive;
DWordKolByte,Kols,TransMask,Errs;
// functions for COM
void WriteComm(short A)
{
char Transmit[255];
KolByte = 1;
Transmit[0] = A;
WriteFile(CommHandle,&Transmit,KolByte,&KolByte,&Ovr);
}
unsigned long _stdcall ReadComm(void *)
{
char Resive[255];
while (true)
{
TransMask = 0;
WaitCommEvent(CommHandle,&TransMask,&Ovr); //чекаємо
ClearCommError(CommHandle,&Errs,&Stat);//скидаємо прапор
Kols = Stat.cbInQue;
ReadFile(CommHandle,&Resive,Kols,&Kols,&Ovr);//читаємо
//отут повинна йти обробка прийнятої інформації з Resive
Form1->StatusBar1->Panels->Items[0]->Text = Resive;
Sleep(100);
}
}
PortInit (char * PortName)
{
DWord ThreadID;
KolByte = 0;
//створення порту й одержання його хэндла
//Початок ассембелрной вставки.
// Виклик АПИ функції CreateFile. Параметри передаються через стэк.
//;hTemplateFile
//;dwFlagsAndAttributes
//;dwCreationDistribution
//;lpSecurityAttributes
//;dwShareMode
//;dwDesiredAccess
//;lpFileName
//Список параметрів, згідно SdtCall параметри записуються в стэк один за одним, згідно
//порядкові виклику.
//Ім'я файлу розташовується в секції даних.
//тут викликається апишная функція CreateFile за допомогою ассемблерной вставки;
//для цього за допомогою комманды call і push (параметри задані в зворотному порядку,
//тому що в стек заганяються) приєднується зовнішня бібліотека, з неї береться
//потрібна функція
asm
{
CommHandle dd 0
.data
file_name DB "COM1",0
.code
push NULL
push FILE_ATTRIBUTE_NORMAL
push OPEN_EXISTING
push NULL
push 0
push GENERIC_READ
push offset file_name
call CreateFileA
;ім'я файлу, що відкривається
;hTemplateFile
;dwFlagsAndAttributes
;dwCreationDistribution
;lpSecurityAttributes
;dwShareMode
;dwDesiredAccess
;lpFileName
}
// Виклик здійснений. Результат збережений у перемінної CommHandle, узята з регістра dx
//CommHandle=CreateFile(PortName,GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_EXISTING,
// FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED,0);
//ShowMessage(IntToStr(CommHandle));
if (CommHandle == INVALID_HANDLE_VALUE)
{
ShowMessage("Неможливо відкрити завдань порт");
TerminateThread(CommThread, 0);
Application->Terminate();
}
//ставимо маску - "по пришесті визначеного символу"
// Той же виклик функції для установки маски порту.
asm
{
CommHandle dd 0
.data
.code
push dd
push EV_RXFLAG
call SetCommMask
}
//SetCommMask(CommHandle,EV_RXFLAG);
//побудова DCB
GetCommState(CommHandle,&_DCB);
if(Form1->Speed->Text == 2400) _DCB.BaudRate = CBR_2400; else
if(Form1->Speed->Text == 4800) _DCB.BaudRate = CBR_4800; else
if(Form1->Speed->Text == 9600) _DCB.BaudRate = CBR_9600; else
if(Form1->Speed->Text == 14400) _DCB.BaudRate = CBR_14400; else
_DCB.BaudRate = CBR_9600;
_DCB.Parity = NOPARITY;
_DCB.ByteSize = 8;
_DCB.StopBits = ONESTOPBIT;
_DCB.EvtChar = 13;//завдання символу для прапора
//установлюємо DCB
SetCommState(CommHandle,&_DCB);
//створюємо паралельный потік
//там буде вертітися процедура прийому рядка
//с порту - ReadComm
CommThread = CreateThread(NULL,0,&ReadComm,NULL,0,&ThreadID);
return 0;
}
void __fastcall TForm1::FormCreate(TObject *Sender)
{
;
}
//---------------------------------------------------------------------------
AnsiString Got;
AnsiString CSumm = "00";
char Summ;
int i;
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
Summ = 0;
GetTimeFormat(LOCALE_SYSTEM_DEFAULT,
0,NULL,"hh':'mm':'ss",SYStime, 10);
Label1->Caption = SYStime;
Timer1->Interval = StrToInt(Edit1->Text);
// Unpacking message
Got = Form1->StatusBar1->Panels->Items[0]->Text;
if (Got.Length()!=0)
if (Got[1] == '$')
{
for (i=1; i<=Got.Length(); i++)
{
if (Got[i] == '*') break;
Summ += Got[i];
}
CSumm[1] = Got[i+1];
CSumm[2] = Got[i+2];
Label2->Caption = "";
if (IntToStr(Summ) == CSumm)
{
Label2->Caption=AnsiString(Got[2]) +
AnsiString(Got[3]) + ":" +
AnsiString(Got[4]) +
AnsiString(Got[5]) + ":" +
AnsiString(Got[6]) +
AnsiString(Got[7]);
}
}
if (CheckBox1->Checked)
Button3->Click();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
TerminateThread(CommThread, 0);
CloseHandle(CommHandle);
PortInit(Port->Text.c_str());
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormDestroy(TObject *Sender)
{
TerminateThread(CommThread, 0);
CloseHandle(CommHandle);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button3Click(TObject *Sender)
{
AnsiString ToSend;
AnsiString CSumm;
char Summ = 0;
GetTimeFormat(LOCALE_SYSTEM_DEFAULT,
0,NULL,"hhmmss",SYStime, 10);
ToSend = "$" + AnsiString(SYStime);
for (int i=1; i<=ToSend.Length(); i++)
Summ += ToSend[i];
CSumm = IntToStr(Summ);
ToSend += "*"+CSumm;
Form1->StatusBar1->Panels->Items[1]->Text = ToSend;
for (int i=1; i<=ToSend.Length(); i++)
{
WriteComm(ToSend[i]);
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
TerminateThread(CommThread, 0);
}
//---------------------------------------------------------------------------
комп'ютер порт інформація регістр
Додаток Б
Рис. 1. Головна форма
Блок схема програми
Размещено на Allbest.ru
...Подобные документы
Розрахунок часових затримок для формування імпульсів у програмі передачі даних через послідовний порт мікроконтролера, а також розрахунок швидкості передачі даних через послідовний порт. Алгоритм підпрограми обробки переривань від послідовного порту.
курсовая работа [29,9 K], добавлен 07.06.2010Програми, які виводять на екран характеристики комп'ютера. Розробка програми "Монітор використання ресурсів комп’ютера" на мові програмування ASM-86. Алгоритм програми та її реалізація. Системні вимоги, інструкція для користувача, лістинг програми.
курсовая работа [22,2 K], добавлен 08.08.2009Формати прийому та передачі даних через послідовний порт, його технічні характеристики, будова і принцип роботи. Характеристика протоколів послідовної передачі. Способи керування портами у WINDOWS95 та WINDOWS XP. Опис алгоритму і функціонування програми.
дипломная работа [752,6 K], добавлен 09.06.2010Поняття комп'ютерної мережі як спільного підключення окремих комп’ютерів до єдиного каналу передачі даних. Сутність мережі однорангової та з виділеним сервером. Топології локальних мереж. Схема взаємодії комп'ютерів. Проблеми передачі даних у мережі.
курсовая работа [605,0 K], добавлен 06.05.2015Коротка характеристика кабельних та бездротових портів, розрахунок їх практичної швидкості. Дослідження реальної швидкості передачі даних за допомогою Bluetooth. Призначення, особливості та архітектура мобільного протоколу 3GPP Long Term Evolution.
лабораторная работа [693,9 K], добавлен 08.10.2012Внутрішнє представлення в пам’яті комп’ютера даних базових та похідних типів, масивів. Ідентифікатор, зв'язаний з константним виразом та основи представлення даних. Алгоритм представлення цілих, дійсних, логічних і символьних чисел, структур і об’єднань.
курсовая работа [279,1 K], добавлен 25.08.2014Призначення програми BurnInTest та її функціональні можливості. Конфігурація тестового стенду. Тестування жорсткого диску комп’ютера з використанням програми HD TunePro. Рекомендації по підвищенню продуктивності та оптимізації комп’ютера, що тестується.
курсовая работа [4,8 M], добавлен 27.02.2013Взаємодія комп’ютера з зовнішніми пристроями. Послідовний потік даних як біти синхронізації і власне біти даних. Специфіка формату послідовних даних, які формує UART. Електричний інтерфейс RS-232C. Способи керування портами у WINDOWS95 та WINDOWS XP.
реферат [660,1 K], добавлен 19.06.2010Історія появи перших обчислювальних машин. Пам'ять як один із основних елементів комп'ютера, що дозволяє йому нормально функціонувати. Значення внутрішньої пам'яті комп'ютера з позиції зберігання інформації. Аналіз зовнішньої пам’яті та її модернізація.
реферат [24,4 K], добавлен 27.12.2011Синтез на основі поведінкового опису, виконаний розробниками на мові програмування класу HDL, як перспективний напрямок проектування цифрових пристроїв. Опис RISC-архітектури комп'ютерів. VHDL-модель прототипу RISC-комп'ютера. Основні модулі моделей.
курсовая работа [1,1 M], добавлен 23.01.2014Інтернет як система об'єднаних комп'ютерних мереж для зберігання і передачі інформації. Літературні джерела щодо сутності баз даних та їх функціонування. Порівняльний аналіз MySQL, Oracle та Microsoft Access. Створення бази даних за допомогою MySQL.
курсовая работа [1,5 M], добавлен 05.02.2014Електронна база даних як послідовність даних заданої структури, записана на магнітний диск комп'ютера, її типи, основні та невід'ємні властивості. Призначення та оцінка можливостей системи управління. Моделі даних та головні принципи їх функціонування.
презентация [352,2 K], добавлен 04.12.2014Види списків, особливості їх створення, застосування та можливості удосконалення роботи користувача персонального комп’ютера. Керування та аналіз груп споріднених даних у середовищі програми MS Excel 2010. Опрацювання спискiв за допомогою форми даних.
дипломная работа [2,7 M], добавлен 18.06.2014Опис інтерфейсу паралельного порту Centronics, який має 25-контактний 2-рядний роз'єм DB-25-female. Швидкість передачі даних, фірмові розширення. Розгляд BIOS для LPT-порту. Опис програмного середовища. Приклад виконання програми, блок-схема алгоритму.
курсовая работа [1,2 M], добавлен 23.04.2014Основні принципи дії та архітектура прототипних варіантів CISC-комп'ютера. Інструкції асемблерної мови і принцип трансляції асемблерної програми у машинний код. Розробка тестової програми. Перевірка правильності роботи реалізованих команд у прикладах.
курсовая работа [446,1 K], добавлен 03.02.2011Ведення протоколу роботи комп’ютера. Розробка програми для створення списку розширень файлів і занесення часу і дати доступу до них на мові програмування Асемблер. Виклик переривання 21h код-функції та занесення до регістрів. Алгоритм та лістинг програми.
курсовая работа [14,1 K], добавлен 08.08.2009Редагування за допомогою текстового редактора NotePad вхідного файлу даних. Програмна реалізація основного алгоритму з використанням засобів об'єктно-орієнтованого програмування. Об’ява та опис класів і об'єктів. Розробка допоміжних програмних засобів.
курсовая работа [69,4 K], добавлен 14.03.2013Поняття комп'ютеру як універсальної технічної системи, спроможної виконувати визначену послідовність операцій певної програми. Програмні засоби, за допомогою яких визначають основні характеристики ПК. Утіліта EVEREST Home Edition 1.51, її призначення.
контрольная работа [403,0 K], добавлен 01.12.2009Теоретичні аспекти, організація та основні типи пам'яті з асоціативним доступом. Розробка програми "Віртуальна клавіатура" за допомогою мови програмування JavaScript. Основні способи запису інформації. Використання короткострокової пам’яті комп’ютера.
курсовая работа [1,2 M], добавлен 21.06.2015"Критичні" комплектуючі комп'ютера. Процесор та оперативна пам'ять. Швидкість роботи комп'ютера. Порівняння швидкодії комплектуючих з роботою еталонних моделей. Стратегія і варіанти модернізації. Функціональні особливості побудови материнської плати.
курсовая работа [4,6 M], добавлен 24.06.2013