ВУЗ:
Составители:
19
E. Обрабатываем массивы данных.
Дан массив байтов. Получить другой массив, в котором каждый элемент первого
массива увеличен на 5. Пример исходных данных: (1,1,2). Результат: (6,6,7).
Рассматривая массив как строку байтов, разместим исходные данные в сегменте
данных (DS) с адреса 0000h, а результат - в дополнительном сегменте (ES) также с адреса
0000h.
Программа для учебной модели AsmEd приведена ниже.
MOV SI, 0 ; начальное значение для LODS
MOV DI, 0 ; начальное значение для STOS
MOV CX, 3 ; в нашем примере - три исходных элемента
M:
LODSB ; загрузим очередной байт массива
ADD AL, 5 ; обработаем его, как указано в задаче
STOSB ; запишем обработанный байт в массив результата
LOOP M
HLT
Исходные данные, результат, выполнение.
Запустив AsmEd, наберём приведённую программу. Переключившись в сегмент
данных (0001:0000h) и нажимая Shift-Enter, введём 1, 1, 2 в три последовательно
расположенных ячейки. Далее следует переключиться в дополнительный сегмент данных
(0003:0000h), откомпилировать программу (F9), запустить её (F5). Мы увидим в
дополнительном сегменте результат: 6, 6, 7.
F. Программируем дисплейный адаптер.
При работе адаптера в текстовом режиме изображение состоит, как правило, из 25
строк по 80 символов в каждой. Этот режим имеет номер 3 (для функции переключения
режимов). Изображение размещается в видеобуфере с началом по адресу B800h:0000h для
реального адаптера и 0F600h:0000h для модели (виртуального дисплея системы AsmEd).
Каждому символу на экране соответствует два байта – с четным и нечетным адресом.
Байты с чётными адресами (0, 2, 4…) содержат ASCII-коды отображенных на экране
символов, байты с нечётными адресами (1, 3, 5…) – их цветовые атрибуты, а именно цвет
символа, цвет фона (последний задается для каждого знакоместа отдельно, а не сразу для
всего экрана) и признак аппаратного мерцания (если он установлен, символ высвечивается
и гаснет с частотой примерно два раза в секунду). Формат атрибутного байта следующий:
Здесь биты R, G, B означают включение красного, зеленого, синего цветовых
компонентов соответственно, I (Intensity) – признак повышенной яркости, F
(Flash) – атрибут мерцания. Очевидно, что можно получить 16 цветов символа, 8
цветов фона, наличие или отсутствие мерцания. Например, байт 00001010 задает
ярко-зеленый символ на черном фоне; байт 10010110 – желтый (R+G) мерцающий
19 E. Обрабатываем массивы данных. Дан массив байтов. Получить другой массив, в котором каждый элемент первого массива увеличен на 5. Пример исходных данных: (1,1,2). Результат: (6,6,7). Рассматривая массив как строку байтов, разместим исходные данные в сегменте данных (DS) с адреса 0000h, а результат - в дополнительном сегменте (ES) также с адреса 0000h. Программа для учебной модели AsmEd приведена ниже. MOV SI, 0 ; начальное значение для LODS MOV DI, 0 ; начальное значение для STOS MOV CX, 3 ; в нашем примере - три исходных элемента M: LODSB ; загрузим очередной байт массива ADD AL, 5 ; обработаем его, как указано в задаче STOSB ; запишем обработанный байт в массив результата LOOP M HLT Исходные данные, результат, выполнение. Запустив AsmEd, наберём приведённую программу. Переключившись в сегмент данных (0001:0000h) и нажимая Shift-Enter, введём 1, 1, 2 в три последовательно расположенных ячейки. Далее следует переключиться в дополнительный сегмент данных (0003:0000h), откомпилировать программу (F9), запустить её (F5). Мы увидим в дополнительном сегменте результат: 6, 6, 7. F. Программируем дисплейный адаптер. При работе адаптера в текстовом режиме изображение состоит, как правило, из 25 строк по 80 символов в каждой. Этот режим имеет номер 3 (для функции переключения режимов). Изображение размещается в видеобуфере с началом по адресу B800h:0000h для реального адаптера и 0F600h:0000h для модели (виртуального дисплея системы AsmEd). Каждому символу на экране соответствует два байта – с четным и нечетным адресом. Байты с чётными адресами (0, 2, 4…) содержат ASCII-коды отображенных на экране символов, байты с нечётными адресами (1, 3, 5…) – их цветовые атрибуты, а именно цвет символа, цвет фона (последний задается для каждого знакоместа отдельно, а не сразу для всего экрана) и признак аппаратного мерцания (если он установлен, символ высвечивается и гаснет с частотой примерно два раза в секунду). Формат атрибутного байта следующий: Здесь биты R, G, B означают включение красного, зеленого, синего цветовых компонентов соответственно, I (Intensity) – признак повышенной яркости, F (Flash) – атрибут мерцания. Очевидно, что можно получить 16 цветов символа, 8 цветов фона, наличие или отсутствие мерцания. Например, байт 00001010 задает ярко-зеленый символ на черном фоне; байт 10010110 – желтый (R+G) мерцающий