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

Вниз

ASM   Найти похожие ветки 

 
AndrewHz   (2007-01-07 18:41) [0]

Допустим есть процедура MyProc;
Подскажите пожалуста как правильно запхнуть её в цикл, на асм
что-то типа


while true do
Myproc;
end;


 
kaZaNoVa ©   (2007-01-07 18:41) [1]

loop


 
AndrewHz   (2007-01-07 18:52) [2]

А можна полный код

asm
Myproc
@@loop
end

Вот так но только правильно


 
kaZaNoVa ©   (2007-01-07 18:56) [3]

я в асме не шарю ... но  имхо что-то типа:


StartLoop:
invoke GetMessage,ADDR msg,NULL,0,0 //тут всякий код
jmp StartLoop


 
kaZaNoVa ©   (2007-01-07 18:59) [4]

asm
@@1:
Myproc
LOOP    @@1
end


или чё-то такое:


 
AndrewHz   (2007-01-07 19:09) [5]


asm
@@1:

LOOP    @@1
end

Работает цикл
но если вставить
MyProc после @@1
сразу выдаёт ошибку


 
AndrewHz   (2007-01-07 19:14) [6]

procedure TForm1.Button1Click(Sender: TObject);
begin
asm
@@1:
call go
LOOP    @@1
end
end;

procedure TForm1.go;
begin
Beep;
end;

Короче работает вот так
А как теперь его остановить
Ну типа Exit


 
begin...end ©   (2007-01-07 19:18) [7]

Команда LOOP служит для организации цикла с ограниченным числом итераций (это число перед циклом следует поместить в ECX, который при очередном проходе цикла будет декрементироваться). А "бесконечный" цикл (while true do) организуется так, как в [3], только в delphi"шном ассемблере нет invoke:

asm
 @@1:
   CALL  MyProc
   JMP   @@1
end


При наличии у процедуры параметров, понадобится их передача перед вызовом подпрограммы, в соответствии с соглашением о её вызове.


 
begin...end ©   (2007-01-07 19:23) [8]

> AndrewHz   (07.01.07 19:14) [6]

А каково условие выхода из цикла?


 
ors_archangel ©   (2007-01-07 19:27) [9]

А зачем асм? Вы совсем не цените совместимость!


 
AndrewHz   (2007-01-07 19:31) [10]

Ну типа

MyProc(Min,Max:integer);
begin
min:=min+1;
end;

asm
@@1:
  CALL  MyProc(0,100);

if min=max the exit

  JMP   @@1
end


 
AndrewHz   (2007-01-07 19:37) [11]

А зачем асм? Вы совсем не цените совместимость!

Одна и таже процедура в D7 и D7(KOL)
выполняется поразному
всмысле по времени
и разница очень значительна (KOL=5sec D7=73sec)
я считаю что это за счёт большого использования basm
в KOL
Пробовал и потоки но большая морока между передачей информации


 
begin...end ©   (2007-01-07 19:37) [12]

> AndrewHz   (07.01.07 19:31) [10]

Не понял. Внутри процедуры изменяется глобальная переменная?

Напишите полноценный паскалевский пример -- потом разберём, как сделать аналог на ассемблере.


 
Anatoly Podgoretsky ©   (2007-01-07 21:32) [13]

> AndrewHz  (07.01.2007 19:37:11)  [11]

У тебя ошибка в программе.


 
DevilDevil ©   (2007-01-07 21:39) [14]


> я считаю что это за счёт большого использования basm в KOL


Поверьте мне наслово, порой крайне тяжело написать код на ассме, работающий быстрее, чем Delphi-йский, тем более начинающему... а вот наоборот - вполне возможно.

Вопрос: что это за процедура, которая во столько раз выполняется быстрее в KOL ?

PS:

procedure MyProc(var Min,Max:integer);
begin
  min:=min+1;
end;
...

var
 MyMin, MyMax : integer;
asm
@@1:
 mov MyMin, 0
 mov MyMax, 100
 lea eax, MyMin // так вроде
 lea edx, MyMax
 CALL  MyProc

 cmp MyMin, MyMax
 jne @@1
end;



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

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

Наверх




Память: 0.5 MB
Время: 0.063 c
15-1168175654
Rouse_
2007-01-07 16:14
2007.01.28
Дельфи глазами Чайника


15-1168013190
Petr V. Abramov
2007-01-05 19:06
2007.01.28
посоветуйте компонент


2-1168164663
Ламер 2.Х
2007-01-07 13:11
2007.01.28
Надежность передачи???


2-1167820697
DeadMeat
2007-01-03 13:38
2007.01.28
Скроллбар в DBAware компонентах


15-1167686051
Riply
2007-01-02 00:14
2007.01.28
Книга по ассемблеру.