Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Запись данных в массив и вывод на экран

75K
14 января 2012 года
NightVamp
2 / / 01.11.2011
Здравствуйте. После компиляции программа не полностью выводит данные из массива, т.е. имя и фамилию, хотя реализовано вроде всё верно, правильно определены размеры слов. Ниже программа, посмотрите, скажите, пожалуйста, в чём там дело! Я сама недостаточно разбираюсь в Паскале, но тоже пересмотрела, мне кажется ошибок нету алгоритмических. Я выделила строки, отвечающие за этот массив, запись в него. Проверить программу можно только если есть дискета во флоппи-дисководе. После компиляции на сообщение "Read disk?" нужно ответить да, тогда непонятность станет видна. На последующие сообщения можно просто ответить нет.
Программа:

{$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.
79K
19 января 2012 года
justgm
5 / / 15.01.2012
lastname:='Vasylieva'; //запись фамилии в массив
firstname:='Svetlana'; //запись имени в массив

Если lastname и firstname массивы то соответственно и обращаться к ним нужно по индексу, т.е. firstname , где i - индекс .
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог