Выделить на экране красным цветом все цифры (tasm) - Assembler
Формулировка задачи:
Ребята нужна помощь!
Выделить на экране красным цветом все цифры.
Решение задачи: «Выделить на экране красным цветом все цифры (tasm)»
textual
Листинг программы
org 100h mov ax, 0B800h mov ds, ax mov es, ax mov cx, 80*25 xor si, si xor di, di @L: lodsw cmp al, 30h jb @F cmp al, 39h ja @F and ah, 0F0h or ah, 0Ch @@: stosw loop @L xor ax, ax int 16h int 20h
Объяснение кода листинга программы
Код на языке Assembler выполняет следующие действия:
- Указывает точку входа в программу (org 100h).
- Устанавливает сегменты данных и кода (mov ax, 0B800h; mov ds, ax; mov es, ax).
- Вычисляет количество байтов, которые нужно обработать (mov cx, 80*25).
- Инициализирует указатели на байты (xor si, si; xor di, di).
- Происходит циклическая обработка каждого байта в диапазоне от 0 до 80 (lodsw; cmp al, 30h; jb @F; cmp al, 39h; ja @F; and ah, 0F0h; or ah, 0Ch; stosw; loop @L).
- Завершает работу программы (xor ax, ax; int 16h; int 20h).
Обратите внимание, что числа 30h и 39h соответствуют символам
0
и9
в кодировке ASCII. Значение переменной cx (количество байтов) равно 80*25=2000. Переменные si и di являются указателями на байты, которые обрабатываются в цикле. Значение переменной ax в конце цикла равно 0, что позволяет использовать оператор loop для продолжения цикла до тех пор, пока значение переменной cx не станет равным 0. Переменная ax также используется для подачи адреса в функции int 16h и int 20h, которые используются для завершения работы программы.