Изучение архитектуры и системы команд INTEL-совместимых микропроцессоров. Коршунов А.Д. - 38 стр.

UptoLike

Составители: 

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                  ; конец