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


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

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



Эта операция-примитив позволяет произвести действие, обратное команде lods, то есть сохранить значение из регистра-аккумулятора в элементе цепочки.
Эту операцию удобно использовать вместе с операцией поиска (сканирования) scans и загрузки lods, с тем, чтобы, найдя нужный элемент, извлечь его в регистр и записать на его место новое значение.
Команды, поддерживающие эту операцию-примитив, могут работать с элементами размером 8, 16 или 32 бит.
TASM предоставляет программисту четыре команды сохранения элемента цепочки из регистра-аккумулятора, работающие с элементами разного размера:

stos адрес_приемника (STOre String) — сохранить элемент из регистра-аккумулятора al/ax/eax в цепочке;
stosb (STOre String Byte) — сохранить байт из регистра al в цепочке;
stosw (STOre String Word) — сохранить слово из регистра ax в цепочке;
stosd (STOre String Double Word) - сохранить двойное слово из регистра eax в цепочке.

Команда stos

stos адрес_приемника (STOrage String) — сохранить элемент из регистра-аккумулятора al/ax/eax в цепочке.

Команда имеет один операнд адрес_приемника, адресующий цепочку в дополнительном сегменте данных.
Работа команды заключается в том, что она пересылает элемент из аккумулятора (регистра eax/ax/al) в элемент цепочки по адресу, соответствующему содержимому пары регистров es:edi/di. При этом содержимое edi/di подвергаются инкременту или декременту (в зависимости от состояния флага df) на значение, равное размеру элемента цепочки.
Префикс повторения в этой команде может и не понадобиться — все зависит от логики программы. Например, если использовать префикс повторения rep, то можно применить команду для инициализации области памяти некоторым фиксированным значением.

В качестве примера рассмотрим листинг 5. Программа производит замену в строке всех символов “а” на другой символ. Символ для замены вводится с клавиатуры.

Листинг 5. Замена командой stos символа в строке на вводимый с клавиатуры;prg_11_5.asmMASMMODEL smallSTACK 256.data;сообщенияfnd db 0ah,0dh,'Символ найден','$'nochar db 0ah,0dh,'Символ не найден.','$'mes1 db 0ah,0dh,'Исходная строка:','$'string db 'Поиск символа в этой строке.',0ah,0dh,'$';строка для поискаmes2 db 0ah,0dh,'Введите символ, на который следует заменить найденный' db 0ah,0dh,'$'mes3 db 0ah,0dh,'Новая строка: ','$'.code assume ds:@data,es:@data привязка ds и es к сегменту данныхmain:;точка входа в программу mov ax,@data;загрузка сегментных регистров mov ds,ax mov es,ax;настройка es на ds mov ah,09h lea dx,mes1 int 21h;вывод сообщения mes1 lea dx,string int 21h;вывод string mov al,'а';символ для поиска-`а`(кириллица) cld;сброс флага df lea di,string;загрузка в di смещения string mov cx,29;для префикса repne — длина строки;поиск в строке string до тех пор, пока;символ в al и очередной символ в строке;не равны: выход - при первом совпаденииcycl:repne scas string je found;если элемент найден то переход на foundfailed:;иначе, если не найден, то вывод сообщения nochar mov ah,09h lea dx,nochar int 21h jmp exit;переход на выходfound: mov ah,09h lea dx,fnd int 21h;вывод сообщения об обнаружении символа;корректируем di для получения значения;действительной позиции совпавшего элемента;в строке и регистре al dec dinew_char:;блок замены символа mov ah,09h lea dx,mes2 int 21h;вывод сообщения mes2;ввод символа с клавиатуры mov ah,01h int 21h;в al — введённый символ stos string;сохраним введённый символ;(из al) в строке string в позиции старого символа mov ah,09h lea dx,mes3 int 21h;вывод сообщения mes3 lea dx,string int 21h;вывод сообщения string;переход на поиск следующего символа ‘а’ встроке inc di;указатель в строке string на следующий,;после совпавшего, символ jmp cycl;на продолжение просмотра stringexit:;выход mov ax,4c00h int 21hend main;конец программы

Следующие две команды появились впервые в системе команд микропроцессора i386. Они позволяют организовать эффективную передачу данных между портами ввода-вывода и цепочками в памяти. Следует отметить, что эти две команды позволяют достичь скорости передачи данных со скоростью выше той, которую может обеспечить контроллер DMA (Direct Memory Access — прямой доступ к памяти). Контроллер DMA — это специальная микросхема, предназначенная для того, чтобы освободить микропроцессор от управления процессом ввода-вывода больших массивов данных между внешним устройством (диском) и памятью.



Поделиться:


Последнее изменение этой страницы: 2017-02-05; просмотров: 342; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.235.251.99 (0.113 с.)