Студопедия

КАТЕГОРИИ:


Архитектура-(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
(STD или CLI).

2. Инициализировать УКАЗАТЕЛИ.
То есть установить DS:SI на цепочку-источник
и ES:DI – на цепочку-приемник.

 

Пример: ПЕРЕСЫЛКА СТРОКИ

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 на следующие элементы.

 

<== предыдущая лекция | следующая лекция ==>
Movs адрес_приемника, адрес_источника | JCXZ меткаЦепочкиСравнилиПолностью
Поделиться с друзьями:


Дата добавления: 2014-01-07; Просмотров: 226; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.008 сек.