Главная страница
Библиотека (скачать книги)
Скачать софт
Введение в программирование
Стандарты для C++
Уроки по C#
Уроки по Python
HTML
Веб-дизайн
Ассемблер в среде Windows
ActiveX
Javascript
Общее о Линукс
Линукс - подробно
Линукс - новое
Delphi
Паскаль для начинающих
Турбопаскаль
Новости
Партнеры
Наши предложения
Архив новостей
|
Очень часто на практике возникает необходимость в поиске какого-либо
элемента строки. Приведенный далее пример демонстрирует, как это можно
реализовать.
Пусть имеется строка символов, в которой ищется какой-либо символ. Необходимо
в вызывающую программу вернуть порядковый номер первого
встретившегося элемента строки, если таковой найден, или 0 в случае неудачи.
В ассемблерную процедуру в качестве параметров передаются адрес
строки и символ, который необходимо найти.
Исходный текст процедуры (назовем ее charpos) на ассемблере для вызова
из Delphi-приложения представлен в листинге 3.54.
Листинг 3.54. Ассемблерная процедура, выполняющая поиск символа
; в строке, находящейся в программе на Delphi
.386
.model flat
public charpos
.data
.code
charpos proc
push EBX
push ЕВР
mov ЕВР, ESP
mov ЕВХ, DWORD PTR [EBP+12]
xor EAX, EAX
mov AL, BYTE PTR [EBP+16]
mov ECX, 1
next_check:
cmp AL, [EBX]
je quit
cmp BYTE PTR [EBX], 0
jne inc_cnt
jmp not_found
quit:
mov EAX,
pop EBP
pop EBX
ret 8
inc cnt:
inc ECX
inc EBX
jmp next
not found:
xor ECX,
jmp quit
charpos endp
end
Наша процедура в качестве параметров принимает адрес строки p s i и символ
c i , который мы ищем. Процедура возвращает номер позиции в строке,
где впервые встречается этот элемент. Первый элемент строки имеет номер
позиции 1, поэтому счетчику позиции мы присваиваем начальное значение
с помощью команды:
mov ЕСХ, 1
Адрес строки мы помещаем в регистр ЕВХ, а символ, который ищем — в
регистр AL. Сравнение символа по адресу в регистре ЕВХ С искомым симво-
лом в AL и возможные варианты продолжения выполняются следующими
командами:
cmp AL, [ЕВХ]
je quit
cmp BYTE PTR [EBX], 0
jne inc_cnt
jmp not_found
<< Назад В начало Далее >> |
|