محاضرة عملية في لغة التجميع (Assembly) تشرح مصفوفات الكلمات (Word arrays) وتخزينها في الذاكرة، والثوابت الرمزية (Symbolic Constants) بين EQU والمساواة، وعمليات النقل مع الامتداد الصفري (MOVZX).
Key Takeaways
- مصفوفة Word تحجز بايتين لكل عنصر، ويجب حساب المساحة الكلية بضربها في عدد العناصر
- الثوابت الرمزية تحسّن وضوح الكود، وتُستبدل بقيمتها أثناء التجميع دون حجز ذاكرة وقت التشغيل
- تعريف الثابت بـ EQU يمنع تغييره لاحقًا، بخلاف = الذي يسمح بإعادة التعريف
- MOVZX يُستخدم لنقل قيم غير موقعة من حجم أصغر إلى أكبر مع ملء الأصفار
What the video covers
- متابعة للجزء الثاني من مختبر البرمجة بلغة التجميع، تبدأ من مصفوفة الكلمات (Word)
- شرح كيفية حجز المساحة في الذاكرة للمصفوفات: كل عنصر من نوع Word يحتاج بايتين
- توضيح تخزين القيم داخل الذاكرة بايت بايت، وتكرار القيم باستخدام DUP
- تعريف الثوابت الرمزية (Symbolic Constants) وفائدتها في تسهيل قراءة الكود وصيانته
- مثال عملي: تحويل درجة الحرارة من سيليزيوس إلى كلفن باستخدام ثابت لتعبير حسابي
- الفرق بين تعريف الثابت بإشارة = والتعريف بكلمة EQU، وأن الأخير لا يقبل إعادة التعريف
- شرح تعليمة MOVZX للنقل من بايت إلى رجستر أكبر مع امتداد الأصفار
- توضيح أن الرقم السالب لا يُمتد بالأصفار بشكل صحيح، وأهمية الفرق بين الأرقام الموقعة وغير الموقعة
- شرح مفهوم العنوان (Address) وأن رجستر المؤشر يحتوي على عنوان موقع في الذاكرة
Full Transcript — Download SRT & Markdown
Speaker A
نكمل من حيث توقفنا. أوصلنا لعند الورد. ليست طبعًا، الشيء هذا مش مختلف تمامًا عن الليست العادية اللي تعاملنا معها في البداية. تبعت الليست من نوع البايت، بس الفكرة هون اللي بدنا نركز عليها، واللي بنقدر نطبقها على باقي أنواع الإنتركساكشن داتا تايب اللي درسناها.
Speaker A
داتا تايب اللي درسناها إنه طلع معي عرفنا إحنا هنا إنه إيش اسمها راح يكون هاي الورد ليست اللي موجودة عندي اسمها دبليو يعني الاسملر راح يأشر على المساحة أو على أول عنصر من هاي الليستة اللي موجودة عندي بالميموري باسم دبليو
Speaker A
إنه طلع معي، عرفنا إحنا هنا إنه إيش اسمها؟ راح يكون هاي الورد ليست اللي موجودة عندي اسمها دبليو. يعني الاسمبلر راح يأشر على المساحة، أو على أول عنصر من هاي الليستة اللي موجودة عندي بالميموري باسم دبليو.
Speaker A
اثنين بايت إذا بتعامل عندي قديش عدد العناصر اثنين قديش بياخذ العنصر الواحد مساحة بالذاكرة برضه اثنين إذا صار عندي الجواب أربعة إذا بدي أربعة بايتات أحجزهم بالذاكرة صار في عندي هنا واحد اثنين ثلاثة أربعة كيف بدي أخزنهم حكى لكم بنخزنهم كالتالي
Speaker A
رح نروح على الميموري. هاي الميموري تبعتنا نفترض موجودة بهذا الشكل. أول حاجة بتطلع عليها: شو نوع الداتا تايب تبعتها؟ وورد. طيب، الورد قديش بتحجز للعنصر الواحد بالميموري؟ اثنين بايت. إذا أصبح عندي أكم عنصر موجود؟ عنصر، عنصرين؟ معناته العنصر واحد بده اثنين بايت. إذا بتعامل عندي قديش عدد العناصر؟ اثنين. قديش بياخذ العنصر الواحد مساحة بالذاكرة؟ برضه اثنين. إذا صار عندي الجواب أربعة. إذا بدي أربعة بايتات أحجزهم بالذاكرة صار في عندي هنا: واحد، اثنين، ثلاثة، أربعة. كيف بدي أخزنهم؟ حكى لكم، بنخزنهم كالتالي.
Speaker A
لازم يكون معها كمان بايت عشان أعتبرهم عنصر واحد طيب إيش بدي أحط بالبايت الثاني الفاضي عندي لأنه أصلًا الرقم واحد يكفي إنه هو يتخزن بالبايت الأولاني أكم تحطوا صفرين خلصنا ولا أسهل طيب بيجي نفس الحاجة بعدها صفر اثنين بيلزمه أكم حكينا من نوع ال
Speaker A
ببلش أول حاجة بالبايت الأول. البايت الأول بحط فيه صفر واحد. طيب، أنا هلقيت استوعبت نقطة مهمة جدًا: هاي الدبليو بتأشر على أول عنصر موجود عندي هان. ولكن العنصر الأول أصلًا، لأنه هاي من نوع وورد، بيتخزن في اثنين بايت. يعني هادي لازم يكون معها كمان بايت عشان أعتبرهم عنصر واحد. طيب، إيش بدي أحط بالبايت الثاني الفاضي عندي؟ لأنه أصلًا الرقم واحد يكفي إنه هو يتخزن بالبايت الأولاني. كم تحطوا؟ صفرين، خلصنا ولا أسهل؟ طيب، بيجي نفس الحاجة بعدها: صفر اثنين، بيلزمه كم؟ حكينا من نوع الورد بيلزمه عنصرين، عفوًا، اثنين بايت. فصار عندي هنا صفر صفر، وهي اللي موجودة عندكم هان بالشكل هذا.
Speaker A
بايت، وإسمها بدي أشر عليه بإسم الروم، وحكالي إنه أنا بدي أعمل لإلها دوبليكيت، تمام، هلقيت بدي أعملها دوبليكيت كم مرة؟ ثلاث مرات بدي أعملها دوبليكيت، حلو، ثلاث مرات بدي أعمل دوبليكيت، بس كم العنصر الواحد قديش بده يحجز مساحة من الميموري؟
Speaker A
آخر شغلة إنه ممكن أعمل ليست تكون إنيشالايزد، يعني أعرف إنه في عندي أنا ليست. الليست هذه من نوع وورد. نرجع ونكرر: وورد يعني بدي أحجز بالذاكرة اثنين بايت، واسمها بدي أشر عليه بإسم الروم، وحكالي إنه أنا بدي أعمل لإلها دوبليكيت. تمام. هلقيت بدي أعملها دوبليكيت كم مرة؟ ثلاث مرات. بدي أعملها دوبليكيت ثلاث مرات. حلو. ثلاث مرات بدي أعمل دوبليكيت، بس كم العنصر الواحد قديش بده يحجز مساحة من الميموري؟ اثنين. إذاً أصبح عندي إنه أنا بتعامل مع ستة. بدي أحجز ست أماكن، أو ست بايتات من الميموري، وكلهم بدي أعبيهم بقيمة إنيشالايز. بتكون مش محددة.
Speaker A
بتكون مش محددة. تمام. ندخل على جزئية ثانية وهي جزئية بسيطة جداً، السيمبوليك كونستانتس، هل جديد علينا الكونستانتس؟ لا، لأنه أخذناها بكل أنواع لغات البرمجة المختلفة، الفكرة منها إنه لنفترض، لنفترض إحنا كتبنا برنامج إنه يحسب، إيه، برنامج مالي لمحاسبة، حلو،
Speaker A
تمام. ندخل على جزئية ثانية، وهي جزئية بسيطة جدًا: السيمبوليك كونستانتس. هل جديد علينا الكونستانتس؟ لا، لأنه أخذناها بكل أنواع لغات البرمجة المختلفة. الفكرة منها إنه، لنفترض، إحنا كتبنا برنامج إنه يحسب، برنامج مالي لمحاسبة. حلو. وإحنا رحنا كتبنا إنه البالانس عندي بده يساوي 1000، وبدي أطبق مجموعة من العمليات الحسابية خلال الكود. فأنا بدل ما يجيكم الكود مرة واحدة، وتصيروا تحاولوا تفهموا الـ 1000 هاي اللي متكررة 5000 مرة بالكود، إيش فكرتها؟ إيش بتمثل؟ فأنا بروح من البداية بالدوت داتا اللي موجودة عندي، بعرّف إنه البالانس تبعتي هاي بدها تساوي 1000. وكل مرة داخل أجزاء الكود تبعي في الدوت كود، بكتب، مثلًا، 1000؟ لا، بدل ما أكتب 1000، بكتب عندي إيش؟ البالانس، وبنفذ عليه عملية. ساعتها أنا صار مربوط عندي إنه جوا الكود هذه البالانس. طيب، إيش قيمتها؟ ما هي محددة عندي فوق مرة واحدة إنه هي عبارة عن الـ 1000. فصار بالنسبة لي، أنا أفهم في المشاريع الكبرى خصوصًا، إيش الفكرة من هذا الرقم اللي موجود عندي. هذا من باب التسهيل. هذه أول شغلة، تمام؟
Speaker A
البداية بالدوت داتا اللي موجودة عندي، بعرف والله إنه البالانس تبعتي هاي بدها تساوي 1000، وكل مرة داخل أجزاء الكود تبعي في الدوت كود، بكتب مثلاً 1000، الـ مش بدل ما أكتب 1000، بكتب عندي إيش؟ البالانس، وبنفذ عليه عملية، ساعتها أنا
Speaker A
فالسيمبوليك كونستانت هو بيعطي اسم لـ نمبر، أو حتى للإكسبريشن. وهذه نقطة كتير مهمة: يعني الكونستانت الموجودة عندي مش شرط إنه يكون معطى فقط لرقم. لا، ممكن يكون معطى برضه لإكسبريشن، لو هذا الإكسبريشن رح يتكرر عندي كثير من المرات داخل الكود تبعي. إيه، يعني مثلًا، لو بدي أعرف إيه تمبريتشر، إيه، نفترض كده بدي أعرف تمبريتشر، إيه، زائد 273، لو بدي أحوّل من سيليزيوس لكلفن؟ تمام؟ وبروح مخزّنها مثلًا بكونستانت، كأنه، إيه، سيليزيوس. هي المثال على الإكسبريشن اللي أنا بحكي عنه. تمام؟
Speaker A
التسهيل، هذه أول شغلة، تمام؟ فـ الـ الـ السيمبوليك كونستانت هو بيعطي إسم لـ نمبر أو حتى الإكسبريشن، وهذه نقطة كتير مهمة، يعني الكونستانت الموجودة عندي مش شرط إنه يكون معطى فقط لرقم، لا، ممكن يكون معطى برضه لإكسبريشن، لو هذا
Speaker A
ماشي، حلوين. هلقيتها بنكمل. أهم نقطة بدنا نركز عليها بموضوع السيمبوليك كونستانتس إنه أنا بعرّف كونستانت. هذا الكونستانت ليس فاريابل. إيش يعني ليس فاريابل؟ إنه ما بيحجز مساحة بالميموري وقت الرن. هذا مش فاريابل، هذا مجرد كونستانت موجود من باب التسهيل. كأني بحكي للأسمبلر: مجرد ما تشوف هذا الاسم اللي أنا كتبته لك إياه، على طول استبدله بالرقم أو بالإكسبريشن اللي أنا حطيته لك إياه بالدوت داتا، فقط لا غير.
Speaker A
هي المثال على الإكسبيريشن اللي أنا بحكي عنه, تمام؟ ماشي حلوين, هلقيتها بنكمل. إيه, أهم نقطة بدنا نركز عليها بموضوع السيمبوليك كونستانتس إنه أنا بعرّف كونستانت, هذا الكونستانت ليس فاريابل, إيش يعني ليس فاريابل؟ إنه ما بيحجز مساحة بالميموري وقت الـ إيه, وقت الرن.
Speaker A
طيب، في عندي نوعين من طريقة عمل السيمبوليك كونستانتس، اللي هي إشارة اليساوي والإيكوال. الآن ركّزوا شوية مع المثال الموجود عندي: حكى لي، السيكند، بير مينت.
Speaker A
نوعين من الـ من طريقة عمل السيمبوليك كونستانتس, اللي هي إشارة اليساوي والإيكوال. الآن, ركز شوية مع المثال الموجود عندي, حكى لي السيكندز بير مينيت.
Speaker A
إيه، طريقة تعاملنا مع الكونستانت: يفضّل، يفضّل، هي مش إجباري، يفضّل إنه إحنا لما بدنا نسمّي الكونستانت الموجود عندي، نسميه بهاي الكيفية: لو بيتكون من كذا مقطع، نحط أندرسكور بين كل مقطع موجود عندي، ويفضّل إنه كل الحروف الموجودة عندي تكون كابيتال ليتر. هذا عشان أي حدا بيشوف يستوعب إنه هذا كونستانت، تمام؟
Speaker A
ليتر, هذا عشان أي حدا بيشوف يستوعب إنه هذا كونستانت, تمام؟ فهو حكى لي إنه بدها تساوي 60, إذًا أصبح عندي الكونستانت المعرّف عندي بالدوت داتا, بيحكي لي إنه عدد الثواني الموجودة في الدقيقة هي 60.
Speaker A
فهو حكى لي إنه بدها تساوي 60. إذًا أصبح عندي الكونستانت المعرّف عندي بالدوت داتا، بيحكي لي إنه عدد الثواني الموجودة في الدقيقة هي 60.
Speaker A
جماعة مثلًا 3600, حأحكي لكم عادي, ما في مشكلة الاسملر رح يتقبلها طبيعي جدا ورح يقبلها وما رح يحكيلكم أي شي تمام؟ وايش بيقبل؟ بيقبل بيقبل السيمبوليك كونستنت فقط يكون نيموريك فاليو أو اكسبريشنز في حالة اننا بنتعامل مع اشارة اليساوي. النوع الثاني
Speaker A
إيش الفكرة من إنه بيحكي لي كان بي ريديفايند؟ يعني لو أنتم استخدمتم في تعريفكم للسيمبوليك كونستانت الموجود عندي إشارة اليساوي، وحبيتوا فجأة أثناء الكود تغيروا لي السيكند بير مينت، وبعد ما عرفتوها فوق إنه هي 60، تخلّوا لي إياها يا جماعة مثلًا 3600؟ حأحكي لكم عادي، ما في مشكلة. الاسمبلر رح يتقبلها طبيعي جدًا، ورح يقبلها وما رح يحكيلكم أي شي، تمام؟ وإيش بيقبل؟ بيقبل السيمبوليك كونستانت فقط يكون نيميريك فاليو أو إكسبريشنز في حالة إننا بنتعامل مع إشارة اليساوي.
Speaker A
لو انتم حبيتو فجأة اثناء الكود تروحو تغيرولي ال60 هادي وتكتبولي ال3600 حيطلع لكم ايرور ليش؟ لانه بالنسبة للاسمبلر مجرد ما استخدمتو كلمة الايكوال هاي فخلاص.
Speaker A
النوع الثاني هو الإيكوال. الإيكوال بدل ما حطيت إشارة اليساوي، كتبت بس كلمة إيكوال، اختصار EQU. بكتبله إنه المينت بير أور، إنه عدد الدقائق الموجودة بالساعة هي عبارة عن 60. لو انتم حبيتو فجأة أثناء الكود تروحو تغيرولي ال60 هادي وتكتبولي ال3600، حيطلع لكم إيرور. ليش؟ لأنه بالنسبة للاسمبلر، مجرد ما استخدمتو كلمة الإيكوال هاي، فخلاص. بعد التعريف لا يمكن إنه هو يقبل تعملوا إعادة التسمية أو إعادة للقيمة. خلص، هيك.
Speaker A
تمام؟ طب بشو بيتعامل الايكوال؟ ايكوال هادا ممكن استخدمه مع النمبرز ممكن استخدمه على الاكسبريشن أو ممكن حتى استخدمه مع التكست اللي موجود في داخل الانجل براكتس.
Speaker A
تمام؟ طيب، بشو بيتعامل الإيكوال؟ الإيكوال هذا ممكن أستخدمه مع النمبرز، ممكن أستخدمه على الإكسبريشن، أو ممكن حتى أستخدمه مع التكست اللي موجود في داخل الأنجل براكتس.
Speaker A
اللي عملها تو كونستنت في بعضهم البعض. تمام؟ ماشي ندخل الان على اللوكيشن وهاي انا ما حددت لها في بداية اللاب السابق ال عفوا في نهاية اللاب السابق فالسمبل الموجود عندي اشارة الدولار ساين الهدف منها الهدف منها زي ما شفنا المرة اللي
Speaker A
حلو؟ كلام جديد علينا، يعني ممكن يكون جزئية الإيكوال الجديدة علينا، ولكن الباقي إن شاء الله بسيط، ما في أي مشكلة. هاي مثال على الإكسبريشن اللي عملها تو كونستانت في بعضهم البعض.
Speaker A
ما علينا نحكي الان على اشارة الدولار ساين. اشارة الدولار ساين تختلف عن اشارة الاند اللي استخدمناها في المرة اللي فاتت الفكرة من اشارة الدولار ساين إنه أنا بدي أحدد موقع ال- ال- بايت الثاني وين بده يكون.
Speaker A
تمام؟ ماشي، ندخل الآن على اللوكيشن. وهاي أنا ما حددت لها في بداية اللاب السابق، عفوًا، في نهاية اللاب
Speaker A
التيمبس الموجودة عندي هذه هو اسم، اسم للستة. هي الستة من نوع أس وورد. وورد يعني بدي أحجز اثنين بايت لكل إليمنت موجود فيها. أس يعني بتعامل مع السايند، يعني ممكن يكون في عندي أرقام موجبة أو سالبة.
Speaker A
عندي خمس عناصر، امم، خمس عناصر من نوع إيش حكينا؟ من نوع وورد، يعني عندي اثنين، يعني اه، خلص هيك صار بالنسبة لي واضح أنا بدي أحجز عشر بايتات في الميموري.
Speaker A
لهي التيمبس الموجودة عندي. لما عملتوا هذا التعريف، بحكي لكم لو جيتوا في الكود وكتبتوا بعدها مباشرة جملة هي اللي هي الدولار ساين ناقص التيمب فإنه كأنه شو بتحكوا؟ رح يرجع لي إيش هو السايز، تمام؟ إيش هو هي أول حاجة
Speaker A
حيعملها؟ حيرجع لكم إيش هو السايز تبع هي التيمب الموجودة عندي. السايز كيف طلعناه؟ حكينا هو عبارة عن خمسة، عدد العناصر الموجودة عندي، بنوع ال- أو قديش كل عنصر بيحتاج عشان يتخزن حسب نوع الستة الموجودة عندي، فطلع لي هو عبارة عن عشرة.
Speaker A
فكأنه بيحكي لي إنه ما بين بداية التيمبس تمام؟ والمكان أو البوزيشن اللي هي أو ال- وال- والمكان والبوزيشن اللي إحنا موجودين فيه.
Speaker A
تمام؟ فهي الفكرة هان إيش هو بيرجعني؟ رجعني السايز. تمام؟ تمام؟ تبع ال- التيمبس، عفواً.
Speaker A
ف- في عندنا شغ- ثلاث شغلات ثانية، اللي هي التايب واللينكث أوف والسايز أوف. التايب يا جماعة، لما أنا بدي أجي أكتب تايب التيمبس، أول حاجة أنتم حتخطر على بالكم تحكوا لي إنه التايب أكيد رح يطلع أس وورد، بس
Speaker A
بالنسبة للأسيمبلر، لما بيشوف التايب بيسأل حاله سؤال، طالما هي أس وورد، يعني العنصر الواحد قديش بدي أحجزله له الذاكرة؟ حيحكي لك اثنين بايت، إذاً الجواب هو اثنين بايت. لو كانت التيمبس اللي موجودة عندي دي وورد، حيحكي لك تايب
Speaker A
للدي امبس، حيسأل حاله الدي وورد، العنصر الواحد فيها قديش بياخذ مساحة؟ حيقول لك أربعة، إذاً الجواب هو أربعة.
Speaker A
اللينكس أوف تبع التيمبس، دائماً نتذكر كنا نحكي عن اللينكس تبع الأري، يعني قديش عدد العناصر اللي موجودة بالأري؟ هاي التيمبس كم عنصر موجود فيها؟ خمسة، إذاً حيطلع لي الجواب هو عبارة عن خمسة.
Speaker A
السايز أوف تبع التيمبس، السايز أوف هو عبارة عن، هو كاتب لكم هذا القانون، اللي عبارة عن عدد العناصر اللي موجودة فيها، اللي هو اللينكس أوف، مضروبة بالتايب، قديش العنصر الواحد بده يحجز مساحة بالميموري؟ فأنتم تذكروا دائماً قديش في
Speaker A
عندي أنا عدد عناصر بالليسته هاي تبعتي؟ خمسة، العنصر الواحد قديش بده يحجز مساحة؟ اثنين، خمسة في اثنين، عشرة، طلعنا السايز أوف، تمام؟ ندخل على الشغلة كثير كثير مهمة.
Speaker A
الهدف منها إنه بدي أجاوب على سؤال، أنا كيف بدي أنقل قيمة صغيرة من ريجستر، أو كيف بدي أنقل حتى لو ما كانت ريجستر، كيف بدي أنقل قيمة صغيرة لريجستر أكبر، بدون ما أغير المعنى العددي تبعها؟ الموف تبعتنا، لو أجينا نحكي على الموف مثلاً،
Speaker A
كتبت موف، وكتبت اي ال، وكتبت عندي مثلاً تمبريتشر، وخلينا نتخيل إنه التمبريتشر هاي الموجودة عندي هي فاريابل، والفاريابل هذا من نوع اسبايت، ونفترض إنه القيمة تبعته هي عبارة عن سالب 15، حلو يا جماعة؟ تمام. هاي التمبريتشر اللي من نوع
Speaker A
الاسبايت، قديش بتحجز مساحة في الذاكرة؟ بتحجز عندي واحد بايت فعلياً، تمام؟ والاي ال، بيستقبل هاي القيمة، بيقدر إنه هو يخزن هاي القيمة، فصار في عندي أنا إنه الموف تبعتي بتتطلب مني إنه السايز تبع هذا العنصر اللي هان، والعنصر اللي هان
Speaker A
يكونوا متساويين، سيم سايز. تمام؟ إذاً هذا بايت، وهذا راح يكون إيش؟ بايت. هي الفكرة. إذا الموف ريكوايرز إنه البوث أوبيراندز يكونوا بنفس السايز.
Speaker A
ماشي؟ فإنه أنا أنتقل الآن من قيمة صغيرة لقيمة كبيرة حتأثر على إيش حكينا؟ حتأثر على القيمة العددية. فأنا ما بدي أغير في المعنى. يعني نفترض إنه القيمة تبعتي كانت سالبة ما بدي أخليها موجبة. وهكذا. فعشان هيك تواجد عندي الموف زي إكس والموف إس
Speaker A
إكس. طيب. إيش هي الموف زي إكس؟ يعني يعني نسأل حالنا سؤال. إيش هي الموف زي إكس؟ موف زي إكس هي موف وذ زيرو إكستند. يعني فهمنا زيرو إكستند. يعني أنا في عندي حأعمل إمتداد بالأصفار. طيب. نتخيل إنه في عندي
Speaker A
أنا فاريابل. هذا الفاريابل هو مخزن بالذاكرة. والحجم تبعه هو واحد بايت. شو يعني واحد بايت؟ يعني ثمانية بتس. وبدي أنقله الواحد بايت هذا أنتم متخيلينه. بدي أنقله لرجستر. الرجستر هذا بخزن 32 بت.
Speaker A
فالـ إشي هذا بزبطش يعني. يعني مثلا لو أنا عندي تمبريتشر هاي الموجودة قيمتها من نوع إس بايت سالب 15. بدي أروح أنا أخزنها بالرجستر الـ إي إي إكس اللي موجود عندي اللي هو عبارة عن 32 بت. طيب إحنا نرجع
Speaker A
نسأل حالنا سؤال. كيف نكتب أصلا السالب 15 على شكل بايت؟ نكتبها واحد. واحد واحد. وهذا كتبناه في بداية اللاب.
Speaker A
هي السالب 15 اللي موجودة عندي. صح؟ فالسالب 15 اللي موجودة عندي هذي عشان أنقلها على رجستر أكبر يا أعزائي. حيكون الموضوع إنه في عندي حوالي 24 بت زيادة.
Speaker A
مش عارفة شو أعمل فيهم. طيب شو أعمل ليهم؟ يعني أنا عندي ثمانية بت. الـ 24 بت اللي ضايلين من الـ إي إكس الموجودة عندي. أنا شو أعمل ليهم؟ تمام؟ فلما يكون عندي ثمانية بت وأحطها في رجستر 32 بت ما بكفيش
Speaker A
بس إني أنا أعمل عملية الموف العادية. إني أنا أنسخ البتات الثمانية وأحطها في الرجستر. طيب ما في عندي 24 بت فاضيين.
Speaker A
لازم أحدد القيمة تبعتهم شو بدي أعمل فيها. طيب أمليهم أصفار؟ طيب أكرر بت الإشارة عشان تضلها سالبة. ما هي سالب 15 عشان هيك بنستخدم الموف زي اكس اللي هي موف وذ زيرو اكستند تمام؟ فالـ الفكرة الأساسية إنه أنا بدي أنقل
Speaker A
القيمة مع نعمل توسيع بالأصفار. فإيش بسوي هو؟ بروح بقولك بدي آخذ القيمة الأصلية البتات الأصلية تبعتك كاملة كما هي وكل البتات الإضافية الموجودة عندي بدي أكملها أصفار.
Speaker A
الموف زي اكس وين يا جماعة بتكون مناسبة إني أنا أتعامل معها؟ لما بدي أتعامل مع إنه السورس تبعي هو قيمة أنسايند.
Speaker A
يعني بديش أحكي موف زي اكس. قيمة هاي اللي أنا بدي أعمل كوبي لإلها وإحنا كنا حكينا الموف بيعمل نسخ للقيمة وبينقلها على الدستنيشن.
Speaker A
القيمة هاي اللي بدي أنقلها من هان وأعملها نسخ وألصقها هنا في الدستنيشن لازم تكون أنسايند ليش؟ لأنه لما بدي أعبي أصفار أنا هيك ما بأثر على قيمة الإشارة الموجودة عندي ما حأخلي العدد السالب يصير موجب أو العكس.
Speaker A
تمام؟ يعني مثلاً لو جينا أخذنا مثال خليني أمحي بس هذا الكلام اللي مكتوب عندنا هان.
Speaker A
وحكينا رحت وأنا حكيالكم والله بدي أتعامل مع الموف زي اكس وكتبت إنه بدي أستخدم ريجستر الإي بي اكس اللي هو بيأخذ 32 بت وبدي أحط فيه طلعوا معي مثلاً بدي أحط بايت.
Speaker A
في حاجة اسمها البي تي ار إيه مش حأحب كثير أتعمق فيها الآن. حنحكيها إن شاء الله لقدام بس يعني هو مثال إنه نفترض مثلاً المصدر تبعي مع السورس هاي طلع معي يعني كأني بأشر على موقع معين بدي أروح عليه وإحنا قلنا
Speaker A
هذه لما تكون موجودة كأني بأشر على موقع معين بدي أروح عليه بدي آخذ القيمة اللي موجودة فيه بدي آخذ البايت المحدد اللي موجودة فيه وانقله على الاي بي اكس. تمام؟ وايش بروح بحكيله كملي باقي الاجزاء اللي موجودة عندي بـ 24
Speaker A
صفر. تمام؟ ماشي. فهنا لو مثلاً انا بتعامل انه الـ الـ القيمة تبعتي انا رايحة لالها هاي اللي هي 241 فرح يحطلي انه هاي القيمة الاصلية اللي موجودة عندي اف واحد هي القيمة الاصلية اللي موجودة عندي. هاي القيمة الاصلية اللي موجودة
Speaker A
عندي رح نملأ الباقي ايش؟ اصفار. متى تستخدمي موف زي اكس؟ لما يكون المصدر قيمة انسايد زي ما حكينا.
Speaker A
ايه مثلاً يكون عدد من نوع البايت بدي احتفظ فيه كعدد من قيمة صفر لـ 255. فبالتالي عشان انقله لرجستر اكبر انا مثلاً شغالة في بايت بدي انقله لرجستر اكبر زي اللي هو الاي اي اكس او الاي بي اكس. فبالتالي بستخدم الموف زي
Speaker A
اكس اللي موجودة عندي لانها مش رح تتأثر لو اضفنا عندي اصفار. الشغلة الثانية اللي ندخل عليها هي الموف الاس اكس.
Speaker A
من اسمها اس. دائماً لما تشوفوا الاس تذكروا الساين. معناها موف وذ ساين اكستند. يعني انا بدي انقل القيمة وبدي اعمل اكستند لمين؟ للاشارة. هذا بتعامل معها لما انا بتعامل مع الساين نمبر. وبدي انقله لقيمة حجم او لرجستر اكبر. بس بنفس الوقت ما بدي اثر على
Speaker A
اشارته هي موجبة او سالبة. فالفرق فيه انه عن الموف زي اكس انه انا ما بضيفش اصفار بشكل دائم ها.
Speaker A
انا بتطلع على اعلى بت موجود عندي في السورس. وهو بت الاشارة. بت الاشارة اللي موجودة عندي هان. يعني مثلاً لو كان بت الاشارة اللي موجود عندي هو عبارة عن زيرو فبملأ البتات تبعتي الاكستند الموجودة عندي بالاصفار. ولو كان بت الاشارة اللي
Speaker A
موجودة عندي هو واحد بملأ بوحدات. يعني كأني بـ بقلد البت اللي موجود عندي عشان احافظ عليه.
Speaker A
تمام؟ يعني هنا طلع معي عندي الرقم سالب 15. سالب 15 اللي موجودة عندي لما مثلتو بالذاكرة. انتو بدكم تمثلو بالذاكرة انا عشان عاكسة هنا ال- الشي.
Speaker A
طيب، فلما نيجي نمثله بالذاكرة، آخر بت موجود عندي هان بيكون البت رقم واحد. معناتها لما بدي أجي أعمل إكستند، إيش بده يصير الإكستند الموجود عندي عبارة عن وحايد، تمام؟ فلاحظوا معي إيش صار؟ اف اف اف اف اف. وهي النتيجة،
Speaker A
تساوي سالب 15. ولو كان العدد موجب، بمليها بالأصفار. فهي الفكرة الأساسية اللي موجودة عندي بالموف زد اكس والموف اس.
Speaker A
تمام؟ ف- بدنا نيجي نحكي عن النقطة الـ بي تي ار، هيها وصلت بسرعة. عشان نشرح عنها هلقيتها بدقة.
Speaker A
أشرح لكم إياها، وحأعطيكم إيه نقطة كثير هيك إيه ممكن تكون تريكة موجودة فيها. الفكرة الأساسية إنه في بعض الحالات الأسمبلر الموجود عندي بيحتاج إنه يحدد قديش حجم البيانات اللي أنا بدي أقرأها من الميموري.
Speaker A
فعشان هيك بنستخدم البي تي ار عشان أحدد له قديش الحجم اللي بدي إياه يقرأه من الميموري، يعني أنا مثلًا بديش إياه يقرأ الحجم كامل، بس أنا بحدد له قديش بدي يقرأ. يعني مثلًا الموف اس اكس.
Speaker A
تمام؟ الأسوورد بي تي ار ريدينجز بلس ستة، إيش ال- إيش الحاجات اللي إحنا بنحكيها؟ ريدينجز بلس ستة هذا هو العنوان اللي أنا بدي إياه يروح عليه. هذا شو؟ العنوان اللي أنا بدي إياه يروح عليه. الأسوورد بي تي ار بوضح له إنه البيانات، والله ركز معي
Speaker A
يا أسمبلر، البيانات اللي موجودة بالريدينجز بلس ستة هي من نوع شو؟ من نوع ال- أسوورد، والأسوورد هذا تبعي هو قيمة ساين، صح ولا لأ؟ والقيمة السايند هذه اللي موجودة عندي.
Speaker A
بده يكون إيه حجمها 16 بت. ها، شوي إحنا إيه بدينا نتخربط القصة عنا، بس الفكرة إنه كأني بحكي له إيه روح يا أسمبلر على الريدينجز بلس ستة، هذا هو العنوان اللي أنا بدي إياك تروح عليه. الأسوورد بي تي
Speaker A
ار بدي أوضح له إنه البيانات اللي موجودة بهذا الموقع بدي أقرأها كقيمة ساين، والحجم تبعها بدي يكون 16 بت. وانقل لي هاي القيمة كلها اللي موجودة عندي هان، وحط لي إياها بالـ اي اكس، اللي هو ايش؟ 32 بت. تمام؟ ايه، مثال أوضح علشان توصل
Speaker A
لنا الصورة أكثر. الآن المثال اللي بدي أبلش لكم فيه عشان نقدر نستوعب شو هو البي تي ار. أول حاجة البي تي ار اختصار لشو؟ اختصار لبوينتر.
Speaker A
تمام؟ فأنا بدي أتخيل إنه أنا في عندي أصلاً فاريبل مخزنة في الذاكرة أوريدي. الفاريبل هذا لو سميته يا جماعة باسم فاليو.
Speaker A
تمام؟ والفاليو هاي الموجودة عندي بدها تكون من نوع بايت. تمام؟ والبايت هذا أنا هان وين بعرفه؟ ديروا بالكم بتعر- بعرفه بالدوت داتا. عرفت فاريبل من نوع بايت، وأعطيته قيمة هو عبارة عن 25. حلو؟ لو أجيت لقيت أنا عملت حاجة اسمها موف اي
Speaker A
ال. هان أنا بكرر لكم على ال- ال- الجزء اللي ش- شرحناه عمالنا، ايه، عشان أمشي معكم من البداية موف بالـ اي ال للفاليو.
Speaker A
الآن برجع بسأل حالي سؤال. الفاليو من نوع بايت، يعني ثمان بتات. والـ اي ال أصلاً ثمان بتات. فإني أنا أنسخ قيمة هاي اللي هي 25 لهان طبيعي جداً، لأنه حكينا الموف لازم السورس والدستنيشن نفس القيمة.
Speaker A
فما فيش عندي أنا مشكلة. لكن لو كانت هادي مش اي ال، كانت عندي هي عبارة عن اي اي اكس، بنرجع للنقطة اللي حكيناها قبل شوي، بصير في عندي خلل إني أنقل وعدم التوافق.
Speaker A
عشان هيك حكينا في عنا الموف زد اكس وموف اس اكس. بس في دور أساسي نسينا نركز عليه، وقلت لكم لقدام هيه نوصلنا له، وهو نقطة البي تي ار.
Speaker A
هو مش وظيفته إنه يحول القيمة من حجم صغير لحجم كبير. تمام؟ لكن وظيفته إنه يساعدني أحدد الحجم اللي بدي أتعامل معاه من مكان مخزن فيه بالذاكرة. يعني، عشان أفهمها أكثر، لما أنا تو كتبت لكم هاي الكلمة اللي هان بايت بي تي ار، أو يا جماعة لو
Speaker A
شلت البايت وكتبت بدالها وورد، أو شلت الوورد دي وورد، كيو وورد، اللي بدكم إياه.
Speaker A
إحنا تعاملنا مع الذاكرة هيك، تخيلناها دائمًا زي هيك، مجموعة من الصفوف أو خزانة فيها مجموعة من الصفوف، صح؟ وحكينا بدنا نتعامل مع كل صف على إنه واحد بايت، تمام؟ فأنا لما بحكي بايت بي تي آر، كأني بحكي له إنه يا بوينتر، أشر لي على
Speaker A
موقع الذاكرة، واعتبر إنه كل خزانة موجودة عندي هي عبارة عن بايت واحد. لو كانت وورد، كأنه بحكي له، ركز، هنا الـ وورد الواحد بتعامل مع اثنين بايت، فاعتبر لي إنه الموقع بدك تأشر عليه عبارة عن اثنين بايت، يعني 16 بت، دي وورد، أربع
Speaker A
بايتات، تمام؟ فأنا بستخدم هذه البي تي آر عشان بس أحدد حجم البيانات اللي بدها تشير لهي هاي البي تي آر اللي موجودة عندي.
Speaker A
تمام؟ فلو إجينا وإحنا حاكيين إيه، موف، عشان أمشي لكم إياها، هلقيت بنمشي بالموف العادية، بدناش نمشي بالموف إيه، زد إكس أو الموف إس إكس، نمشي بالموف العادية، نتعامل معاها مع البي تي آر، عشان نفهم إيش اللي بصير.
Speaker A
لو إجينا وإحنا كتبنا هنا موف تمام؟ ولنفترض كتبت لكم هنا أنا اللي هي البايت وكتبنا البوينتر تبعتنا وإيش رحت كتبت لكم؟ متذكرين الرجستر هذا اللي حكينا عنه المرة اللي فاتت وسكتنا؟ والإي آي بي، والأشياء هاي، كتبت لكم 25.
Speaker A
شو هاي؟ هيك كأني بحكي لكم إنه أول حاجة الإي إس آي الموجودة عندي هو عبارة عن الرجستر، هذا الرجستر بيحتوي على عنوان لموقع في الذاكرة.
Speaker A
هيك وظيفته، الإي إس آي رجستر، هذا الرجستر بيحتوي على عنوان لموقع محدد في الذاكرة.
Speaker A
تمام؟ فلما بدي أجي أحكي أنا إنه الإي إس آي ما بين البراكيتس هاي، معناها إنه موقع الذاكرة هذا الموجود يعني
Topics:لغة التجميعAssemblyمصفوفاتالذاكرةالثوابت الرمزيةEQUMOVZXالرجسترالبايتالكلمة Word











