Лекции.Орг


Поиск:




Категории:

Астрономия
Биология
География
Другие языки
Интернет
Информатика
История
Культура
Литература
Логика
Математика
Медицина
Механика
Охрана труда
Педагогика
Политика
Право
Психология
Религия
Риторика
Социология
Спорт
Строительство
Технология
Транспорт
Физика
Философия
Финансы
Химия
Экология
Экономика
Электроника

 

 

 

 


Загрузка элемента цепочки в аккумулятор




Эта операция-примитив позволяет извлечь элемент цепочки и поместить его в регистр-аккумулятор 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 нет, так как он попросту не нужен.

Листинг 4. Использование lods для загрузки байта в регистр al <1>;prg_11_4.asm <2> MASM <3> MODEL small <4> STACK 256 <5>.data <6>;строки для сравнения <7> string1 db 'Поиск символа в этой строке.',0ah,0dh,'$' <8> string2 db 'Поиск символа не в этой строке.',0ah,0dh,'$' <9> mes_eq db 'Строки совпадают.',0ah,0dh,'$' <10> fnddb 'Несовпавший элемент в регистре al',0ah,0dh,'$' <11>.code <12>;привязка ds и es к сегменту данных <13> assume ds:@data,es:@data <14> main: <15> mov ax,@data;загрузка сегментных регистров <16> mov ds,ax <17> mov es,ax;настройка es на ds <18> mov ah,09h <19> lea dx,string1 <20> int 21h;вывод string1 <21> lea dx,string2 <22> int 21h;вывод string2 <23> cld;сброс флага df <24> lea di,string1;загрузка в es:di смещения <25>;строки string1 <26> lea si,string2;загрузка в ds:si смещения <27>;строки string2 <28> mov cx,29;для префикса repe — длина строки <29>;поиск в строке (пока нужный символ и символ в строке не равны) <30>;выход — при первом несовпавшем <31> repe cmps string1,string2 <32> jcxz eql;если равны — переход на eql <33> jmp no_eq;если не равны — переход на no_eq <34> eql:;выводим сообщение о совпадении строк <35> mov ah,09h <36> lea dx,mes_eq <37> int 21h;вывод сообщения mes_eq <38> jmp exit;на выход <39> no_eq:;обработка несовпадения элементов <40> mov ah,09h <41> lea dx,fnd <42> int 21h;вывод сообщения fnd <43>;теперь, чтобы извлечь несовпавший элемент из строки <44>;в регистр-аккумулятор, <45>;уменьшаем значение регистра si и тем самым перемещаемся <46>;к действительной позиции элемента в строке <47> dec si;команда lods использует ds:si-адресацию <48>;теперь ds:si указывает на позицию в string2 <49> lods string2;загрузим элемент из строки в AL <50>;нетрудно догадаться, что в нашем примере это символ — "н" <51> exit:;выход <52> mov ax,4c00h <53> int 21h <54> end main  




Поделиться с друзьями:


Дата добавления: 2016-12-31; Мы поможем в написании ваших работ!; просмотров: 322 | Нарушение авторских прав


Поиск на сайте:

Лучшие изречения:

Наука — это организованные знания, мудрость — это организованная жизнь. © Иммануил Кант
==> читать все изречения...

4329 - | 4083 -


© 2015-2026 lektsii.org - Контакты - Последнее добавление

Ген: 0.007 с.