КАТЕГОРИИ: Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748) |
СМЫСЛ операции сравнения cmps
Выполнить REP MOVS. Занести в CX количество элементов, подлежащих обработке. ...... Dec CX Inc DI Dec DI Jz go_ahead Pushf ... ИМИТАЦИЯ REP MOVSb обычным кодом MOVSB, MOVSW или MOVSD. То пересылаться будут двойные слова. Или если с помощью директивы DD, То пересылаться будут байты. Если эти метки были определены директивой DB, В цепочку, адресуемую операндом адрес_приемника. Из цепочки, адресуемой операндом адрес_источника, Копирует байт, слово или двойное слово РАЗМЕР ЭЛЕМЕНТОВ определяется по атрибутам приемника и источника. Например: При трансляции в зависимости от типа меток-операндов транслятор преобразует ее в одну из трех машинных команд:
JCXZ contin; если CX = 0, обходим цикл CYCLE: ;------------------ Пересылка байта mov BX, [SI] mov ES: [DI], BX ;------------------ Анализ флага DF pop BX; в ВХ - копия регистра флагов TEST BX, 400h; DF – бит со смещением 10 ;------------------ Смещение указателей dec SI; здесь DF = 1. Смещаемся назад. go_ahead: inc SI; здесь DF = 0. Смещаемся вперед. ;------------------ Уменьшение счетчика JNZ CYCLE; если CX <> 0, повторяем цикл contin:
ОБЩАЯ СХЕМА ИСПОЛЬЗОВАНИЯ MOVS 1. Задать НАПРАВЛЕНИЕ обработки через DF 2. Инициализировать УКАЗАТЕЛИ.
Пример: ПЕРЕСЫЛКА СТРОКИ MODEL small .STACK 256 .data source db 'Тестируемая строка$‘;строка-источник dest db 19 DUP (' ');строка-приёмник .code main:;точка входа в программу mov ax, @data;загрузка сегментных регистров mov ds,ax;настройка регистров DS и ES на адрес сегмента данных mov es,ax CLD;сброс флага DF — обработка строки от начала к концу lea si,source;загрузка в si смещения строки-источника lea di,dest;загрузка в DS смещения строки-приёмника mov cx,20;для префикса rep — счетчик повторений (длина строки) REP MOVS DEST, SOURCE;пересылка строки lea dx,dest mov ah,09h;вывод на экран строки-приёмника int 21h exit: mov ax,4c00h int 21h end main
КОМАНДЫ СРАВНЕНИЯ ЦЕПОЧЕК
Шаг 1. ВЫЧЕСТЬ элемент приемника из элемента источника (Флаги!) Шаг 2. Сдвинуть указатели SI и DI на следующие элементы.
Дата добавления: 2014-01-07; Просмотров: 243; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |