Лекции.Орг


Поиск:




Категории:

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

 

 

 

 


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




Эта операция-примитив позволяет произвести действие, обратное команде 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.asm MASM MODEL small STACK 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;если элемент найден то переход на found failed:;иначе, если не найден, то вывод сообщения nochar mov ah,09h lea dx,nochar int 21h jmp exit;переход на выход found: mov ah,09h lea dx,fnd int 21h;вывод сообщения об обнаружении символа ;корректируем di для получения значения ;действительной позиции совпавшего элемента ;в строке и регистре al dec di new_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;на продолжение просмотра string exit:;выход mov ax,4c00h int 21h end main;конец программы

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





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


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


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

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

Лучшая месть – огромный успех. © Фрэнк Синатра
==> читать все изречения...

4261 - | 4149 -


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

Ген: 0.012 с.