بسم الله الرحمن الرحيم
قمت بكتابة هذه الداله
;***********************************************; ; Proc Name : MemoryCopyB ; ; Description : copy block of memory from src ; to dest using specified length. ; ; Parameters : ; ; Dest : destination memory to copy to. ; Src : source memory to copy from. ; Len : number of bytes to copy. ; ; Return : None ;***********************************************; MemoryCopyB 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 address in edi mov edi, Dest ; put destination address in edi rep movsb ; repeat copy until ecx is zero pop edi ; restore edi pop esi ; restore esi ret MemoryCopyB ENDP
الداله دى بتنسخ عدد معين من البايت (مسجل فى Len) من Src إلى Dest.
عملية النسخ تتم من اليسار لليمين بمعنى ان لو عندنا النص "12345" (كل رقم مسجل فى واحد بايت) سيتم نسخ النص بالكامل بدءا من "1" و صولا لـ "5".
سؤالى هو ازاى اقدر اعدل على الداله دى و اخليها تنسخ من اليمين لليسار بمعنى النسخ بدءا من "5" و صولا إلى "1".
ممكن حد يسئل و يقول ايه الفائده فى كلتا الحالتين عملية النسخ بتم؟
الكلام ده صحيح لكن فى بعض الحالات الخاصه بيتحتم عليا النسخ من اليمين لليسار، منها الحاله اللى انا فيها دلوقتىو هى بإختصار:
عندى النص "ABCDEFGH" (سأسميه dest) و اريد استبدال الحرف A بالكلمه "XYZ" (سأسميه val) لإتمام هذه العمليه اقوم بزياده حجم المؤشر الذى يشير للنص dest عن طريق استدعاء الداله HeapReAlloc و بهذا سيتم زيادة مساحة dest (فى هذه الحاله 2 بايت) بعدها اقوم بنسخ الحروف بدءا من الحرف B وصولا للحرف H لمكانهم الجديد داخل النص dest (بأخره) المشكله انه اذا تم بدء النسخ من الحرف B سيتم النسخ فوق حرف اخر و هو فى حالتنا هذه الحرف D و بالتالى عند وصولى للحرف D سيكون تم تغييره لذا الحل هو بدء النسخ من الحرف H لعدم ابدال اى حرف من الموجودين.
المثال السابق هو توضيح لماذا النسخ العادى لا ينفع فى هذه الحاله، إذا لم يكن الشرح وافى فدعك منه، كل ما اصبوا إليه هو هل يمكن تعديل الكود السابق للنسخ من اليمين لليسار؟؟
ملحوظه: يمكننى عمل Loop للنسخ من اليمين لليسار و لكن ليس هذا ما اريده انا اريد استخدام تعليمات البروسسور (الخاصه بالنسخ) لهذا الغرض (إن وجدت).
و الله ولى التوفيق