Информатика, вопрос задал kp481 , 11 месяцев назад

Дан код, нужно написать комментарий к каждой строчке этого кода:

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.

Ответы на вопрос

Ответил nurekesh00
1

Ответ:

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

Объяснение:

Pascal

Новые вопросы