Студопедия

КАТЕГОРИИ:


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

ПРИМЕР применения команды repne scas

JCXZ меткаЦепочкуПросканировалиПолностью

REPX SCAS адрес_приемника

Анализ причины выхода из цикла

ПРЕФИКСЫ ПОВТОРЕНИЯ ДЛЯ SCAS

Если эта метка была определена директивой DD, то содержимое аккумулятора EAX сравнивается с двойным словом цепочки.

Если эта метка была определена директивой DW, то содержимое аккумулятора AX сравнивается со словом цепочки.

РАЗМЕР ЭЛЕМЕНТОВ определяется по атрибуту приемника.

SCAs адрес_приемника

У этой команды машинного кода нет. Она существует только для удобства программиста.

ФОРМАТЫ КОМАНД СКАНИРОВАНИЯ

SCAS адрес_приемника
(SCAn Strings) — сканировать цепочку;

РЕАЛЬНО ТРАНСЛЯТОР СОЗДАЕТ ТАКИЕ КОМАНДЫ:

SCASB
(SCAn String of Bytes) — сканировать цепочку байт;

SCASW
(SCAn String of Words) — сканировать цепочку слов;

SCASD
(SCAn String of Double words) — сканировать цепочку двойных слов.

 

Вычитает из «ключа» (байта, слова или двойного слова, которые находятся в аккумуляторе), элемент цепочки, адресуемой операндом адрес_приемника.
ФЛАГИ УСТАНАВЛИВАЮТСЯ, РЕЗУЛЬТАТ НЕ СОХРАНЯЕТСЯ.

Если эта метка была определена директивой DB,
то содержимое аккумулятора AL сравнивается с байтом цепочки.

При транслятор преобразует ее в одну из трех машинных команд: CMPSB, CMPSW или CMPSD.

 

REPE или REPZ — если необходимо организовать ПРОПУСК одинаковых «ключей» в цепочке. Сканирование делается до тех пор, пока не будет выполнено одно из двух условий:

Или достигнут конец цепочки (содержимое CX равно нулю);

Или в цепочке встретился элемент, НЕ СОВПАДАЮЩИЙ с «ключом» из аккумулятора (флаг ZF стал равен нулю).

REPNE или REPNZ — если нужно организовать ПОИСК в цепочке элемента, равного «ключу». Сканирование проводится до тех пор, пока не будет выполнено одно из двух условий:

Или достигнут конец цепочки (содержимое CX равно нулю);

Или в цепочке встретился элемент, СОВПАДАЮЩИЙ с «ключом» из аккумулятора (флаг ZF стал равен единице).

 

; тут ситуация, когда цикл сканирования
; прервался РАНЬШЕ, чем окончилась цепочка,
; то есть на основании анализа флага ZF.

; При этом в СХ останется НЕНУЛЕВОЕ значение.

меткаЦепочкуПросканировалиПолностью:

; а тут ситуация, когда причиной выхода
; стало CX = 0, то есть просмотрели ВСЮ цепочку.

<1> Поиск в строке первой русской ‘а’. Автор: В. ЮРОВ

<2> MASM

<3> MODEL small

<4> STACK 256

<5>.DATA

<6>;тексты сообщений

<7> fnd db 0ah,0dh,'Символ найден! ','$'

<8> nochar db 0ah,0dh,'Символ не найден.','$'

<9>;строка для поиска

<10> string db 'Поиск символа в этой строке.',0ah,0dh,'$'

<11>.CODE

<12> ASSUME ds:@data,es:@data

<13> main:

<14> mov ax,@data

<15> mov ds,ax

<16> mov es,ax;настройка ES на DS

<17> mov ah,09h

<18> lea dx,string

<19> int 21h;вывод сообщения string

<20> mov al,'а';символ для поиска — `а`(кириллица)

<21> cld;сброс флага df

<22> lea di,string;загрузка в es:di смещения строки

<23> mov cx,29;для префикса repne — длина строки

<24>;поиск в строке (пока искомый символ

; и символ в строке не совпадут)

<25>;выход при первом совпадении

<26> REPNE SCAS string

<27> je found;если равны — переход на обработку,

<28> failed:;иначе выполняем некоторые действия

<29>;вывод сообщения о том, что символ не найден

<30> mov ah,09h

<31> lea dx,nochar

<32> int 21h;вывод сообщения nochar

<33> jmp exit;на выход

<34> found:;совпали

<35> mov ah,09h

<36> lea dx,fnd

<37> int 21h;вывод сообщения fnd

<38>;теперь, чтобы узнать место, где совпал элемент в строке,

<39>;необходимо уменьшить значение в регистре di

; и вставить нужный обработчик

<40> dec di

<41>;... <вставьте код-обработчик здесь >...

<42> exit:;выход

<43> mov ax,4c00h

<44> int 21h

<45> end main

 

ЗАГРУЗКА ЭЛЕМЕНТА ЦЕПОЧКИ В АККУМУЛЯТОР

<== предыдущая лекция | следующая лекция ==>
Смысл команды сравнения scas | И их использование
Поделиться с друзьями:


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


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



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




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