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

Вниз

Сравнение record на asm   Найти похожие ветки 

 
Separator ©   (2003-06-11 07:45) [0]


type
TComplex = record
x: extended;
y: extended;
end;

function Equal(z1, z2: TComplex): boolean; register; //Сравнение
// z1 = z2
asm
MOV CL, $00
FLD TBYTE PTR [EDX + $10]
FLD TBYTE PTR [EAX + $10]
FLD TBYTE PTR [EDX]
FLD TBYTE PTR [EAX]
FCOMPP
FSTSW AX
SAHF
JNZ @END
FCOMPP
FSTSW AX
SAHF
JNZ @END
MOV CL, $01
@END:
MOV AL, CL
end;




Псмотрите код и скажите как его можно оптимизировать. Дело в том, что я только начинаю изучать asm на delphi и вот хотел бы узнать посмотреть на свои ошибки.

И ещё,

FLD TBYTE PTR [EDX]
FLD TBYTE PTR [EAX]
FCOMPP
FSTSW AX
SAHF
JNZ @END

если здесь происходит переход на @End, то в st(0) И st(1) <> empty, можно так оставить или нужно будет очистить (как?)?


 
ZeroDivide ©   (2003-06-11 09:45) [1]

А почему переместили из общих вопросов? По-моему, надо было бы оставить там.


 
icWasya ©   (2003-06-11 10:40) [2]

по поводу регистров сопроцессора - желательно оставлять сопроцессор в том же состоянии, что и до выполнения процедуры, иначе возможны глюки.

1)-----------

function Equal(z1, z2: TComplex): boolean; register; //Сравнение
asm
// вместо MOV CL, $00
XOR CL,CL
// лучше переставить следующие две строки
// FLD TBYTE PTR [EDX + $10]
// FLD TBYTE PTR [EAX + $10]

FLD TBYTE PTR [EDX]
FLD TBYTE PTR [EAX]
FCOMPP
FSTSW AX
SAHF
JNZ @END
// вот сюда
FLD TBYTE PTR [EDX + $10]
FLD TBYTE PTR [EAX + $10]

FCOMPP
FSTSW AX
SAHF
JNZ @END
MOV CL, $01
@END:
MOV AL, CL
end;


и для наглядности вместо

FLD TBYTE PTR [EDX]
FLD TBYTE PTR [EDX + $10]

можно написать

FLD TComplex.x [EDX]
FLD TComplex.y [EDX]



 
Separator ©   (2003-06-11 12:30) [3]

Если я всё правильно понимаю, то AX, это часть регистра EAX, т.е. его 16-битная часть, а FSTSW AX сохраняет содержимое регистра управления cwr в AX, т.е. меняет значение EAX, чего не следует делать, так как я дальше им буду пользоваться.
В связи с этим возникает следующий вопрос - А вообще нужно делать так:

FSTSW AX
SAHF

или можно делать просто

SAHF

во всяком случае во всех примерах я встречал именно первый вариант


 
Separator ©   (2003-06-11 12:48) [4]

FLD TComplex.y [EDX] не работает


 
Separator ©   (2003-06-11 12:50) [5]

Вру, всё работае


 
Separator ©   (2003-06-11 18:58) [6]

Так всё-таки как правильно

FSTSW AX
SAHF

или можно делать просто

SAHF



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

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

Наверх




Память: 0.48 MB
Время: 0.018 c
3-97512
me2
2003-06-05 17:13
2003.06.30
Сортировка полей таблицы


1-97581
Volly
2003-06-16 15:52
2003.06.30
Form как WinTskBar


4-97920
Diamond Cat
2003-03-09 03:56
2003.06.30
Scrollbar, или спасите люди добрые


3-97492
pathfinder
2003-06-05 01:42
2003.06.30
Вопрос о подключении к БД...


14-97873
pargo
2003-06-13 14:31
2003.06.30
Компонент Delphi