Форум: "Начинающим";
Текущий архив: 2007.01.28;
Скачать: [xml.tar.bz2];
Вниз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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.045 c