01-05-2013, 06:19 PM
هههه .. عذراً على عدم تركيزي ... فانا ابرمج برنامج الآن P:
حل آخر لـ MakeRGB
أعتقدت ان هناك طريقة لتصغير كود الاسمبلي ... فانا لم اكتب دوال اسمبلي من قبل P:
لذلك لم اعرف ان البار متراات تتوجه إلى المسجلات تلقائياً ... او بعمنى اصح لا اعرف اي المسجل يحتوب R او G أو B
شكراً على التعديل
------
PHP كود :
function MakeRGB(R,G,B : Byte):Cardinal ;
begin
Result := B * $10000;
asm
MOV EAX,0
MOV EAX,Result
MOV AH,G
MOV AL,R
MOV Result,EAX
end;
end;
function GetRValue_T(RGB : Cardinal):Byte ;
begin
asm
MOV EAX,RGB
MOV Result,AL
end;
end;
function GetGValue_T(RGB : Cardinal):Byte ;
begin
asm
MOV EAX,RGB
MOV Result,AH
end;
end;
function GetBValue_T(RGB : Cardinal):Byte ;
begin
Result := RGB div $10000;
end;
حل آخر لـ MakeRGB
PHP كود :
function MakeRGB(R,G,B : Byte):Cardinal ;
begin
asm
MOV EAX,0
MOV AL,B
MOV ECX,$10000
MUL EAX,ECX
MOV AL,G
MOV CX,$100
MUL AX,CX
MOV AL,R
MOV Result,EAX
end;
end;
أعتقدت ان هناك طريقة لتصغير كود الاسمبلي ... فانا لم اكتب دوال اسمبلي من قبل P:
لذلك لم اعرف ان البار متراات تتوجه إلى المسجلات تلقائياً ... او بعمنى اصح لا اعرف اي المسجل يحتوب R او G أو B
شكراً على التعديل

------
إقتباس :شيئ آخر أخي ALmuhhnad الدالة MakeRGB .. تعمل على 32 بت فقط !!!لا للاسف لا املك ... اضن ذلك يرجع لإختلاف الاوامر او سعة المسجلات في 64
ان كنت تمتلك نظام 64 بت , فجرب أن تقوم بتحويلها .

