Загрузка элемента цепочки в аккумулятор
Эта операция-примитив позволяет извлечь элемент цепочки и поместить его в регистр-аккумулятор al, ax или eax. Эту операцию удобно использовать вместе с поиском (сканированием) с тем, чтобы, найдя нужный элемент, извлечь его (например, для изменения).
Возможный размер извлекаемого элемента определяется применяемой командой.
Программист может использовать четыре команды загрузки элемента цепочки в аккумулятор, работающие с элементами разного размера:
lods адрес_источника(LOaD String) — загрузить элемент из цепочки в регистр-аккумулятор al/ax/eax;
lodsb (LOaD String Byte) — загрузить байт из цепочки в регистр al;
lodsw (LOaD String Word) — загрузить слово из цепочки в регистр ax;
lodsd (LOaD String Double Word) — загрузить двойное слово из цепочки в регистр eax.
Рассмотрим работу этих команд на примере lods.
Команда lods
lods адрес_источника (LOaD String) — загрузить элемент из цепочки в аккумулятор al/ax/eax.
Команда имеет один операнд, обозначающий строку в основном сегменте данных. Работа команды заключается в том, чтобы извлечь элемент из цепочки по адресу, соответствующему содержимому пары регистров ds:esi/si, и поместить его в регистр eax/ax/al. При этом содержимое esi/si подвергается инкременту или декременту (в зависимости от состояния флага df) на значение, равное размеру элемента.
Эту команду удобно использовать после команды scas, локализующей местоположение искомого элемента в цепочке.
Префикс повторения в этой команде может и не понадобиться — все зависит от логики программы.
В качестве примера рассмотрим листинг 4. Программа сравнивает командой cmps две цепочки байт в памяти string1 и string2 и помещает первый несовпавший байт из string2 в регистр al. Для загрузки этого байта в регистр-аккумулятор al используется команда lods. Префикса повторения в команде lods нет, так как он попросту не нужен.