الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

[ تمت الإجابة ]كود x86 و ما يماثله فى x64

بدأه C++er في 13 أبريل 2010 · 2 رد · 808 مشاهدة · في أرشيف قسم الـــ Assembly
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

حيث اني لا استطيع تجربة الكود المكتوب لـ x64 فهنا يأتى دوركم معى لتصحيح الأخطاء

يوجد لدى الكود التالى و هو مكتوب لـ x86

.486
.model flat, stdcall
.code

MemCopyB PROC, Dest:PTR DWORD, Src:PTR DWORD, Len:DWORD

push esi         ; save esi
push edi         ; save edi
mov  ecx, Len    ; put length in ecx
mov  esi, Src    ; put source in esi
mov  edi, Dest   ; put destination in edi
rep  movsb       ; repeat copy until ecx is zero
pop  edi         ; restore edi
pop  esi         ; restore esi
ret

MemCopyB ENDP

END

قمت بتحويله لـ x64 ليتسع مدى نسخ القيم من خلال الداله و اصبح كالتالى

.code

MemCopyB PROC, Dest:PTR QWORD, Src:PTR QWORD, Len:QWORD

push rsi         ; save rsi
push rdi         ; save rdi
mov  rcx, Len    ; put length in rcx
mov  rsi, Src    ; put source in rsi
mov  rdi, Dest   ; put destination in rdi
rep  movsb       ; repeat copy until rcx is zero
pop  rdi         ; restore rdi
pop  rsi         ; restore rsi
ret

MemCopyB ENDP

END

فهل الكود الخاص بـ x64 صحيح؟

و الله ولى التوفيق

تم تعديل هذه المشاركة بواسطة Muhammad alaa في 13 أبريل 2010 في 20:26

مدونتي: C++ Tips and Tricks

#2

لم أجرب لكني لا أعتقد أنها خاطئة (هل حقاً ستحتاج Len أن تكون QWORD ؟)

بالمناسبة، لو كنت مكانك لنظرت إلى حجم Len وقسمته على 8 وقمت بنقل الجزء الصحيح باستخدام REP MOVSQ الخاصة بـ x64 والباقي باستخدام REP MOVSB

if you are fast, go faster ;)

1

Do as I say, not as I do

We are Anonymous. We are Legion. We don't forgive. We don't forget

#3
اقتباس
لو كنت مكانك لنظرت إلى حجم Len وقسمته على 8 وقمت بنقل الجزء الصحيح باستخدام REP MOVSQ الخاصة بـ x64 والباقي باستخدام REP MOVSB

فكره جميله، و لكنى لن استطيع تطبيقها لأن هذا الكود مكتوب فقط لغرض اختبار عمل البرنامج و فيما بعد سيتم تغيير الكود بأكمله - مع الإبقاء على تصريح الدوال كما هم - و سأستخدم MMX لضمان اداء افضل و سرعة اعلى.

شكرا لك اخى Xacker.

و الله ولى التوفيق

تم تعديل هذه المشاركة بواسطة Muhammad alaa في 24 أبريل 2010 في 20:51

مدونتي: C++ Tips and Tricks

مواضيع مشابهة