Инструменты пользователя

Инструменты сайта


examination:asm:question46

Вопрос №46. Сравнение цепочек данных

Команды, реализующие операцию-примитив сравнения цепочек, производят сравнение элементов цепочки-источника с элементами цепочки-приемника: CMPS адрес_приемника, адрес_источника – сравнить строки CMPSB – сравнить строку байтов CMPSW – сравнить строку слов CMPSD – сравнить строку двойных слов

Команда CMPS

Синтаксис команды CMPS адрес_приемника, адрес_источника

Адрес_источника определяет адрес цепочки-источника в сегменте данных, заранее загружаемый в пару регистров DS:ESI/SI Адрес_приемника определяет адрес цепочки-приемника, которая должна находиться в в дополнительном сегменте, заранее загружаемый в пару регистров ES:EDI/DI

Алгоритм работы CMPS заключается в последовательном выполнении вычитания (элемент цепочки-источника минус элемент цепочки-получателя) над очередными элементами обеих цепочек. Принцип выполнения такой же как у команды CMP. Производится вычитание элементов, не записывая при этом результата и устанавливаются флаги ZF, SF,OF. После вычитания очередных элементов цепочек командой CMPS индексные регистры ESI/SI и EDI/DI автоматически изменяются в соответствии со значением флага DF на значение, равное размеру элемента сравниваемых цепочек. С командой CMPS можно использовать префиксы повторения REP,REPE,REPZ,REPNE,REPNZ. После каждой итерации цепочечная команда автоматически осуществляет инкремент-декремент значения адреса в соответствующих индексных регистрах. Поэтому после выхода из цикла в этих регистрах будут храниться адреса элементов, находящихся в цепочке ПОСЛЕ элементов, послуживших причиной выхода из цикла.

examination/asm/question46.txt · Последние изменения: 2014/01/15 08:13 (внешнее изменение)