Вверх ↑
Этот топик читают: Гость
Разработчик
Ответов: 4668
Рейтинг: 420
#226: 2011-05-13 15:03:01 ЛС | профиль | цитата
Можно и так
#pas
function Sum(a,b:integer):integer;
begin
asm
MOV EAX,a
ADD EAX,b
MOV Result,EAX
end;
end;
карма: 10
0
Ответов: 3464
Рейтинг: 233
#227: 2011-05-13 15:21:47 ЛС | профиль | цитата
Assasin, Лишнюю переменную убери
карма: 0

0
Ответов: 1321
Рейтинг: 37
#228: 2011-05-13 15:22:11 ЛС | профиль | цитата
Assasin, ASM можно и в процедурах использовать?
карма: 0

0
Ответов: 3464
Рейтинг: 233
#229: 2011-05-13 15:27:57 ЛС | профиль | цитата
Roma, Можно
------------ Дoбавленo в 15.27:
#pas
function Sum(a,b:integer):integer;
asm
MOV EAX,a
ADD EAX,b
end;
------------ Дoбавленo в 15.27:
На будущее
карма: 0

0
Ответов: 16504
Рейтинг: 1212
#230: 2011-05-13 15:35:10 ЛС | профиль | цитата
На будущее

Регистровое соглашение о вызове

В языке Object Pascal, использующемся в Delphi, по умолчанию действует регистровое соглашение о вызове.
Согласно этому соглашению, первые три 32-разрядных параметра передаются в регистры eax,edx и ecx.

Если функция объявлена следующим образом
function Sum(i1, i2, i3 : integer): integer;
то переменная i1 УЖЕ содержится в регистре eax, i2 -УЖЕ в edx, i3 -УЖЕ в ecx.

Если объявлена процедура
procedure TSomeObject.SomeProc(i1, i2 : integer);
то i1 передается в edx, i2 - в ecx, а в eax передается неявно заданный параметр Self!

Это соглашение верно только для Delphi.

карма: 23
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
2
Голосовали:Ivann, 1nd1g0
Ответов: 3464
Рейтинг: 233
#231: 2011-05-13 15:38:05 ЛС | профиль | цитата
Tad, Тогда еще лучше
function Sum(a,b:integer):integer;
asm
ADD a,b
end;


карма: 0

0
Разработчик
Ответов: 4668
Рейтинг: 420
#232: 2011-05-13 15:38:58 ЛС | профиль | цитата
Ivann писал(а):
Tad, Тогда еще лучше

Это работает? Насколько я знаю, нельзя в качестве левого и правого параметра ADD передавать переменные или области памяти
карма: 10
0
Ответов: 3464
Рейтинг: 233
#233: 2011-05-13 15:43:36 ЛС | профиль | цитата
Assasin писал(а):
Это работает?

Они оба являются регистрами, как сказал Tad
карма: 0

0
Ответов: 16504
Рейтинг: 1212
#234: 2011-05-13 15:45:53 ЛС | профиль | цитата
Вот так будет работать то, что нарисовал Assasin
function Summa(a,b:integer):integer;
asm
ADD EAX,EDX
end;

карма: 23
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Ответов: 3464
Рейтинг: 233
#235: 2011-05-13 15:47:05 ЛС | профиль | цитата
Tad, Небудет
карма: 0

0
Разработчик
Ответов: 4668
Рейтинг: 420
#236: 2011-05-13 16:06:22 ЛС | профиль | цитата
Tad писал(а):
Tad, Небудет

Ага, лишние begin end стоят В теле функции эти соглашения не работают
карма: 10
0
Ответов: 16504
Рейтинг: 1212
#237: 2011-05-13 16:21:23 ЛС | профиль | цитата
Ivann, Да ну
code_23919.txt
------------ Дoбавленo в 16.21:
Assasin, Tad не писал такого.
А вот учите матчасть можно написать.
карма: 23
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
файлы: 1code_23919.txt [1KB] [121]
Разработчик
Ответов: 4668
Рейтинг: 420
#238: 2011-05-13 16:41:16 ЛС | профиль | цитата
Tad писал(а):
Assasin, Tad не писал такого.

И я не делал такой цитаты, форум глюканул
карма: 10
0
Ответов: 16504
Рейтинг: 1212
#239: 2011-05-13 16:52:13 ЛС | профиль | цитата
Команда ADD сложить.
кудачточисло тактов
регистррегистр3
регистрпамять9-13
памятьрегистр16-24
регистрнепосредственный операнд4
памятьнепосредственный операнд17-25
аккумуляторнепосредственный операнд4

карма: 23
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Ответов: 3889
Рейтинг: 362
#240: 2011-05-13 16:55:48 ЛС | профиль | цитата
[offtop]Я вклинюсь со своими тремя копейками просто отметить, что данные по количеству тактов на операцию сейчас на веру принимать нельзя.[/offtop]
карма: 1

0
Сообщение
...
Прикрепленные файлы
(файлы не залиты)