Студопедия

Главная страница Случайная страница

Разделы сайта

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






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






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

Команда stos

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

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

Примера. Программа производит замену в строке всех символов ‘а’ на другой символ. Символ для замены вводится с клавиатуры.

 

; 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; конец программы

 






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.