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

Вниз

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

 
sat ©   (2007-04-24 20:09) [0]

понимаю, что отлаживать программы на асемблере крайне тяжело, но все же может быть кто нибудь поможет

мне надо перевести процеду написанную на Delphi на asm и оформить в качестве вставки


Var A,B  : array[1..1000] of integer;
   N,i,P, j , count : integer;

описанные переменные

Procedure Heapi(ind : integer); {процедура, формирующая и исправляющяя кучу}
Var k    : integer;  //eax = k edi = n ecx=a[k] ebx = ind  edx = k + 1
Begin
k:=ind*2;
If k<=N then
begin
 if (k+1<=N) and (A[k]>A[k+1]) then
 k:=k+1;
 if A[ind]>A[k] then
 begin
  P:=A[ind];
  A[ind]:=A[k];
  A[k]:=P;
  Heapi(k);
 end;
end;    

вот исходная процедура

    pusha
    @@beg:
    mov edi , n
    dec edi
    shl edi , 2
    mov eax , ind
    dec eax
    shl eax , 2
    cmp eax , edi        //    If k<=N then
    ja @@ex
    mov edx , eax
    add edx , 4
    cmp edx , edi        //   if (k+1<=N)
    ja @@ex
    mov ecx , dword ptr a[eax]
    cmp ecx , dword ptr a[edx] // (A[k]>A[k+1])
    jna @@ex
    mov ebx , ind
    dec ebx
    shl ebx , 2
    cmp dword ptr a[ebx] , ecx  // A[ind]>A[k]
    jna @@ex
    mov edx , dword ptr a[ebx]
    mov dword ptr a[ebx] , ecx     //   P:=A[ind];
                                   //    A[ind]:=A[k];
                                   //     A[k]:=P;
                                   //      Heapi(k);
    mov dword ptr a[eax] , edx
    shr eax , 2
    mov ind , eax
    jmp @@beg
    @@ex:
    popa

вот аналог на асме

где то допустил ошибку и совсем не могу найти... из - за нее работает нестабильно и иногда вылетает прога...((


 
Anatoly Podgoretsky ©   (2007-04-24 21:08) [1]

Отлаживать программу на ассемблере много проще, чем на ЯВУ


 
Rial ©   (2007-04-24 23:54) [2]

По идее, в простом случае все просто. :))
Сделай точку останова где- нибудь в процедуре.
Когда дойдет выполнение туда, посмотри в окне CPU
код. Он там по воле судьбы на асме.
Тут останется только метки пожалуй подправить.

Вообще, ты же не микроконтроллеры, наверное,
программируешь... зачем оно тебе ?


 
sat ©   (2007-04-25 00:16) [3]

просто задача)) да можно взять и из CPU


 
sat ©   (2007-04-25 00:32) [4]

хотя из CPU сложнее)) гораздо сложнее


 
Rial ©   (2007-04-25 01:03) [5]

> [4] sat ©   (25.04.07 00:32)
> хотя из CPU сложнее)) гораздо сложнее

Чем конкретно хуже, не понятно мне ?


 
Германн ©   (2007-04-25 01:26) [6]


> Чем конкретно хуже, не понятно мне ?
>

А он не говорил, что хуже. Он говорил сложнее. Хотя объяснить смысл его двойных скобок
> ))
я не в состоянии. :)


 
DevilDevil ©   (2007-04-25 02:16) [7]

я, честно говоря, не понимаю, что происходит.

зачем тут этот код:
mov edi , n
dec edi
shl edi , 2


иначе говоря, ты написал edi := (n-1)*4;

   mov eax , ind
   dec eax
   shl eax , 2


соответствует k := (ind-1)*4;

а потом пишешь:

cmp eax , edi        //    If k<=N then

хотя по логике вещей это эквивалентно
cmp (n-1)*4, (ind-1)*4

Дальше я смотреть не стал.

P.S. предполагаю, ты плохо знаешь ассемблер.


 
marathoner   (2007-04-25 02:51) [8]

cmp (n-1)*4, (ind-1)*4

где тут эквивалентность? Одно вычисляется на основе n, другое на основе ind. Другое дело, что вместо этого можно просто сравнивать n и ind. Ho eax и edi используются дальше, так что тут ничего странного нет.

Можно только сказать, что
   dec  R
   shl   R,2
- везде coвершенно лишние команды. Ясно, что они предназначены для индексации массива, но это можно сделать единственной командой

a[R*4-4]

A дальше нужно разбираться содержательно. Трудно судить о программе, не зная алгоритма.


 
sat ©   (2007-04-25 15:29) [9]

DevilDevil ©
marathoner  

да регистры умножаются для индексации массива integer - 4 байта

a[R*4-4] - не люблю сложно читаемые команды(если их так можно назвать)

просто мне надо реализовать на ассемблере сортировку при помощи бинарной кучи как вставку в Delphi

может кто знает где можно найти готовые алгоритмы на асме?


 
Сергей М. ©   (2007-04-25 15:34) [10]


> sat ©   (25.04.07 15:29) [9]


"На ассемблере" в дан.случае - это идея-фикс или чем-то действительно обоснованная необходимость ?


 
Alexey (AZ)   (2007-04-25 16:05) [11]

Дизассемблируйте и поправьте метки.



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

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

Наверх




Память: 0.49 MB
Время: 0.163 c
2-1177324165
EmGard
2007-04-23 14:29
2007.05.13
Мультимедия - взгляд меломана


2-1177055548
allucard
2007-04-20 11:52
2007.05.13
Как заставить работать колесо прокрутки на форме?


15-1176552575
Иксик
2007-04-14 16:09
2007.05.13
Посоветуйте платежные системы для web сайтов, которые принимают


2-1177430954
sat
2007-04-24 20:09
2007.05.13
Delphi + ассемблер


1-1174234172
Kolan
2007-03-18 19:09
2007.05.13
Пункт &amp;laquo;Load Icon&amp;raquo; недоступен в опциях проекта, почему?