for (i=0;++i<=p_psp->JFT_size;printf("%d ",(s++)));
printf (" \n\n\rоточення DOS : " );
printf ("%.4X\n\r",p_psp->env_seg );
s= (unsigned char far *)MK_FP(p_psp->env_seg, 0);
if (_version > 2){
for (i = 0; ( (*(s + i) != 0) || ( *(s + i + 1) != 0) ) ;i++)
{
printf ( "%c", *(s+i) );
if ( (*(s + i) == 0) )
cout << endl;
}
}
printf (" \n\n\n\n\rнатиснiть будь-яку клавiшу... \7 " );
printf ("\n");
getch (); clrscr ();
}
Результати роботи програми:
Лабораторна робота N2
Адреса PID = 8A53
Команди :
--------
Завершення - int 20h : cd20
Старий виклик DOS : 9a f0 fe 1d f0
Новий виклик DOS : cd21cb
Aдреса :
-------
Кiнець пам'ятi : a000 : 0000
Обробник завершення : 19AC:0201
Обробник Ctrl+break : 125A:3B7B
Обробник критич. помилки : FD9D:2147
Стек : 8F75:0E50
батько : 11aa
натиснiть будь-яку клавiшу...
Лабораторна робота N2 Управлiння програмами
таблиця файлiв : 8A53:0018(20) - в цьому ж PSP 8A53:0018
1 1 1 0 2 C FF FF FF FF FF FF FF FF FF FF FF FF FF FF
оточення DOS : 8A41
TMP=C:\WINDOWS\TEMP
TEMP=C:\WINDOWS\TEMP
PROMPT=$p$g
winbootdir=C:\WINDOWS
COMSPEC=C:\WINDOWS\COMMAND.COM
ALSINI=C:\WINDOWS\ALS3.INI
windir=C:\WINDOWS
BLASTER=A220 I5 D1 H1 REC0 T6 P330
PATH=F:\MY_WORK\BC\BIN
CMDLINE=bc lab2.cpp
натиснiть будь-яку клавiшу...
Висновок: ознайомилась з принципами управління програмами в MS_DOS та придбала практични навикі роботи з префіксом програмного сегменту та його полями.
Лабораторная робота № 3
“Керування таймером”
Мета роботы: вивчення функцiй системного таймера та закріплення практичних навиків роботи з ним.
Постановка завдання: побудувати модель аналого-цифрового перетворювача, яка працюї у реальному часi. Процес, який дискретизується, моделюїться програмою (програмним блоком), який виконуї циклiчне обчислення
функцiї y=F(x), де x - номер iтерацiї. Перетворювач моделюїться програмою, яка виконуї iз заданою частотою (у реальному часi) переривання процесу, зчитування та запам'ятовування поточного значення функцiї. Запам'ятати не менш як 80 значень функцiї.Забезпечити наочне подання результатiв роботи "АЦП".
N |
R |
y = F(x) |
Частота (гц) |
1 |
0 – 10 |
y=((100-x)%100)*0.5+R+100 |
72.7 |
Текст програми:
#include <dos.h>
#include <math.h>
#include <stdlib.h>
#include <stdio.h>
#include <graphics.h>
#include <time.h>
#include <conio.h>
#define TIMEINT 8
#define NN 100
void interrupt (*oldtime)();
void interrupt newtime();
static int y[NN];
static int ny;
static int yc;
static int kf;
union REGS rr;
struct SREGS sr;
void *readvect(int in);
void writevect(int in, void *h);
void main()
{
unsigned oldtic=65535u;
unsigned newtic=16406u;
int dd,
m,
errorcode;
double x;
textbackground(0);
clrscr();
textattr(0x0a);
cprintf(" Лабораторна робота N7");
cprintf("\n Керування таймером ");
textattr(0x8e);
gotoxy(35,12);
cprintf("Please wait");
outportb(0x43,0x36);
outportb(0x40,newtic&0x00ff);
outportb(0x40,newtic>>8);
ny=-1;
kf=15;
oldtime= (void interrupt (*) ()) readvect(TIMEINT);
writevect(TIMEINT,newtime);
randomize();
for (x=ny=0; ny<NN; x+=1)
yc = ( (int(100-x)) % 100 ) * 0.5 + (unsigned (random (11))) +100;
/* Вiдновлення вектора */
writevect(TIMEINT,oldtime);
/* Вiдновлення канала 0 */
outportb(0x43,0x36); /* Керуючий байт */
outportb(0x40,oldtic&0x00ff); /* Молодший байт лiчилника */
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.