Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Assember to Delphi / 5 сообщений из 5, страница 1 из 1
24.12.2017, 10:44:10
    #39574926
Subway_
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Assember to Delphi
Ребят, кто-нибудь может перевести этот asm код в Delphi код?

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
function TTreeNodeList.IndexOf(Item: TTreeNTNode): Integer; assembler;

// finds Item's index in the list
// EAX contains the Self reference (address of this instance)
// EDX contains Item

asm
                  PUSH EBX
                  PUSH EDI
                  MOV ECX, EAX.FCount  // number of entries
                  JECXZ @NotFound     // no search, if no entries
                  MOV EBX, ECX         // keep count for index calc.
                  MOV EDI, EAX.FList   // start address
                  MOV EAX, EDX         // search value
                  REPNE SCASD         // search the value
                  JNZ @NotFound       // jump if not found
                  MOV EAX, EBX
                  SUB EAX, ECX         // calculate index
                  DEC EAX             // it's zero-based
                  JMP @Finish

@NotFound:        MOV EAX, -1
@Finish:          POP EDI
                  POP EBX
end;



Модератор: Пользуйтесь тегом (кнопкой) SRC для оформления кода, пожалуйста.
...
Рейтинг: 0 / 0
24.12.2017, 11:41:39
    #39574937
SOFT FOR YOU
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Assember to Delphi
Subway_,

Обычный цикл по элементам FList
...
Рейтинг: 0 / 0
24.12.2017, 13:29:22
    #39574952
Polesov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Assember to Delphi
Subway_,

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
function TTreeNodeList.IndexOf( Item : TTreeNTNode ) : integer;
var
  i : integer;
begin
  if FCount = 0 then
    Result := -1
  else
    for i := 0 to Pred( FCount ) do
      if FList[i] = Item then
      begin
        Result := i;
        break;
      end;
end;



Если для FCount и FList описаны property, то можно (и нужно) использовать Count и List.

С уважением, Polseov.
...
Рейтинг: 0 / 0
24.12.2017, 13:33:11
    #39574954
Polesov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Assember to Delphi
> Polesov
Ашипка, подправил.
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
function TTreeNodeList.IndexOf( Item : TTreeNTNode ) : integer;
var
  i : integer;
begin
  Result := -1;
  for i := 0 to Pred( FCount ) do
    if FList[i] = Item then
    begin
      Result := i;
      break;
    end;
end;
...
Рейтинг: 0 / 0
24.12.2017, 13:43:19
    #39574959
Subway_
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Assember to Delphi
Polesov> Polesov
Ашипка, подправил.


Спасибо большое!
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Assember to Delphi / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]