Запись данных в массив и вывод на экран
Программа:
{$N+ $G+}
uses crt;
var
MIRR,MISR,MIMR,state,nsec:byte;
massseg1,massofs1:word;
massseg2,massofs2:word;
i:word;
c:char;
var
mass1:array [1..1024] of char;
mass2:array [1..1024] of char;
mass3:array [1..1024] of char;
lastname :array [1..9] of char; //инициализация массива фамилии
firstname :array [1..8] of char; //инициализация массива имени
procedure mask_interrupt; //процедура маскирования
begin
asm
{-----Interrupt Masking---------}
mov al,MIMR
or al,01000000b
out 21h,al
in al,21h
{-------------------------------}
end;
end;
procedure restore_mask; //процедура размаскирования
begin
{-----Restore Mask---------}
asm
mov al,MIMR
out 21h,al
end;
end;
procedure read_disk; //процедура чтения диска
begin
writeln('Disk reading:');
asm
mov ah,02
mov al,2
mov ch,15
mov cl,10
mov dh,1
mov dl,0
mov bx,massseg2
mov es,bx
mov bx,massofs2
int 13h
mov state,ah
mov nsec,al
end;
writeln('Data on disk:'); //чтение данных с диска
for i:=1 to 1024 do write(mass2);
for i:=1 to 1024 do mass2:=' ';
writeln;
end;
procedure disk_write(p:word); //процедура записи данных на диск
var
write_mass_seg:word;
write_mass_ofs:word;
begin
writeln('Writing disk:'); //запись данных на диск
if p = 1 then
begin
write_mass_seg:=seg(mass1);
write_mass_ofs:=ofs(mass1);
end
else
begin
write_mass_seg:=seg(mass3);
write_mass_ofs:=ofs(mass3);
end;
asm
mov ah,03h
mov al,2
mov ch,15
mov cl,10
mov dh,1
mov dl,0
mov bx,write_mass_seg
mov es,bx
mov bx,write_mass_ofs
int 13h
mov state,ah
mov nsec,al
end;
end;
procedure decode_error_code(e:byte); //процедура определения ошибки от драйвера
begin
case state of
0: if e=1 then writeln('Write sectors: ',nsec)
else writeln('Read sectors: ',nsec);
1:writeln('Bad command!');
2:writeln('Marker block address not found!');
3:writeln('Enable protect of record');
4:writeln('Sector not found');
6:writeln('Disk was changed');
8:writeln('PIC bad addres');
9:writeln('Out of border 64K');
12:writeln('Bad number of cylinder');
16:writeln('CRC check error');
32:writeln('Fail PIC');
64:writeln('Error of cylinder find');
128:writeln('End of timeout');
end;
end;
begin
clrscr; //очистка экрана
writeln('Vasylieva Svetlana, 628 gr.');
lastname:='Vasylieva'; //запись фамилии в массив
firstname:='Svetlana'; //запись имени в массив
for i:=1 to 9 do mass1:=lastname;
for i:=10 to 512 do mass1:=' ';
for i:=1 to 8 do mass1[512+i]:=firstname;
for i:=521 to 1024 do mass1:=' ';
for i:=1 to 1024 do mass2:=' ';
for i:=1 to 1024 do mass3:=' ';
asm
xor ax,ax
mov al,00001010b
out 20h,al
in al,20h
mov MIRR,al
mov al,00001001b
out 20h,al
in al,20h
mov MISR,al
in al,21h
mov MIMR,al
end;
massseg2:=seg(mass2); //определение значения сегмента
massofs2:=ofs(mass2); //определение значения смещения
repeat
writeln('Read disk? Yes - y ,No - n');
c:=readkey;
until (c='y') or (c='n');
if c='y' then
begin
read_disk;
decode_error_code(2);
end;
repeat
writeln('Clear disk? Yes - y ,No - n');
c:=readkey;
until (c='y') or (c='n');
if c='y' then
begin
disk_write(2);
decode_error_code(1);
read_disk;
decode_error_code(2);
end;
repeat
writeln('Mask Interrupt? Yes - y ,No - n');
c:=readkey;
until (c='y') or (c='n');
if c='y' then mask_interrupt;
repeat
writeln('Write sectors? Yes - y ,No - n');
c:=readkey;
until (c='y') or (c='n');
if c='y' then
begin
disk_write(1);
decode_error_code(2);
end;
repeat
writeln('Show sectors? Yes - y ,No - n');
c:=readkey;
until (c='y') or (c='n');
if c='y' then
begin
read_disk;
decode_error_code(2);
end;
repeat
writeln('Restore Mask? Yes - y ,No - n');
c:=readkey;
until (c='y') or (c='n');
if c='y' then restore_mask;
end.
firstname:='Svetlana'; //запись имени в массив
Если lastname и firstname массивы то соответственно и обращаться к ним нужно по индексу, т.е. firstname , где i - индекс .