السلام عليكم و رحمة الله و بركاته
- أرأيت لماذا قلت أسئلة بسيطة تحتاج توضيح مفاهيم
![[صورة: icon10.gif]](http://www.delphi4arab.net/forum/images/icons/icon10.gif)
...
1- سأشرح ببساطة و بشكل سطحي , نكتب كود بسيط يجمع متغيرين ذو طبيعة حقيقية (أعداد بدون فاصلة) :
كود :
procedure TForm1.Button1Click(Sender: TObject);
Var
{متغيرات محلية}
A: Integer;
B: Integer;
C: Integer;
begin
A:= 17; //إسناد قيمة لـ A
B:= 88; //إسناد قيمة لـ B
C:= A + B; // جمع المتغيروينA,B
ShowMessage('A + B = ' + IntToStr(C)); //عرض المجموع C في رسالة
end;
2- تحليل الكود,كيف ينفذ المعالج هذا الكود :
كود :
...
MOV EAX,11 // $11 = 17
MOV EDX,58 // $58 = 88
LEA EBX,DWORD PTR DS:[EDX+EAX] // EBX = $11 + $58 = $69 (105)
...
3- الآن , لينفذ المعالج كود معين (مجموعة خطوات) عن طريق RI أو الريجيسترات الداخلية .... الخ
كيف ؟ (حسب الكود الأول في دلفي), يضع القيمة $11 في المسجل Eax (
مسجل 32 Bit) يصبح
المسجل هكذا : 0001 0001 = Eax , أيضا المسجل 1000 0101 = Edx
يعني تم تخصيص 32Bit = 4 Byte للمتغير A الذي خزن القيمة 17 فيها .
- الأن النتيجة عدد صحيح A + B , يسند لـ C بهذا الشكل :
كود :
LEA EBX,DWORD PTR DS:[EDX+EAX]
1001 0110 = Ebx أي النتيجة التي ستعرض في الرسالة 105
- 64/32/16 bit حسب معمارية المعالج .