Главная страница
Библиотека (скачать книги)
Скачать софт
Введение в программирование
Стандарты для C++
Уроки по C#
Уроки по Python
HTML
Веб-дизайн
Ассемблер в среде Windows
ActiveX
Javascript
Общее о Линукс
Линукс - подробно
Линукс - новое
Delphi
Паскаль для начинающих
Турбопаскаль
Новости
Партнеры
Наши предложения
Архив новостей
|
Буфер принимающей строки buf должен иметь достаточный размер, чтобы
в нем могла разместиться передаваемая строка.
При сборке приложения в Visual С + + .NET не забудьте включить объектный
модуль на ассемблере в состав проекта. В исходный текст программы после
директив include необходимо включить объявление внешней процедуры:
extern "С" _stdcall rets(char *psl);
Очень часто возникает необходимость передавать в основную программу не
целую строку, а лишь ее часть (подстроку), начиная с определенной позиции.
Следующий пример приложения показывает; как это можно сделать.
Пусть в ассемблерном модуле находится строка символов, и необходимо
передать в вызывающую программу подстроку, начиная с определенной позиции.
В этом случае процедура должна получать в качестве параметра величину
начального смещения от начала строки. Она должна возвращать в
основную программу адрес первого элемента выделенной подстроки.
Исходный текст процедуры на ассемблере (назовем ее strpart) приведен в
листинге 3.47.
Листинг 3.47. Ассемблерная процедура, возвращающая адрес подстроки
.386
.model flat
public strpart
.data
TESTSTR DB "Parti Part2 Part3 Part4 Part5", 0
.code
strpart proc
push EBP
mov EBP, ESP
mov ECX, DWORD PTR [EBP+8]
mov EAX, offset TESTSTR
add EAX, ECX
pop EBP
ret 4
strpart endp
end
Эта процедура в качестве единственного параметра принимает смещение от
начала строки. Строка TESTSTR СОСТОИТ ИЗ 5 подстрок "Parti", ... , "Parts"
размером 6 байт каждая (с учетом символа пробела между подстроками).
Величина смещения находится в регистре ЕВР ПО смещению 8 и загружается
в регистр ЕСХ с помощью команды:
mov ЕСХ, DWORD PTR [ЕВР+8]
В регистр ЕАХ заносится адрес строки из области данных:
mov ЕАХ, offset TESTSTR
Адрес первого элемента подстроки вычисляется путем суммирования содержимого
регистров ЕАХ и ЕСХ.
Разработаем приложение на Delphi, которое выводило бы на экран исходную
строку, подстроку и величину смещения относительно начала исходной
строки. Для этого разместим на главной форме приложения три поля редактирования
Edit, три метки Label, управляющие стрелки upDown и кнопку
Button. ДЛЯ большей НагЛЯДНОСТИ СВОЙСТВУ Increment КОМПОНента UpDown
присвоим значение 6 (размер подстроки в строке TESTSTR равен 6Jбайтам).
Привяжем свойство Position управляющих стрелок upDown к величине, заданной
В поле редактирования Edit3 При ПОМОЩИ СВОЙСТВа Associate.
Свойство Min стрелок upDown установим равным о, а свойство Мах — 30.
Полный текст программы приведен в листинге 3.48.
Листинг 3.48. Полный текст программы на Delphi, выводящей
на экран подстроку
var
Forml: TForml;
StrOFFSET: Integer;
StrASM: PChar;
implementation
{$R *.dfm}
{$L STRPART.OBJ}
function strpart(II: Integer): PChar; stdcaii; external;
procedure TForml.ButtonlClick(Sender: TObject);
begin
StrOFFSET := 0;
StrASM := strpart(StrOFFSET);
Edit3.Text := StrASM;
StrOFFSET := UpDownl.Position;
StrASM := strpart(StrOFFSET);
Edit2.Text := StrASM;
end;
end.
<< Назад В начало Далее >> |
|