Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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.046 c
8-1149254008
djrevers
2006-06-02 17:13
2007.01.28
bass.pas


2-1168365957
Bolt
2007-01-09 21:05
2007.01.28
MDI Приложение


2-1167883767
Vopros
2007-01-04 07:09
2007.01.28
iif в Запросе


2-1168424847
RomanH
2007-01-10 13:27
2007.01.28
Заголовок DBGrid а


15-1168341757
Александр Иванов
2007-01-09 14:22
2007.01.28
Как вам такое тестовое задание?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский