Речь идет о так называемых цепочечных командах, которые иногда называют командами обработки строк символов. Дело в том, что строка символов — это последовательность байтов, а цепочка — это более общее название последовательностей элементов другого размера (слов или двойных слов).
Процессору абсолютно все равно, что храниться в такой последовательности – буквы, цифры или все вперемешку, главное – «что бы костюмчик сидел» , то есть что бы элементы имели подходящий размер, а еще составляли последовательный блок памяти. Так что описанные далее команды подойдут и для массива и для строки..
Для обработки цепочек имеются семь групп команд:
- пересылки
- сравнения
- сканирования (поиска символа в строке)
- загрузки элемента из цепочки
- загрузки элемента в цепочку
- получения элемента цепочки из порта ввода-вывода
- вывода элемента цепочки в порт
Все они кроме обработки текущего элемента цепочки также модифицируют значения регистров si и/или di для перехода к следующему элементу последовательности. По требованию процессора строка источник располагается в основном сегменте данных (ее адрес определяется парой регистров DS:SI), а строка приемник – в дополнительном сегменте данных(ES:DI)!!!!!!!
Вот как это делается: Dseg1 segment para public ‘data’ ;объявляем основной сегмент данных Sent_source db ‘Это строка источник’ ;а в нем - строка источник …. Dseq1 ENDS Dseg2 segment para public ‘data’; а это – дополнительный сегмент кода Sent_destination db ‘Это строка приемник’; и строка приемник …. Dseq2 ENDS Sseg segment para public ‘stack’; сегмент стека – это из другой оперы Db 256 dup (?) Cseg segment para public ‘code’; сегмент кода Assume ds: Dseg1, es: Dseg2, ss: Sseg, cs:Cseg; привязываем наши сегменты к соответствующим регистрам Main proc FAR; это главная процедура Mov ax, dseg1 Mov ds, ax; пересылаем главный сегмент данных в ds Mov ax, dseg2 Mov es, ax; а дополнительный – в es Lea si, Sent_source ;помещаем в si адрес строки-источника Lea di, Sent_destination; а в di - приемника END (Main)
По правде говоря, второй сегмент данных описывать совершенно не обязательно, более того, одна и та же строка в этой части кода может быть нужна как источник, а уже через две строчки она становиться приемником. Для того что бы не пересылать сотни раз данные с одного сегмента данных в другой или придумывать еще там какие костыли, мы могkи бы просто описать обе наши строчки в одном сегменте и привязать его обоим регистрам ds и es.