Списки в оперативній пам'яті, операції над списками. Керування програмами. Керування таймером. Системні керуючі блоки. Управління пам’яттю: таблиця векторів переривань, страница 5

1-print  2-AddNRecord  3-DeleteNRecord  4-Sort  5-Save  6-Restor 7-DelAll

8-Insert 9-Edit        q-exit

Surname   Name    Patronimyc  Post      LengthOfService  RateOfPay

1-print  2-AddNRecord  3-DeleteNRecord  4-Sort  5-Save  6-Restor 7-DelAll

8-Insert 9-Edit        q-exit

Висновок: розроблена програма виконує всі необхідні дії вказані по завданню.


Лабораторна робота № 2

“Керування програмами”

Мета роботи: вивчення принципів управління програмами в MS_DOS й придбання практичних навиків роботи з префіксом програмного сегменту та його полями.

Постановка завдання: розробити програму, яка робить  форматний вивід  на друк  свого   Префіксу Програмного Сегменту.

Текст програми:

#include <DOS.h>

#include <conio.h>

#include <string.h>

#include <iostream.h>

#include <stdio.h>

#define   byte   unsigned   char

#define   word   unsigned   int

struct   psp

       {   /* ФОРМАТ   PSP */

         byte   ret_op [2];   /* команда  Int   20h  */

         word   end_of_mem;   /* кiнець доступноi пам'ятi */

         byte    reserved1;

         byte   old_call_DOS  [5];   /* старий виклик   DOS   */

         void   far *term_ptr;   /* адреса завершення **/

         void   far *ctrlbrk_ptr;   /* адреса   обробника   Ctrl+break*/

         void   far *criterr_ptr;   /* адреса   обробника  крiт. помилок*/

         word   father_psp;   /*   Pid  батька*/

         byte   JFT  [ 20 ];   /* таблиця файлiв програми*/

         word   env_seg;       /* адреса оточення*/

         void   far *stack_ptr;    /* адреса   стека*/

         word   JFT_size;     /* розмiр таблицi файлiв */

         byte   *JFT_ptr;     /* адреса таблицi файлiв */

         byte   reserved2 [ 24 ];

         byte   new_call_DOS  [3];/* новий виклик   DOS  */

       }far *p_psp;

    int             i,l,j;

  unsigned char far *s;

  union REGS rr;

void main (){

       unsigned int Segm(0);

       asm xor ax, ax

       asm xor bx, bx

       asm mov ah, 0x62

       asm int 0x21

       asm mov Segm, bx

       clrscr();

       printf ( "   Лабораторна робота N2 " );

        printf ( " \n\n Адреса   PID   =   %.4X\n\n\r ",   Segm );

        p_psp=(struct psp far *)MK_FP(Segm,0);

        printf (" Команди :   \n\r " );

        printf ("   --------\n\r " );

        printf ("  Завершення -   int   20h : " );

        printf ("%02x%02x\n\r",p_psp->ret_op[0],p_psp->ret_op[1]);

        printf ("   Старий виклик  DOS  : " );

        for (i=0;i<5;printf ("%02x ",p_psp->old_call_DOS  [i++]));

        printf ("   \n\r   Новий виклик   DOS  : " );

        for (i=0;i<3;printf("%02x",p_psp->new_call_DOS [i++]));

        printf (" \n\n\r  Aдреса :   \n\r ");

        printf (" -------\n\r ");

        printf ("   Кiнець пам'ятi : ");

        printf ("%04x :   0000\n\r ",p_psp->end_of_mem);

        printf ("   Обробник завершення : " );

        printf ("%Fp\n ",p_psp->term_ptr);

        printf ("   Обробник   Ctrl+break : ");

        printf ("   %Fp\n\r ",p_psp  ->ctrlbrk_ptr);

        printf ("   Обробник   критич. помилки : " );

        printf ("   %Fp\n\r ",p_psp->criterr_ptr );

        printf ("   Стек : " );

        printf ("   %Fp\n\n\r ",   p_psp  ->stack_ptr );

        printf ("   \n\r батько : " );

        printf ("   %04x ",p_psp->father_psp );

        printf ("   \n\n\rнатиснiть будь-яку клавiшу...   \n\r\7 " );

        getch ();

        clrscr ();

        printf ("   Лабораторна робота N2 " );

        printf ("   Управлiння програмами " );

        s=p_psp->JFT_ptr;

        printf ("   \n\n\rтаблиця файлiв : " );

        printf ("%Fp(%d)",s,p_psp->JFT_size);

        s = (unsigned char*) p_psp->JFT_ptr;

        printf (" - в цьому ж  PSP %Fp" ,s);

        printf ("   \n\r " );