Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.10.03;
Скачать: CL | DM;

Вниз

встроенный ассемблер   Найти похожие ветки 

 
Sergey Pavl   (2002-09-23 18:39) [0]

У меня возникла проблема со встроенным ассемблером. В делфи я формирую динамический массив. Далее мне нужно провести обработку элементов этого массива в среде встроенного ассемблера, после чего опять работать с этими данными в делфи. Пробовал делать по правилам турбо паскаля для статического массива, но компилятор ругается. Просьба, подсказать, как читать и писать в динамические массивы во встроенном ассемблере. Также, если кто знает, дайте ссылку на описание встроенного ассемблера в делфи, желательно на русском. Чем отличается встроенный ассемблер делфи от паскалевского?


 
MBo ©   (2002-09-23 18:53) [1]

небольшая книжка есть на www.podgoretsky.com

переменная динамического массива является указателем, адресом нулевого элемента

вот пример процедуры заполнения дин. массива FA (Array of Integer)
значением Сolor c некоторыми преобразованиями
Здесь FA- ПОЛЕ объекта, поэтому пришлось добавлять смещение - адрес самого объекта

procedure TQuadDib.Fill(const Color: TColor);
var Count:Cardinal;
begin
Count:=FWidth*FHeight;
asm
PUSH EDI
MOV EAX,Self
MOV EDI,[EAX+FA]
MOV EAX,Color
BSWAP EAX
SHR EAX,8
MOV ECX,Count
REP STOSD
POP EDI
end;
end;


 
Dimka Maslov ©   (2002-09-23 18:53) [2]

Вот пример функции, вычисляющей сумму элементов динамаического массива:
function ProcessDynArray(Data: array of integer): Integer;
asm
// EAX - указатель на первый элемент массива
// EDX - количество элементов массива
push esi
push ebx
mov esi, eax // теперь указатель в ESI
xor eax, eax
xor ebx, ebx
@@LOOP_START:
cmp edx, 0
jz @@LOOP_END
add eax, [esi+ebx]
add ebx, 4
jmp @@LOOP_START
@@LOOP_END:
pop ebx
pop esi
ret
// EAX -> Результат, возвращаемый функцией
end;

Вообще же правила просты:
1. Первые три параметра передаются через регистры EAX, EDX и ECX (именно в таком порядке)
2. Остальные параметры через стек как обычно (обращаться к ним надо по имени)
3. Результат функции передаётся через EAX
4. Свободно менять можно только регистры EAX, EСX и EDX, остальные надо сохранять в стеке



Страницы: 1 вся ветка

Текущий архив: 2002.10.03;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.015 c
3-7771
AM
2002-09-11 12:15
2002.10.03
Выполнение хран. процедуры идет как одна транзакция?


1-7995
Korona
2002-09-20 20:57
2002.10.03
Вопрос по MDI


1-8028
Porolonchick
2002-09-20 16:07
2002.10.03
TreeView.


14-8146
Oleg_Gashev
2002-09-08 22:51
2002.10.03
Кнут. Том 1. Глава 1.2.5 Перестанивки и факториалы. Метод 2.


3-7868
Alinka
2002-09-13 16:33
2002.10.03
Help! помогите , пожалуйста!