Дан код, нужно написать комментарий к каждой строчке этого кода:
program Lab7;
{$ASMMODE Intel}
var
input_str:string;
video_page:byte;
x,y:byte;
i:integer;
symb:char;
color:byte;
N:integer;
Begin
write<'Enter string:'>;
readln ;
if < >=3 and <=76>>
then
begin
asm
mov AH, $0F
int $10
mov video_page, BH
and AL, $7F
mov AH, $0
int $10
end;
y:=12;
x:=round<<80-lenght >/2>;
color:=1;
for i:=1 to lenght do
begin
symb:=input_str[i];
asm
mov AH, $2
mov BH, video_page
mov DL, y
mov DH, x
int $10
mov AH, $9
mov AL, symb
mov BL, color
mov CX, 1
int $10
end;
x:=x+1;
color:=color+1;
if >15> then color:=1;
end;
y:=11;
x:=round<<80-lenght >/2-1>;
N:=lenght +2;
asm
mov AH, $2
mov BH, video_page
mov DL, y
mov DH, x
int $10
mov AH, $0A
mov AL, '*'
mov CX, N
int $10
end;
y:=13;
asm
mov AH, $2
mov BH, video_page
mov DL, y
mov DH, x
int $10
mov AH, $0A
mov AL, '*'
mov CX, N
int $10
end;
y:=12;
asm
mov AH, $2
mov BH, video_page
mov DL, y
mov DH, x
int $10
mov AH, $0A
mov AL, '*'
mov CX, 1
int $10
end;
x:=x+lenght +1;
asm
mov AH, $2
mov BH, video_page
mov DL, y
mov DH, x
int $10
mov AH, $0A
mov AL, '*'
mov CX, 1
int $10
end;
end
else
begin
writeln<'Uncorrect string length'>;
end;
readln;
End.
Ответы на вопрос
Ответ:
program Lab7; // Объявление программы с именем "Lab7".
{$ASMMODE Intel} // Установка режима ассемблерной вставки для Intel-совместимого процессора.
var
input_str: string; // Объявление переменной input_str типа string для хранения вводимой строки.
video_page: byte; // Объявление переменной video_page типа byte для хранения номера видео-страницы.
x, y: byte; // Объявление переменных x и y типа byte для координат экрана.
i: integer; // Объявление переменной i типа integer для циклов.
symb: char; // Объявление переменной symb типа char для хранения символов.
color: byte; // Объявление переменной color типа byte для хранения цвета.
N: integer; // Объявление переменной N типа integer.
Begin // Начало основной части программы.
write<'Enter string:'>; // Вывод строки "Enter string:" на экран.
readln ; // Чтение введенной строки и сохранение её в переменной input_str.
if < >=3 and <=76>> // Проверка, что длина введенной строки находится в диапазоне от 3 до 76 символов.
then
begin
asm // Начало вставки ассемблерного кода.
mov AH, $0F // Установка режима видеорежима для чтения информации о видеопамяти.
int $10 // Вызов прерывания $10 для установки режима.
mov video_page, BH // Сохранение номера видео-страницы.
and AL, $7F // Установка младшего бита AL в 0.
mov AH, $0 // Установка режима видеорежима для записи информации в видеопамять.
int $10 // Вызов прерывания $10 для установки режима.
end; // Завершение вставки ассемблерного кода.
y := 12; // Установка начальной координаты y.
x := round << 80 - lenght > / 2>; // Вычисление начальной координаты x.
color := 1; // Установка начального цвета.
for i := 1 to lenght do // Начало цикла по символам в строке.
begin
symb := input_str[i]; // Получение текущего символа из строки.
asm // Начало вставки ассемблерного кода.
mov AH, $2 // Установка режима видеорежима для установки позиции курсора.
mov BH, video_page // Установка видео-страницы.
mov DL, y // Установка координаты y.
mov DH, x // Установка координаты x.
int $10 // Вызов прерывания $10 для установки позиции курсора.
mov AH, $9 // Установка режима видеорежима для вывода символа с заданным цветом.
mov AL, symb // Загрузка символа.
mov BL, color // Загрузка цвета.
mov CX, 1 // Количество символов для вывода.
int $10 // Вызов прерывания $10 для вывода символа.
end; // Завершение вставки ассемблерного кода.
x := x + 1; // Перемещение курсора вправо.
color := color + 1; // Изменение цвета.
if > 15 > then color := 1; // Проверка и сброс цвета при необходимости.
end; // Завершение цикла.
y := 11; // Установка новой координаты y.
x := round << 80 - lenght > / 2 - 1>; // Вычисление новой координаты x.
N := lenght + 2; // Вычисление значения N.
asm // Начало вставки ассемблерного кода.
mov AH, $2 // Установка режима видеорежима для установки позиции курсора.
mov BH, video_page // Установка видео-страницы.
mov DL, y // Установка координаты y.
mov DH, x // Установка координаты x.
int $10 // Вызов прерывания $10 для установки позиции курсора.
mov AH, $0A // Установка режима видеорежима для вывода символа.
mov AL, '*' // Загрузка символа '*'.
mov CX, N // Загрузка количества символов для вывода.
int $10 // Вызов прерывания $10 для вывода символа.
end; // Завершение вставки ассемблерного кода.
y := 13; // Установка новой координаты y.
asm // Начало вставки ассемблерного кода.
mov AH, $2 // Установка режима видеорежима для установки позиции курсора.
mov BH, video_page // Установка видео-страницы.
mov DL, y // Установка координаты y.
mov DH, x // Установка координаты x.
int $10 // Вызов прерывания $10 для установки позиции курсора.
mov AH, $0A // Установка режима видеорежима для вывода символа.
mov AL, '*' // Загрузка символа '*'.
mov CX, N // Загрузка количества символов для вывода.
int $10 // Вызов прерывания $10 для вывода символа.
end; // Завершение вставки ассемблерного кода.
y := 12; // Установка новой координаты y.
asm // Начало вставки ассемблерного кода.
mov AH
Объяснение: