ВУЗ:
Составители:
38
Приложение 2
Пример программы для системы AsmEd
В данном приложении приведен пример программы на Ассемблере. Данная
программа копирует текст из памяти по адресу DS:0000 в видеопамять до тех пор,
пока не встретится символ с кодом 0, причем цифры выделяются цветом,
отличающимся от цвета остальных символов. Исходный текст этой программы
находится в папке Examples в каталоге приложения (см. листинг 1).
Чтобы скопировать
строку из одного места памяти в другое, необходимо
считывать каждый символ из исходной строки и записывать его в
соответствующее место строки-приемника. Для записи в видеопамять необходимо
для каждого символа указывать атрибуты цвета. Чтобы символы цифр выделить
другим цветом, необходимо каждый считанный символ сравнивать с символами
цифр 0 и 9 и, в зависимости
от того, является ли считанный символ цифрой или
нет, записывать те или иные атрибуты цвета.
Листинг 1. Пример программы
(01) xor si,si ; очищаем SI - смещение строки-источника
(02) mov di,0F600h ; 0F600h в DI – смещение строки-приемника
(03) cld ; сбрасываем флаг DF
(04) loop_lbl:
(05) lodsb ; загружаем символ в AL
(06) test al,al ; если символ с кодом 0
(07) jz quit ; то завершаем копирование
(08) cmp al,30h ; сравниваем AL и символ цифры "0"
(09) jb not_number ; если меньше, то не цифра
(10) cmp al,39h ; сравниваем AL и символ цифры "9"
(11) ja not_number ; если больше,
то не цифра
(12) mov ah,0Ah ; иначе это цифра - ее атрибут в AH
(13) jmp next ; идем дальше
(14) not_number: ; символ не является цифрой
(15) mov ah,07 ; его атрибут в AH
(16) next: stosw ; записываем символ и атрибут в видеопамять
(17) jmp loop_lbl ; следующий символ
(18) quit: hlt ; конец
38 Приложение 2 Пример программы для системы AsmEd В данном приложении приведен пример программы на Ассемблере. Данная программа копирует текст из памяти по адресу DS:0000 в видеопамять до тех пор, пока не встретится символ с кодом 0, причем цифры выделяются цветом, отличающимся от цвета остальных символов. Исходный текст этой программы находится в папке Examples в каталоге приложения (см. листинг 1). Чтобы скопировать строку из одного места памяти в другое, необходимо считывать каждый символ из исходной строки и записывать его в соответствующее место строки-приемника. Для записи в видеопамять необходимо для каждого символа указывать атрибуты цвета. Чтобы символы цифр выделить другим цветом, необходимо каждый считанный символ сравнивать с символами цифр 0 и 9 и, в зависимости от того, является ли считанный символ цифрой или нет, записывать те или иные атрибуты цвета. Листинг 1. Пример программы (01) xor si,si ; очищаем SI - смещение строки-источника (02) mov di,0F600h ; 0F600h в DI – смещение строки-приемника (03) cld ; сбрасываем флаг DF (04) loop_lbl: (05) lodsb ; загружаем символ в AL (06) test al,al ; если символ с кодом 0 (07) jz quit ; то завершаем копирование (08) cmp al,30h ; сравниваем AL и символ цифры "0" (09) jb not_number ; если меньше, то не цифра (10) cmp al,39h ; сравниваем AL и символ цифры "9" (11) ja not_number ; если больше, то не цифра (12) mov ah,0Ah ; иначе это цифра - ее атрибут в AH (13) jmp next ; идем дальше (14) not_number: ; символ не является цифрой (15) mov ah,07 ; его атрибут в AH (16) next: stosw ; записываем символ и атрибут в видеопамять (17) jmp loop_lbl ; следующий символ (18) quit: hlt ; конец