либо пока CX не становится
ние, либо пока CX не становится равным нулю, либо пока не обнару-
жится что операнды равны. К несчастью, легко перепутать, где ка-
кой префикс нужно использовать.
Ошибки при назначении сегмента строк
-----------------------------------------------------------------
Все строковые команды по умолчанию используют в качестве
сегмента исходных данных (если он есть) сегмент DS, а в качестве
сегмента результирующих данных (если он есть) сегмент ES. Легко
забыть об этом и попытаться, скажем, выполнить команду STOSB над
сегментом данных, поскольку все данные, обрабатываемые не строко-
выми командами, обычно находятся именно в этом сегменте.
Неправильное преобразование из байта в слово
-----------------------------------------------------------------
TDeb 3.0 #2-3 = 142 =
В общем случае, для команд обработки строк желательно ис-
пользовать максимально возможный размер данных (обычно слово, а
для процессора 80386 - двойное слово), поскольку с данными боль-
шего размера эти команды обычно работают быстрее.
Однако здесь имеются две ловушки. Во-первых, преобразование
из количества байт в количество слов с помощью простой команды:
shr cx,l
приведет к потере байта, если CX имеет нечетное значение, пос-
кольку младший значащий бит будет сдвинут за пределы слова.
Во-вторых, следует помнить, что команда SHR делит количество
байт на два. Использование, скажем, команды STOSW с количеством
байт, а не слов, может уничтожить другие данные и вызвать самые
разнообразные ошибки.
Использование нескольких префиксов
-----------------------------------------------------------------
Команды обработки строк с несколькими префиксами работают
ненадежно, и их следует по возможности избегать.