Текущий архив: 2010.01.31;
Скачать: CL | DM;
Вниз
Перевод ассемблерного кода на Делфи Найти похожие ветки
← →
harisma © (2009-02-13 16:51) [0]Господа! Пришлось столкнуться с такой проблемой:
Достался мне кусок кода программы, в котором часть методов написана на ассемблере.
Как мне перевести данное чудо на язык Дельфи?
Вот 2 метода, которые надо переписать (в коде их гораздо больше, но я прошу только 2 перевести для примера - остальные я сделаю сам по представленому образцу):
function CF_GetFontSize(var CF: TCellFormat): Integer;
asm
MOV AX,[EAX].TCellFormat.FontColorSizeStyle
SHR AX,6
AND EAX,$7F
end;
procedure CF_SetFontSize(var CF: TCellFormat; Value: Integer);
asm
AND [EAX].TCellFormat.FontColorSizeStyle, $E03F
SHL DX,6
AND DX,$1FC0
OR [EAX].TCellFormat.FontColorSizeStyle, DX
end;
где FontColorSizeStyle - поле типа integer, в котором хранится битовое поле для цвета, размера и стиля фонта ячейки.
Буду премного благодарен.
← →
Amoeba © (2009-02-13 18:00) [1]
> Как мне перевести данное чудо на язык Дельфи?
Нужно ради интереса, или ассемблерный код работает неправильно?
← →
harisma © (2009-02-13 18:03) [2]У меня изменился тип поля FontColorSizeStyle. Был Word - стал Integer. А с Integer данный ассемблерный код не работает.
← →
Rouse_ © (2009-02-13 18:09) [3]
function CF_GetFontSize(var CF: TCellFormat): Integer;
begin
Result := (CF.FontColorSizeStyle shr 6) and $7F;
end;
procedure CF_SetFontSize(var CF: TCellFormat; Value: Integer);
begin
CF.FontColorSizeStyle :=
(CF.FontColorSizeStyle and $E03F) or ((Value shl 6) and $1FC0);
end;
← →
Rouse_ © (2009-02-13 18:15) [4]Ну или переведи на поддержку Integer
function CF_GetFontSize(var CF: TCellFormat): Integer;
asm
MOV EAX,[EAX].TCellFormat.FontColorSizeStyle
SHR EAX,6
AND EAX,$7F
end;
procedure CF_SetFontSize(var CF: TCellFormat; Value: Integer);
asm
AND [EAX].TCellFormat.FontColorSizeStyle, $E03F
SHL DX,6
AND DX,$1FC0
OR [EAX].TCellFormat.FontColorSizeStyle, EDX
end;
← →
Rouse_ © (2009-02-13 18:16) [5]
AND EDX,$1FC0
← →
Asteroid (2009-02-15 19:00) [6]> [5]
SHL EDX,6
:)
← →
Rouse_ © (2009-02-16 10:30) [7]
> [6]
Не нужно, т.к. AND все равно затирает все, кроме значения в регистре DX :)
← →
KSergey © (2009-02-16 10:52) [8]сорри за флейм, но мне интересно: аффтар сего хотел выпендриться или видел офигенную оптимизацию?
А топикстартеру я бы посоветовал на таком примере не бояться расширить кругозор за счет работодателя, раз ему повезло встретиься с кодом, написанным более продвинутым молодцем. Это всегда хорошо и полезно, чес. слово, по себе знаю :)
Страницы: 1 вся ветка
Текущий архив: 2010.01.31;
Скачать: CL | DM;
Память: 0.46 MB
Время: 0.004 c