Files
templates/Labv4.cpp
2024-09-10 22:24:24 +03:00

141 lines
3.5 KiB
C++
Executable File
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// Лабораторная Работа Lab 4
// ТАЙМЕР. Измерение времени. Мышь
//
#include<iostream.h>
#include<conio.h>
#include<stdio.h>
void main()
{
long int cl2,cl1,c1,c2;
unsigned long int t1,t2,t3;
// Изменение константы счетчика
/* asm{
mov ax,00110110B // 00 11 011 0
out 43h,ax
mov ax,0000000000000000B
out 40h,al
mov al,ah
out 40h,al
}
*/
// Измерение времени выполнения тестовой программы 1
// в тиках (в прерываниях от 0-го канала таймера)
// Счетчик тиков ячейка 46С - младший байт первый
asm{
mov ax,0x46
mov es,ax
mov bx,0xC
mov ax,[es:bx]
mov cx,[es:(bx+2)]
}
// Запомните начальное значение младшее и старшее ???
// cl2= ; cl1= ;
c1=cl2+cl1*0x10000;
//Тестовая программа 1
asm mov cx,1000
met1: asm {
push cx
mov cx,1000
}
met2: asm {
loop met2
pop cx
loop met1
}
//
asm{
mov ax,0x46
mov es,ax
mov bx,0xC
mov ax,[es:bx]
mov cx,[es:(bx+2)]
}
// Запомните конечное значение ???
// cl2=_AX; cl1= ;
// Длинное целое -
c2=cl2+cl1*0x10000;
// clrscr();
// printf("\nПервое - %d\n",c1);
// printf("Второе - %d\n",c2);
cout<<"\nВремя выполнения тестовой программы 1\n";
cout<<"COUNTs: "<<c2-c1<<"\n";
printf("\n Сколько миллисекунд ??");
getch();
// Измерение времени выполнения тестовой программы
// по содержимому регистра таймера
// Порт 43h - порт управления таймером
// Порт 40h - порт таймера
asm{
mov ax,00000110B // 00 00 011 0
out 43h,ax // Читаем младший, потом старший
in al,40h
// mov bl,al
in al,40h
// mov ah,al
// mov al,bl
}
t1=_AX;
//Тестовая программа 2
asm mov cx,1
met11: asm {
push cx
mov cx,1000
}
met22: asm {
loop met22
pop cx
loop met11
}
asm{
mov ax,00000110B // 00 00 011 0
out 43h,ax // Читаем младший, потом старший
in al,40h
// mov bl,al
in al,40h
// mov ah,al
// mov al,bl
}
t2=_AX;
t3=t1; // ????
clrscr();
printf("\nПервое - %d \n",t1);
printf("Второе - %d\n",t2);
cout<<"\nВремя выполнения тестовой программы 2\n";
printf("%x\n",t3);
cout<<"CLOCKs: "<<t3<<"\n";
printf("\n Сколько микросекунд ??");
getch();
// Задания
// 1 Определите времена работы тестовых программ 1 и 2
// 2 Перепрограммируйте таймер и измерьте время раб прог1 более точно
// 3 Определите время между двумя нажатиями на кнопку мыши (или клавиатуры)
//Эта процедура считывает положение курсора мыши и признак нажатия
//на клавишу. Прочитайте описание драйвера мыши и программу Asmous.cpp.
void ReadMouse ()
{
asm mov ax, 0x3
asm int 0x33
asm mov MouseB, bx
asm mov MouseX, cx
asm mov MouseY, dx
}
}