
- •Введение
- •Внесение примесей
- •Аналоговые и цифровые схемы
- •Цифровая логика
- •Внутренняя структура микропроцессора.
- •Регистры
- •Системные шины
- •Пропускная способность шины.
- •Способы адресации данных
- •Прерывания
- •Типы прерываний
- •Программно-аппаратное управление обработкой прерываний
- •Программные прерывания
Программные прерывания
Без системы прерываний невозможно представить работу компьютера в многопользовательском режиме. Ясно, что в процессоре в каждый отдельный момент времени может обрабатываться только одна задача. Скорость обработки информации в процессоре настолько велика, что если бы мы обратились за любой порцией информации к внешнему устройству, то простой его был бы в сотни раз большим, чем обработка этого объема информации. Для того, чтобы не было простоев в таких случаях, система прерываний помогает организовать параллельный вычислительный процесс других задач. Все обращения к устройствам ввода/ вывода осуществляются с помощью прерываний. При программировании на языках высокого уровня программист не задумывается, каким образом это происходит. За него решил эту проблему разработчик системы программирования. В Ассемблере программист в нужном месте программы сам обращается к системе прерываний при помощи команды int. При написании программ следует учитывать, что не достаточно только написать соответствующую команду прерывания. Перед написанием команды прерывания следует инициализировать определенные регистры процессора информацией, т.к. одно и то же прерывание может выполнять массу различных функций. Функция, которую должна обработать программа прерывания, заносится в регистр AH. Например, при использовании 21-го прерывания, если AH=1, то в процессор вводится символ с регистра клавиатуры, и он отображается на экране в текущей позиции курсора, а если AH=8, то происходит то же самое, но символ на экране дисплея не отображается. Чаще всего программисты используют 10 и 21 прерывания
Задачи
Задачa1. Написать функцию, которая выводит строку состоящую из одинаковых символов. Длинна строки и символ являются параметрами функции.
#include <iostream>
#include <windows.h>
#include <string.h>
using namespace std;
char*Promt(char*ps)
{
char*bf=new char[strlen(ps)];
CharToOem(ps,bf);
return bf;
}
void Stroka (char x; int n)
{
for (int i=1; i<=k; i++)
cout<<"x";
}
int main ()
{
int y;
char z;
cout<<Promt("Введите любой символ")<<endl;
cin>>z;
cout<<Promt("Введите количество символов")<<endl;
cin>>y;
Stroka (z, y);
cout<<endl;
cin.get();
cin.get();
return 0;
}
Задачa2. Написать программу, которая выводит на экран точечный график функции 0.5x2+4x-2. Диапазон изменения аргумента от -10 до 10; шаг аргумента 0,1. График вывести на фоне координатных осей, центр которой находится в центре экрана.
#include <stdio.h>
#include <conio.h> // подключение библиотек
#include <graphics.h>
int main(void)
{
int gdriver = DETECT, gmode, errorcode;
double x,y; //координаты точек экрана
int a=-10,b=10; //пределы изменения аргумента
double s=0.1; //шаг аргумента
int ix,iy;
int mx,my;
int mashx=10,mashy=2;
initgraph(&gdriver, &gmode, ""); //инициализация графического режима
errorcode = graphresult();
if (errorcode != grOk)
{ //раздел обработки ошибок
printf("Graphics error: %s\n", grapherrormsg(errorcode));
printf("Press any key to halt:");
getch();
}
mx=getmaxx()/2; //нахождение центральных координат по x и y
my=getmaxy()/2;
line(mx,0,mx,getmaxy());
line(0,my,getmaxx(),my);
outtextxy(630,250,"X");
outtextxy(330,5,"Y");
outtextxy(10*a+mx,250,"-10"); // раздел рисования системы координат,
outtextxy(10*b+mx,250,"10"); // вывода букв и значений
outtextxy(10,10,"y=0.5x^2+4x-2");
circle(10*a+mx,my,1);
circle(10*b+mx,my,1);
for(x=a;x<=b;x=x+s)
{ // раздел цикла вывода пикселов
y=0.5*x*x+4*x-2;
ix=mashx*x; //масштаб увеличен в "mashx" раз
iy=y/mashy; // масштаб уменьшен в "mashy" раз
putpixel(ix+mx,-iy+my, LIGHTGRAY);
}
getch();
return 0;
}