Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
OS лаба1-2.docx
Скачиваний:
2
Добавлен:
07.08.2019
Размер:
446.45 Кб
Скачать

Опис головних Зміннних

_________________________________________________________________________

/* peek повертає слово в пам'яті місця, зазначеного як сегмент:offset*/

/*int peek (unsigned segment, unsigned);*/

/* змінює ціле значення в комірці пам'яті даного сегменту: */

//**Параметри****

/* 0 Перший тип флоппі диску

1 Другий тип флоппі диску

2 Третій тип флоппі диску

... і (etc.)

0x80 Перший тип диску

0x81 Другий тип диску

0x82 Третій тип диску */

/*head і biosdisk

track і biosdisk Це специфіки старту даного сектору

sector і biosdisk */

/*nsects і biosdisk Номери секторів для читання (запису))*/

/*buffer і biosdisk Адреса у памяті де сегмент даних може

бути зчитаний (записаний)*/

________________________________________________________________________

#include<stdio.h>

#include <conio.h>

#include <bios.h>

int main ()

{

textcolor(12);

textbackground(3);

clrscr();

int i,k,flag;

char buffer[512];

char buf [512];

int ntrk=83;

puts("************************ [Po4atok ] **********************\n");

for(i=0;i<512;i++) buffer[i] =0;

for(k=0;k<18;k++)

{

/*Nomer dorigki*/

buf[4*k]=ntrk;

/*Nomer golovki(robochoi poverhni)*/

buf[4*k+1]=0;

/*Nomer sektora vid 1 do 18*/

buf[4*k+2]=k+1;

/*Dovgna sektora 512 bayt*/

buf[4*k+3]=1;

}

flag=biosdisk(5,0,0, ntrk, 1, 18, buf);

if(flag!=0){

printf("< ERROR on drive A: Pomilka formatuvanya > \n");

getch();

return(0);

}

flag=biosdisk(3,0,0, ntrk, 1,18, buffer);

if(flag!=0)

{ printf("< ERROR on drive A: Pomlka zapsu na Disck >\n");

getch();

} puts("END"); getch(); }

Програма № 2. Нестандартне форматування 39-ї доріжки. (мова Сі)

#include <dos.h>

#include <stdio.h>

#include <bios.h>

#include <conio.h>

int main(void)

{

textcolor(12);

textbackground(4);

clrscr();

unsigned char tf[11]={0xDF, 2, 0x25,2,0x12, 0x2A, 0xFF, 0x13, 0xF6,25,4};

unsigned char buf[256],buffer[512];

int seg, ofs, k, l, ntrk, flag,i;

for(i=0;i<512;i++) buffer[i] =0;

printf("*********************** [ Start ] *******************\n");

seg=peek(0,122);

ofs=peek(0,120);

poke(0,122,_DS);

poke(0,120,(unsigned)tf);

_ES=_DS;

ntrk=79;

for(k=0;k<18;k++)

{

buf[4*k]=ntrk;

buf[4*k+l]=0;

buf[4*k+2]=k+l;

buf[4*k+3]=l;

}

flag=biosdisk(5,0, 0,ntrk,1,18, buf);

if(flag!=0)

{

printf(" < ERROR on drive A: Pomilka formatuvanya >\n");

poke(0,122, seg);

poke(0,120, ofs);

getch();

return(0);

}

flag=biosdisk(3,0,0,ntrk,1,1, buffer);

if(flag!=0)

{

printf(" < ERROR on drive A: Pomilka zapsu na Disk >\n");

poke(0,122, seg);

poke(0,120, ofs);

getch();

return(0);

}

poke(0,120, ofs);

printf(" ******************** END PROCESS *********************\n");

getch();

return 0;

}

Прогнама № 3. Програма читання (написана мовою Assembler )

.model small

.data

tf db 0DFh,002h,025h,002h,012h,02Ah,0FFh,013h,0F6h,25,4

bf db 513 dup ('$')

s_tf_ofs dw ?

s_tf_seg dw ?

.code

Start:

mov ax, seg bf

mov ds,ax

mov ax, offset tf

mov bx, 0

mov es, bx

mov bx, 120

mov cx, es:[bx]

mov s_tf_ofs, cx

mov es:[bx], ax

mov ax, seg tf

mov bx, 0

mov es, bx

mov bx, 122

mov cx, es:[bx]

mov s_tf_seg, cx

mov es:[bx], ax

mov ax, 00201h

mov bx, offset bf

mov cx, 02701h

mov dx, seg bf

mov es, dx

mov dx, 0

int 13h

mov bx, 0

mov es, bx

mov bx, 120

mov cx, s_tf_ofs

mov es:[bx], cx

mov bx, 0

mov es, bx

mov bx, 122

mov cx, s_tf_seg

mov es:[bx], cx

cmp ah, 0

je met0

mov ax, 04C00h

int 21h

met0:

mov ah,9

mov dx, offset bf

int 21h

mov ax, 04C00h

int 21h

end Start

Щоб перевірити 9-тий параметр бази диска, а саме Символ-заповнювач формату, змінюю 9-тий параметр програми №3 у рядку змінної [tf] на FFh.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]