مشاهدة النسخة كاملة : دورة يومية بلغة التجميعAssimply
دورة الأسمبلى - اليوم الأول :cool::cool::cool:
سنبدأ بإذن الله و سنناقش المواضيع الأتيه :-
- ما هو 0 و 1 (اللغه الثنائيه) ؟
- ما هى حقيقة وحدات التخزين داخل الكمبيوتر (المسجلات و الذاكره) ؟
- كيف يتم تناقل البيانات بين هذه الوحدات و بعضها البعض و بينها و بين المعالج ؟
- مما يتركب المعالج ؟؟
- البيانات و أنواعها ،،
- كيف تتم معالجة البرامج و تعليماتها؟؟
- كيف يقوم المعالج بتنفيذ تعليمه ما ؟:eek:بسم الله ،،
-------------------------------------
ما هي حقيقة ال 0 و 1 (للغه الثنائيه) ؟؟
هذه القيم تعبر عن معنى كلمة يوجد و لا يوجد - صح أم خطأ - أسود أم أبيض - و تعبر عنها فى علوم الإلكترونيات بوجود جهد كهربائي على سلك ما أم لا يوجد ، بمعنى هناك سلك واحد نحاس مثلا و عليه فرق جهد بالنسبه للأرضى ، فنقول هنا أن هذا السلك به فولت و يحمل القيمه 1 ، هذا السلك نسميه فى الإلكترونيات (بت) ، 8 اسلاك بجانب بعضهم نطلق عليهم (بايت) .
أما في حالة عدم وجود به فولت فإنه يمثل القيمه 0
بهذه الطريقة يمكن لمجموعه من الأسلاك متجاوره و منعزله عن بعضها البعض أن تمثل قيمه مثلا 10101 وهذا يعبر عن خمس أسلاك الأول به فولت و الثانى لا يوجد به و الثالث يوجد به و الرابع لا يوجد به و الخامس يوجد به فولت .
طيب فكر معى أخى ما هى إحتمالات هذه الأسلاك أن تحمل قيم (بمعنى ما هو عدد الإحتمالات الغير متكرره التى يمك أن تمثلها هذه السلاك الخمسه ؟؟)
سنجد أنها 32 إحتمال من 00000 إلى 11111 و هو ما يعبر عن 2 ^ 5
(أى إحتمال قيم السلك الواحد ^ عدد الأسلاك = إحتمال القيم على كل السلاك)
مثال بسيط ، بالنظام العشرى الطبيعى الذى نعمل به جميعا (الرقم الواحد إحتماله أن يكون 10 قيم من 0 إلى 9 ) فمثلا لو عندنا رقم مكون من 5 أماكن فما هى عدد الأرقام التى يمكن أن تمثل بهذه الأماكن الخمسه - على حسب القانون السابق نجد أنها (10^5 = 100000 إحتمال) (من 00000 إلى 99999) ، فعلا القانون صحيح ....
من هذا المثال السابق يتبين لنا طريقة حساب عدد القيم التى يمكن أن يمثلها مجموعه من الأماكن (الأسلاك) فى أى نظام عددى (ونحن نتحدث هنا عن النظام الثنائى) .
تدريب : ما هو عدد القيم التى يمكن تمثيلها ب8 أسلاك (بايت) و 16 سلك (2 بايت) و 32 سلك (4 بايت)
الإجابه :
8 بت > > > 2 ^ 8 = 256 إحتمال
16بت > > > 2 ^ 16 = 65536 إحتمال
32 بت > > > 2 ^ 32 = 4294967296 إحتمال (وهو ما يمثل 4 جيجا من وحدات الكمبيوتر)
باقي أن نذكر أن هذا النظام هو المتبع فى جميع الأجهزه الإلكترونيه و الكمبيوتريه و الألات الحاسبه التى يطلق عليها (أجهزه رقميه) DigitalDevices
-------------------------------------
- ما هى حقيقة وحدات التخزين داخل الكمبيوتر (المسجلات و الذاكره) ؟
وحدات التخزين فى الحقيقه تعتبر مجموعه من السلاك المتجاوره مع بعضهم و منعزلين عن بعضهم ، مع إمكانية أن كل قيمه على أى سلك يمكن تغييرها من 1 إلى 0
أنظر أخي الكريم إلى هذا المثال :eek::-
----------------------------------
أنظر داخل جهازك ، ستجد أن الهارد ديسك Hard Disk موصل بكابل بيانات Data Cable وهو مكون من 40 سلك 40 Bin فى أغلب الأحيان ، هذه الأسلاك هى المسؤاله عن نقل البيانات التى تجدها أمامك على الشاشه الأن من الهارد ديسك إلى المعالج عبر مسارات اللوحه الأم .
لو تسنى لك النظر إلى اللوحه الأم Mother Board من الخلف ستجد عدة مسارات متوازيه و بجانب بعضها تصل بين الذاكره Ram وبين المعالج Processor
تتفق جميع وحدات التخزين فى قدرتها على تمثيل 0 أو 1 و هذا على حسب حجم الوحده
وتختلف وحدات التخزين فى طبيعة هذه القدره
ونناقش هذا سويا هنا ،
------------------------
المسجلات Registers :- تتكون من مجموعات منطقيه بجانب بعضها يمكن للمجموعه الواحده تمثيل بت ( 0 أو 1) (فولت أو لا فولت) و تطلق على المجموعه Flip Flop وهو مركب من وحدات منطقيه اصغر Logic Gates يستطيع الإحتفاظ بالقيم التى بداخله طوال تغذيته بالفولت ،
ماذا تعنى كلمة (طوال تغذيته بالفولت) :confused:؟؟
تعنى أن أى مكون كهربى داخل أى جهاز يحتاج لمصدر أساسى للكهرباء وهذا ما يمكنه من التمييز بين 0 أو 1 ، بمعنى أن المسجل يكون موصل بهذا المصدر الأساسى VCC حتى لو ان القيمه التى تحملها أطرافه 0000000 و هذا
وحدات الذاكره Ram :- بدون التوغل فى تفاصيل - تتركب من مكونات شبيهه بالمسجلات أو بمكثفات و لها أنواع عده و لكنها هذه الأنواع التى تحتاج إلى مصدر كهربى اساسى للحفاظ على القيم داخلها كما هو الحال بالمسجلات .
الاقراص الصلبه Hard Disks :- يمكن تمثيل البيانات عليها على هيئة سطوح قابله للمغنطه ، كل سطح مكون من مسارات ، كا مسار مكون من قطع ، كل قطع مكون من وحدات صغيره فأصغر ، أصغر وحده هى النقطه و هذه النقطه يمكن تغيير خاصيتها المغناطيسيه من (توجد مغنطه أم لا يوجد) و هذا ما يهمنا أنه يمكن تمثيل الوحدات الثنائيه بهذه الطريقه ، و الجديدر بالذكر هنا أن وحدات التخزين التى تعتمد على هذه الطريقه لا تحتاج إلى مصدر كهربى للحفاظ على البيانات التى على سطوحها
طيب سؤال : لماذا إذن نوصلها بكابل طاقه Power Source عند تشغيلها ،
الإجابه : لا ننسى أخوتى الأعزاء أنه يوجد موتور كهربى بالداخل و أجزاء ميكانيكيه أخرى تحتاج بطبيعتها إلى المصدر الكهربى بالإضافه إلى الوحدات المنطقيه و المسجلات التى تنقل البيانات من و إلى كابل البيانات Data Cables
نعود للمسجلات ثانيا و هى أهم وحده نتعامل معها فى الأسمبلى ،
تكون المسجلات موصله ببعضها و بعض و تصل مباشرا بالمسار الرئيسى للبيانات و المسار الرئيسى للتحكم Data Bus and Control Bus .
تعتبر مسجلات المعالج AX , BX , ....... هى من أهم مكونات المعالج ،
معظم المسجلات تحتوى - بالإضافه إلى وحدات تخزين البيانات داخلها Flip Flops - على بينات Bins للتحكم بالبيانات من و إليها فمثلا :-
- تحتوى على بن bin للقراءه
- تحتوى على بن للكتابه
- تحتوى على بن تصفيير ( جعل القيمه التى يحملها صفر)
- تحتوى على بن ذياده ( ذيادة القيمه الى بداخلها بمقدار 1 )
وهكذا ..... و تتيح بنات التحكم هذه للمعالج التحكم بالبيانات الخاصه بكل مسجل على حده ، و سنرى هذه الإمكانيه فى موضوع كيفية نقل البيانات داخل الكمبيوتر
الجدير بالذكر هنا أيضا ، أن أى وحدة تخزين لها بنات تحكم مشابهه Control Bins بما فيهم الذاكره و المسجلات و القرصات الصلبه و المرنه و .....
--------------------------------------
- كيف يتم تناقل البيانات بين هذه الوحدات و بعضها البعض و بينها و بين المعالج ؟
يوجد على اللوحة الأم ثلاث مسارات رئيسيه و لا يخلوا منها جهاز كمبيوتر منذ أخترع الكمبيوتر إلى الأن وهما :-
1 - DataBus
وهو المسار الذى يتم نقل البيانات عليه و يختلف عرض هذا المسار من معالج إلى الأخر (أو بمعنى أصح وأدق - من جيل إلى آخر) ، الجدير بالذكر هنا هو أن المسار يتكون من عدة أسلاك بجانب بعضها البعض و هنا تستخدم لنقل البيانات من و إلى مكونات الكمبيوتر (المعالج - الذاكره - أجهزة الإخراج و الإدخال ) ، يكون كل من هذه المكونات موصل مباشرا بهذا المسار ،
عرض هذا المسار دائما يتساوى مع عرض مسجلات المعالج و عرض الذاكره (بمعنى أن الأجهزه القديمه 16 بت ، كان عرض كل مسجل 16 بت و عرض الذاكره 16 بت وعرض مسار البيانات Data Bus 16 بت أيضا ، وبنفس الطريقه مع 32 بت و 64 بت الذى ظهر قريبا)
2 - Address Bus
هذا المسار مسؤول على حمل قيم العناوين و هو يمثل (الورقه التى تكون بيدك عندما تذهب لتبحث عن بيت الرجل الذى يريده والدك و كتب لك العنوان بهذه الورقه)
يتصل بهذا المسار المعالج (الذى يكتب العناوين) ووحدات التخزين القابله للعنونه (الذاكره و المسجلات و أجهزة الإدخال و الإخراج )
الجدير بالذكر هو أن عرض هذا المسار يحدد كمية الذاكره التى يمكن ان يدعمها النظام ، فمثلا فى المعالجات 8086 كان عرض هذا المسار 20 بت ، إذن عدد الإحتمالات التى يمكن أن تمثل على هذا العدد و هو يعبر عن الأماكن التى يمكن عنونتها بإستخدامه = 2 ^ 20 = 1 ميجا ذاكره
تدريب : ما هو اقصى حجم ذاكره يمكن أن يدعمه جهازك الحالى إذا علمت أن عرض هذا المسار 32 بت ؟؟؟
3 - Control Bus
وهو المسار التى ترسل عليه إشارات التحكم التى تكلمنا عليها فى الجزء الثانى من هذا الدرس ،،، ويكون هذا المسار متصل به كل مكونات الكمبيوتر و ذلك ليمكن التحكم بالبيانات من جانب المعالج ،،
إذن كيف يمكن نقل البيانات ،،;)
-------------------------------
لو افترضنا أن المعالج ينفذ التعليمه]MOV AX , [1000 :والتى معناها "إنقل محتويات المكان بالذاكره المعنون ب 1000 داخل مقطع البيانات الحالى إلى المسجل AX
يقوم المعالج بحساب العنوان الحقيقى من العنوان 1000 فى التعليمه و عنوان المقطع (راجع جزء العنونه فى دروس الأسمبلى) و يقوم بوضع الناتج فى مسجل العناوين Address Register وهو المسجل المسؤول عن العناوين ، ثم يرسل المعالج إشارة قراءه من الذاكره ، ستقوم دوائر البحث فى الذاكره بالبحث عن هذا العنوان المسجل فى مسجل الذاكره AR و من ثم تحميل ما يحتويه هذا المكان على مسار البيانات Data Bus ، فى نفس الوقت يكون المعالج قد أرسل رسالة كتابه فى المسجل AX ومن ثم تنتقل البيانات التى على مسار الداتا (والتى خرجت من الذاكرة لتوها) إلى المسجل و بهذا تكون التعليمه تم تنفيذها
وبهذه الطريقه يتم نقل البيانات جميعها عبر مكونات الكمبيوتر ، و نلخص هذا فى الخطوات الأتيه :
1 -تحديد عنوان مكان البيانات المستخدمه فى التعليمه الحاليه .
2 - تحديد المكان الذى سيتم إرسال البيانات له و من ثم فتح بن الكتابه به .
3 - تكون البيانات متاحه على مسار البيانات والتى ستنتقل إلى المكون المفتوح لديه بن الكتابه حاليا.
يقوم المعالج بالتحكم فى مسار هذه الإشارات و التحكم بها و موازنة كل خطوه من الخطوات السابقه Syncronization لينتج لك ما تعمل عليه الأن ولكم مني هذا المقال في ملف ;)
والسلام عليكم ورحمة الله وبركاته مع دروس قادمة يومية
AM Pro
12-17-2007, 07:57 AM
السلام عليكم ورحمة الله وبركاته
بداية أشكرك على هذا الموضوع الرائع وأقول حياك الله يا أبو عمار
سدد الله خطاك و بلغك هدفك و تقبل الله منا ومنك
والسلام على من اتبع الهدى
الله يعطيك العافية والله
شكرا على الدرس
دورة الأسمبلي- اليوم الثاني
ماهي الأسمبلي :-
-------------------
في قديم الزمان أيام بدايات الكمبيوتر كانت برمجة الكمبيوتر تتم بواسطة لغة الأله Machine Language اختصاراً ML ( لغة الآله هي اللغه التي تفهمها الآله مباشرة دون الحاجة الى تفسير وهي تخزن بصورة ثنائبة [ تركيبة من الأصفار والواحدات] في الذاكرة على شكل تعليمات ووسائط تأخذ كل واحد منها عادة مقدار 8بت = ا بايت ) وكان هذا النوع من البرمجة صعب جداً عندها طور المبرمجون أول لغة برمجة وهذه اللغه فكرتها بسيطة جداً حيث أنه بدل أن تكتب رموز الآله يتم كتابة كلمات مختصره تدل على نوع العمليه مثال ( MOV , ADD , CMP ) ثم ببرنامج بسيط يتم تحويل هذه الشفرة الى لغة الآله بأستخدام تخطيط واحد-الى-واحد أي أن كل سطر أو عبارة في الأسمبلي تحول الى تعليمة واحدة مقابله في لغة الآله (مثال بدل كتابة 011000000000101 يتم كتابة al , 5 mov) يعرف البرنامج الذي يقوم بعملية التحويل بالأسمبلر Assembler ، علماً بأن هناك عدة أنواع من الأسمبلر كل نوع يختص بتقنية معينة وبعائلة معينه من المعالجات
ونحن هنا بصدد تعلم البرمجة بالأسمبلي للمعالجات المبنية على تقنية IBM-PC والمنتجة من شركة أنتل وهي العائلة 86×80 ويرمز لها أختصاراً X86 وهي تضم :
( 8086 / 8088 / 80186 / 80286 ) لمعالجات ال 16 بت و ( 80386 / 80486 / 80586 = بنتنيوم1 / 80686 = بنتنيوم2 / 80786 = بنتنيوم3 / 80886 = بنتنيوم4 ) لمعالجات ال 32 بت وسوف أتطرق في دروس متقدمة الى المعالج أتنيوم 64 بت المبني بتقنية جديده كلياً لمن يرغب بمعرفة مسبقة لهذا المعالج الجديد كذلك سوف أتطرق بأذن الله الى الكروس أسمبلر وهي مجموعة برامج خاصة مصممه للتحويل من لغة أسمبلي لعائلة معالجات معينة الى عائله أخرى .
تعريف لغة الأسمبلي
الأسمبلي هي لغة برمجة تتكون من سلسلة من التعليمات المتتابعة كل تعليمة فيها تحول الى تعليمة مقابلة بلغة الآله .
تعريف الأسمبلر :-
-----------------
الأسمبلر هو برنامج يقوم بتحويل التعليمات المكتوبة بلأسمبلي الى لغة الآله .
لماذا أريد أستخدام الأسمبلي :-
---------------------------------
بتعلمك لغة الأسمبلي فأنك تكشف النقاب عن الأسرار المختفيه وراء الكمبيوتر وتصبح قادراً على الفهم تماماً كيف يعمل المعالج وكيف يعمل البرنامج وبذلك تزيد خبرتك كمبرمج وبالطبع فأن الأسمبلي أقوى من اللغات العالية المستوى في التعامل مع العتاد وتعطيك مرونة عالية وقدرة وصول الى أشياء لم تكن تستطيع الوصول اليها من قبل ، كذلك هناك نوعيات من البرامج لايمكن الا برمجتها بالأسمبلي مثل الدرايفات(سواقات) الأجهزه ، كذلك فأن الأسمبلي يعطيط برامج سريعة جداً ، وبالطبع فأن بناء برنامج متطور بالأسمبلي أشبه بحفر حفرة بواسطة الملعقه فالبرغم أنك تحفر الا أنك أنتاجيتك قليله ولكن من المحبذ جداً برمجة بعض الدوال و الأحزاء من البرامج بالأسمبلي وبقية البرنامج بواسطة لغة عالية المستوى مثل السي + + .
دورة الأسمبلي- اليوم الثالث
كيان الحاسوب الصلب :
يتألف الحاسوب بشكل أساسي من اللوحة الأم Mother Board والمعالج Microprocessor وذاكرة القرأة-فقط ROM = Read-Only Memory وذاكرة الوصل العشوائي = الرام RAM = Random-Access Memory ووحدة التغذية Power Supply والمنافذ التوسعية Expansion Slots مثل فتحات توصيل الكروت ( كروت الشاشه و الصوت و ما إلى ذلك ) .
المعالج :
---------
يمثل المعالج عقل الحاسوب وهي الوحدة المسؤله عن القيام بأدارة الحاسوب والقيام بالعمليات الرياضية والمنطقية ونحن هنا كما أوضحت ندرس معالجات أنتل من العائلة X86 لأنها العائلة الأشهر والأكثر أستخداماً بين الناس .
وحدة التنفيذ ووحدة ملاءمة الممر Execution Unit And Bus Interface Unit :
-------------------------------------------------------
يتألف المعالج من وحدتين هما وحدة التنفيذ Execution Unit أختصاراً EU ومهمتها تنفيذ التعليمات ،
ووحدة ملاءمة الممر Bus Interface Unit أختصاراً BIU ومهمتها نقل البيانات والمعطيات الى وحدة التنفيذ . تحتوي وحدة التنفيذ على وحدة الحساب والمنطق Arithmetic And Logic Unit أختصاراً ALU ووحدة التحكم Control Unit أختصاراً CU ومجموعة من المسجلات.
تتألف وحدة ملائمة الممر من وحدة التحكم بالممر Bus Control Unit ومسجلات المقاطع Segment Registers ورتل = كيو التعليمات Instruction Queue (الرتل أو الكيو هو نوع من أدارة الذاكرة تكون فيه المعلومة الداخلة أولا خارجة أولاًً FIFO = First In First Out ).
وتقوم وحدة ملاءمة الممر بعمليات التحكم بالممر ونقل المعطيات بين كل من وحدة التنفيذ والذاكرة وأجهزة الأدخال والأخراج الخارجية، كما تقوم مسجلات المقاطع بعملية التحكم في عنونة الذاكرة .
تضع وحدة ملاءمة الممر تضع التعليمات في رتلها المخصص لها في وحدة التنفيذ بعد أن تقوم بجلبها من الذاكرة . يخصص رتل التعليمات لوضع التعليمات فيه بعد جلبها من الذاكرة بواسطة وحدة ملاءمة الممر ، ولذلك يوجد دائماً رتل من التعليمات جاهزه لتنفيذها من قبل وحدة التنفيذ . تعمل وحدة التنفيذ ووحدة ملاءمة الممر على التوازي (في نفس الوقت) ، بينما تحتقظ وحدة ملاءمة الممر بخطوة نحو الأمام، فعندما تقوم وحدة التنفيذ بتنفيذ تعليمة ما ، تعمل وحدة ملاءمة الممر أما على جلب تعليمة من الذاكرة ووضعها في رتل التعليمات لكي تنتظر دورها في التنفيذ ، أو على جلب معطيات من الذاكرة أو أحد أجهزة الأدخال أو الأخراج . وخلافاً للطريقة التسلسلية في المعالجة فأن هذه العملية تحقق حدوث عمليتي الجلب fetching التنفيذ execution في وقت واحد الأمر الذي يزيد بدورة من سرعة المعالج .
ذاكرة القراءة-فقط ROM = Read-Only Memory :
-----------------------------------------
وهي عبارة عن شريحة دائرة متكاملة IC تحوي على ذاكرة فيها بيانات غير قابلة لأعادة الكتابة عليها (أفتراضياً - شرائح ال ROM الحديثة يمكن إعادة الكتابة عليها بطرق مختلفة ) ، تحتوي هذه الذاكرة على برنامج ال BIOS = Basic Input Output System أو نظام الأدخال والأخراج الأساسي، ولايمكن للمعالج القرأة من هذه الذاكرة مباشرة ولكن أول شئ يفعل المعالج عند تشغيله في عملية الأستنهاض هي تحميل البيانات الموجودة في الروم ونقلها في الرام أو بالأحرى الى القسم الأخير من الرام ذا العنوان الأكبر . تتجلى فائدة ال BIOS في القيام بعملية الفحص الذاتي عند الأستنهاض POST = Power On Self Test بالأضافة الى تحميل برنامج محمل نظام التشغيل بالأضافة الى توفير دوال ومقاطعات قياسية في ذاكرة الرام تستطيع أن تستخدمها البرامج للرسم على الشاشة مثلاً أو التعامل مع لوحة المفاتيح أو القرأة والكتابة من والى القرص الصلب .
ذاكرة الوصول العشوائي RAM = Random Access Memory :
--------------------------------------------------
هذه الذاكرة مهمة جداً حيث أن أي برنامج لايمكن أن يعمل الا اذا حمل الى هذه الذاكرة كذلك فهي تستخدم لحفظ المتغيرات وحفظ برامج النظام الأساسية ومنها جدوال المقاطعات والمقاطعات أنفسها والرويتنات الفرعية ...... الخ ولايتم أستخدام القرص الصلب لحفظ مثل هذه المعلومات لأن وقت الوصول فيه أبطأ بكثير من ذاكرة الرام (ولو أن القرص الصلب يستخدم في توفير ذاكرة أفتراضية عن طريق القيام بعمليات مبادلة للصفحات مع ذاكرة الرام) ، وبالطبع فأن هذه الذاكرة يمكن الكتابة اليها أو القرأة منها عن طريق عنونتها .
فبأستخدام العنوان يمكننا أن نصل الى مكان محدد في الذاكرة لنعمل عليه كل عمليات التحرير المطلوبة .
المقدمه السابقه ستعتقد أنها كلام نظرى وغير مفيد و لكن لتعلم أخى أنه هو أساس لغة الأسمبلى بل أساس الحاسب ككل ولو أنك أردت أن تفهم حقيقة التعامل داخل الكمبيوتر وحلقة الوصل بين البرامج والأنظمه التى نعمل عليها من جهه و العتاد من جهه أخرى فعليك الإنتباه له و التأكد التام من أنك إستوعبته جيدا وفهمت كل حرف به ،
---------------------------------------------------------------
تمثيل الأعداد و الحروف:
----------------------
قد تتسائل ما علاقة تمثيل البيانات والعد الثنائي بالأسمبلي ؟ حسناً كما وضحت من قبل فأن الأسمبلي هي لغة قريبة جداً من لغة الآله وهي لغه منخفضة المستوى تتعامل مع العتاد والمعالح بصورة مباشرة ولكي نحقق فهماً أوسع لهذه اللغه يجب أن نفهم بعض الأشياء المهمة جداً في بنية المعالج .
العد الثنائي :
--------------
يتم تمثيل الشفرات والبيانات في ذاكرة الكمبيوتر كتواليف من الشحنات الكهربائية تأخذ قيمتين الأولى وهي وجود الشحنة ويرمز لها ب ON أو صحيح TRUE أو '1' والأخرى وهي غياب الشحنه ويركز لها ب OFF أو خطأ FALSE أو '0' ، ووجود الشحنة يكون عادة بين 4.5 الى 5.5 فولت ( المعالجات الحديثه بين 2.5 الى 3.5 فولت ) وغياب الشحنة يكون بين + 0.5 فولت و -0.5فولت .
وحدات الذاكره الأساسيه في الذاكره والوحدات التي سنتعامل معها كثيراً هي :
-----------------------------------------------------------
1 بت = بت و هو إما يساوى 0 أو 1 (وجود شحنه أو عدم وجود شحنه ) ( عدد 2 إحتمال ) Bit
8 بت = 1 بايت (عدد 256 إحتمال أى ما يعادل 2 أس 8 ) Byte
16 بت = 2 بايت(عدد 65536 إحتمال أى ما يعادل 2 أس 16 ) Word
32 بت = 4 بايت(عدد 4294967296 إحتمال أى ما يعادل 2 أس 32 = 4 جيجا إحتمال ) DWord = DoubleWord
64 بت = 8 بايت ( عدد 2 أس 64 إحتمال = 16 جيجاجيجا إحتمال )
وحدات أكبر و تختص بقياس البيانات فى مختلف أجزاء الكمبيوتر :
-----------------------------------------------------------
1024 بايت KB الكيلوبايت =
1024 كيلوبايت MB الميجابايت =
1024 ميجابايت GB الجيجابايت =
1024 جيجابايت TB التيرابايت =
1024 تيرابايت PB البيتابايت =
1024 بيتابايت EB الأكسابايت =
1024 أكسابايت ZB الزيتابايت =
1024 يوتابايت YB اليوتابايت =
الأسكي كود ASCII:
----------------
يتم في الحاسوب وبقية توحيد أستخدام الرموز أستخدام شفرة الآسكي كود (حالياً يعمل على تبني شفرة unicodeال
وهي تسمح بتعدد اللغات في مستند واحد حيث يتم تمثيل كل حرف بأستخدام كلمة واحده = 2بايت)
ASCII كلمة
American National Standard Code For Information Interchange هي اختصار ل: :ويتم أستخدام هذا الكود الموحد لتسهيل تناقل البيانات ويمثل كل رمز فيه بعدد ثنائي بطول 1بايت = 8بت = 256أحتمال .
مما يعنى أن أى حرف نكتبه أو نراه على الشاشه يكون له مقابل رقمى يسمى الأسكر كود الخاص به و سنستخدم هذا الموضوع كثيرا كثيرا جدا ، لذلك يجب عليك أخذ نظره على جدول الأسكى التالى :
الجدول الكامل للأسكى كود من الرقم 0 إلى128
وجدول الأسكى الموسع من رقم 128 إلى 255
طريقة كتابة الأرقام في الأسمبلر :
-------------------------------
لكتابة عدد ثنائي يوضع في آخر الرمز ( b ) لدلالة على أنه باينري مثال : Binary = 11010010B أما العدد العشري فلايحتاج الى أضافة وأما العدد لأساس 8 فيكتب مع المرمز (Q) في نهايته Octal = 1276Q أو الرمز (O) في نهايته Octal = 1276O أما العدد السداسي عشر فيكتب بوضع H في نهايته hexadecimal = 0AB9CDH مع مراعاة وضع 0 اذا كان العدد يبدأ بحرف كما المثال .
يجب أن تعرف الفرق بين تخزين الرقم كرقم أو تخزينه كنص فتخزين الرقم 201 مثلاً كرقم سسيأخذ بايت واحد وهو جاهز للقيام بعمليات رياضية ومنطقيه عليه أما تخزينه كنص فسيأخذ ثلاثة بايت في البايت الأول سيخزن الرقم الخاص بالأسكي كود للرمز ' 2 ' وكما قلت يخزن كرقم يدل على الرمز أما البايت الثاني فسيخزن رقم الآسكي كود للرمز ' 0 ' أما البايت الثالث فيأخذ القيمه الخاصة بالرمز ' 1 ' في الآسكي كود أي أن الرقم خزن بطريقة "102" وليس 102 وهذه الطريقة ليست جاهز للجمع أو الطرح ولكنها ممتاز للطباعه على الشاشه ويمكن تحويل النص الى رقم والعكس .
الأعداد ذي الأشاره :
------------------
يتم تخزين الأعداد ذي الأشاره كالتالي :
------------------------------------
العدد موجب أذا كانت البت الأخيره صفر وقيمة الرقم هي باقي البتات أي لو أخذنا رقماً من بايت واحد فأن البت رقم 7 (الثامنه - الترقيم يبدأ من الصفر ) يجب أن تكون صفراً ليكون العدد موجب أما البتات من 0 الى 6 ( السبعه الأولى ) فتشكل قيمة الرقم
أما أذا كان العدد سالب فأن البت الأخيرة تساوي واحد أما قيمة الرقم فتساوي سالب المكمل الثنائي للعدد أي لو أخذنا رقم مخزن في واحد بايت مثال = 11110110 بما أن البت السابعه = 1 فأن الرقم سالب / نأخذ الآن المكمل الثنائي للعدد وهو 00001010 / القيمة تساوي -00001010 أي سالب عشرة .
ملاحظات مهمه :-
---------------------
1 - البايت فى نظام التمثيل العددى بدون إشاره ( على إعتبار أن العدد موجب ) نطاقه من 0 إلى 255 .
2 - البايت فى نظام التمثيل العددى بالإشاره ( البت الأخير للإشاره) نطاقه من -128 إلى + 127 .
3 - عند تعريف متغير من النوع Integer فى السى أو البيسيك فإنه يحجز للرقم 2 بايت .
دورة الأسمبلي- اليوم الرابع
سأسرد كيفية التعامل العامه مع الهاردوير عاماً :
----------------------------------------------
البيانات المخزنه أو التى يتعامل معها أى جزء من أجزاء الهارد وير تنقسم إلى قسمين :-
1 - البيانات (أرقام ، حروف ، .... كل هذا مخزن بالأسكى كود) .
2 - أوامر (وهى أيضا أصفار ووحايد مخزنه بطريقة ما يتم عمل تنفيذ لها على البيانات السابقه Decoding .
مثلا عند تشغيل برنامج ما يطبع كلمة "Hello" على شاشة الكمبيوتر عند الضغط على حرف ' P ' ، فإننا هنا نتعامل مع :-
1 - البروسسور : هو وهو المعالج الذى يقوم بتنفيذ كل تعليمه و التوصيل ما بين كل جوانب التعليمه الواحده.
2 - الرامات : ونتعامل معها هنا على اساس عنوان كلمة "Hello" ، فمثلا نقول أن هه الكلمه مخزنه فى العنوان 1000H وهذا يعنى عند عد 1000 أماكن بالنظام السداسى عشر (أى 4096 بالنظام العشرى العادى ) ، فإن أحرف الكلمه ستجدها مخزنه من عند هذا المكان ، ويتم أخذ حرف حرف إلى أن يصل إلى حرف معين و هو الذى ينهى عملية الطباعه و هو ' $ ' . فعندما يجد هذا الحرف يقوم بإنهاء عملية الطباعه و كما نرى أن هذه طريقة التعامل مع النصوص عند كتابتها أو طباعتها على الشاشه عاماً.
3 - الشاشه : يكون هناك مخزن على كارت الشاشه أو الذاكره الخاصه بالشاشه على الرامات ، يتم وضع حرف حرف بها و يتم إعطاء أمر الطباعه وهو يكون كتابة سلسلة من الأصفار و الوحايد الخاصه و التى تعنى بالنسبه لنظام التعامل مع الشاشه بأن إطبع هذا الحرف ، طيب أين نطبع هذا الحرف ، يوجد مخزن Buffer للإحداثى السينى و آخر للإحداثى الصادى ، فعند طباعة حرف على الشاشه فيتم ذيادة الإحداثى السينى بواحد (على اساس أن عرض كل حرف 1 وحده) و عند الوصول إلى آخر السطر (تخطى عدد معين من الأحرف وهو طول الشاشه) فإن النظام نفسه يتم ذيادة الإحداثى الصادى بواحد و تصفير الإحداثى السينى للبدأ من أول السطر وهكذا .
4 - الكيبورد : يجب وجود نظام ايضا يسمع إلى الحروف أو الأزرار التى يتم ضغطها على الكيبورد (فى الحقيقه : عند الضغط على أى زر على الكيبورد فإن الأسكى المقابل له يسرى عبر الأسلاك إلى وحة التعامل مع الكيبورد على اللوحه الأم و من ثم يخزن على ال Buffers التى توجد هناك ) . بعد سماع كل حرف من هذه المخازن Buffers فإننا نختبر الأسكى لهذا الحرف فلو أنه يقابل قيمة 80 ( المقابل لحرف ' P ' فى جدول الأسكى كود ) فنقوم بتشغيل دالة الطباعه من المكان 1000 فى الذاكره ،
هذا مثال بسيط لما يتم فعليا داخل الحاسب عند تشغيل هذا البرنامج البسيط ، تخيلوا ما يحدث عند تشغيل البرامج المعقده الكبيره ، فعلا كان يجب تطوير اللغات فوق بعضها ، كل تعليمه فى لغه عالية المستوى تقابلها مجموعة تعليمات فى اللغات الأقل مستوى و هكذا ، فقط تتميز لغة السمبلى بأن كل تعليمه تقابل تعليمه فى لغة الأله بالظبط .
------------------------------------------------------------------------------------------------------------------------------
توجد وحدات تخزين داخل البروسسور يتم التعامل معها مباشرا فى كل التعاملات داخل الحاسب وهو تماثل ال Buffers فى أى جزء آخر من الهاردوير و تسمى مسجلات Registers ويقوم تركيبها من لبوابات المنطقيه عالية السرعه High Speed Logic Gates ، وهى أهم أهم أجزاء البروسسور التى يتم التعامل معها فى نظام السوفتوير كله (التعامل مع هذا المسجلات مباشرا من خلال لغة الأله ومن ثم لغة الأسنبلى ) .
نقول أن البروسسور يدعم 32 بت ... هذا يعنى أن طول المسجلات الرئيسيه = 32 بت .
مثلا البرسسور ال 8088 كان معالج 8 بت ... وهذا يعنى أن طول المسجلات فيه = 8 بت .
الجزء التالى يتحدث على المسجلات بالتفصيل فإنتبه إليه :
-----------------------------------------------------
المسجلات REGISTERS :
الكمبيزتر يحتاج في تعاملاته الى ذاكرة سريعة جداً ومتصلة بالمعالج مباشرة حتى يمكن له أن يخزن فيها المعلومات المطلوبة لعملية حسابية معينة أو عداد لحلقة معينة ،هذه الذاكرة تعرف بالمسجلات REGISTERS وهي ذاكرة سريعة جداً تفيد المعالج في أجراء العمليات بسرعه وكفاءة أكبر
هناك خمسة أنواع أو تصنيفات للمسجلات ( تختلف هذه التصنيفات قليلاً من مرجع لآخر ) وهي مسجلات الأغراض العامة General-Purpose Registers ( تعرف في بعض المراجع بمسجلات المعطيات Data Registers ) و هناك مسجلات الأقسام Segment Registers والمسجلات الدليلية Index Registers ومسجلات التأشير Pointer Registers بالأضافة الى مسجلات الحالة والتحكم Status and Control Registers.
[1] مسجلات الأغراض العامة General-Purpose Registers :
---------------------------------------------------
وهي عبارة عن كل من المسجلات AX و BX و CX و DX ،طول كل منها 16بت أي كلمة أي 2بايت البايت اليساري فيهما يعرف بالعلوي (High) أما البايت الأيمن فيهما فيعرف بالمنخفض(Low) فمثلاً المسجل AX يتألف من مسجلين العلوي وهو AH والمنخفض وهو AL ، أن تعديل المسجل الجزئي سوف يؤثر في المسجل الأم لأنه جزء منها وأيضاً التعديل في المسجل الأم سوف يؤثر في المسجل الجزء ، تم توسيع المسجلات في معالجات ال32 بت مع بقاء المسجلات نفسها ولكن كل منها أصبح جزء من مسجل موسع بطول 32بت وهي EAX , EBX , ECX , EDX ، أي أن المسجل EAX هو بطول 32بت وكجزء منه هناك المسجل AX بطول 16بت والذي يتألف هو الآخر من مسجلين هما AL و AH بطول 8بت لكل منهما.
المسجل AX (مسجل المركم- Accumulator Register) :
-----------------------------------------------
هذا المسجل كان من أهم المسجلات في معالجات ال 8بت القديمة جداً حيث كانت كل العمليات الرياضية والمنطقيه تجري من خلاله ولذلك كان يسمى بمسجل المركم لتراكم النواتج فيه لكن معالجات ال16 بت وسعت المرونة وجعلت كل مسجلات الأغراض العامة تستطيع أن تجرى من خلالها العمليات الرياضيه والمنطقية الا أن المسجل AX مازال المفضل لأجراءها حيث أن أستخدام المسجل AX أو أحد أجزاءه يؤدي مع بعض التعليمات الى توليد شفره أقل أختصاراً (الفرق بايت واحد فقط لكل تعليمية) ، يمكن استخدام المسجل AX كمسجلين هما AL و AH حيث تعرف ال 8بتات الأولى التي في اليسار بالمسجل AL وال8بتات الأخيره التي في اليمين بالمسجل AH ، أما بالنسبة ل EAX وهو المسجل الموسع ل AX فهو بطول 32بت ويعتبر المسجل AX كجزء منه.
المسجل BX (مسجل القاعدة-Base Register) :
----------------------------------------
هو المسجل الوحيد من بين مسجلات الأغراض العامة الذي يمكن أستخدامه كدليل(INDEX) ، يمكن أستخدام هذا المسجل للعمليات الرياضية والمنطقية وكما المسجلات الأخرى ينقسم هذا المسجل الى قسمين بطول 8 بت هما BL و BH وهو ضمن مسجل أوسع هو EBX بطول 32بت.
المسجل CX (مسجل العداد-Counter Register) :
------------------------------------------
يستخد عادة كعداد ويستخدم هذا المسجل بشكل خاص مع تعليمة التكرار LOOP حيث يعمل كعداد لها وبالطبع يمكن استخدامة في العمليات الرياضية والمنطقيه ، وكما المسجلات الأخرى ينقسم هذا المسجل الى قسمين بطول 8 بت هما CL و CH وهو ضمن مسجل أوسع هو ECX بطول 32بت.
المسجل DX (مسجل المعطيات-Data Register) :
-----------------------------------------
يفضل أستخدام هذا المسجل لتخزين المعطيات في عمليات الدخل والخرج والمقاطعات وبالطبع فأنه يمكن أستخدامه كباقي المسجلات في العمليات الرياضية والمنطقية وكما المسجلات الأخرى ينقسم هذا المسجل الى قسمين بطول 8 بت هما DL و DH وهو ضمن مسجل أوسع هو EDX بطول 32بت.
[2]مسجلات الأقسام Segment Registers :
-----------------------------------
كانت العنونة الحقيقية في معالجات ال16بت تتم بأستخدام خطوط عرض 20بت وهي تكفي لعنونة 1ميجابايت من الرام فقط ولصعوبة التأشير للرام بأستخدام مسجلات من 16بت نشأت فكرة الأقسام والعنونة المنطقية وقد قسمت الرام لمقاطع كل منها بطول 64كيلوبايت(الحد الأقصى الذي يمكن عونته ب 16بت) وهذه الأقسام لايبدأ كل واحد فيها بعد الآخر وأنما هي متداخلة حيث يبدأ كل 16بت قسم جديد وللتأشير على موقع ما يلزمنا عنوان المقطع والذي بطول 16بت بالأضافة الى قيمة الأزاحة من بداية هذا المقطع وهي بطول 16بت أيضاً لذلك لجأ مصمموا المعالح على وضع مسجلات خاصة بالأقسام الشائعة في البرنامج وهي قسم الشفرة Code Segment وقسم البيانات Data segment وقسم المكدسه Stack Segment وقسم المقطع الأضافي Extra Segment وبالرغم أنه في معالجات ال32بت يمكن العنونة بأستخدام 32بت ذاكره حقيقية أي مايساوي 4جيجابايت من الرام الا أن طريقة الأقسام مازالت موجودة حتى يتم خزن عنواين كثيرة بأستخدام 2بايت بدل 4بايت داخل المقطع الواحد مع وجود عنوان مقطع واحد فقط مخزن قي المسجل المناسب .(ملاحظة : تم في معالحات ال32بت أضافة مسجلين أقسام جديدين بطول 16 بت أضافة الى مسجلات الأقسام السابقة والمسجلين هما FS و GS هذان القسمان يمكن أستخدمهما كما المسجل ES كمسجل قسم بيانات أضافي )
قسم الشفرة Code Segment -CS:
----------------------------
يحمل هذا المسجل عنوان بداية القسم الخاص بالشفرة في البرنامج .
قسم البيانات Data Segment -DS :
-------------------------------
يحمل هذا المسجل عنوان بداية قسم البيانات في البرنامج .
قسم المكدسة Stack Segment -CS :
-------------------------------
يحمل هذا المسجل عنوان بداية قسم المكدسه في البرنامج .
قسم الأضافي Extra Segment -ES :
------------------------------
يحمل هذا المسجل عنوان بداية قسم أضافي يمكن أن يستعمل هذا القسم الأضافي كقسم بيانات آخر.
[3]مسجلات التأشير Pointer Registers :
------------------------------------
تحتوي مسجلات التأشير وهي بطول 16بت على عنوان من 16 بت وهي تستخدم بشكل خاص مع العمليات الخاصة بالمكدسه وعادة تشكل العنواين التي بها الأزاحة بالنسبة لمسجل قسم المكدسة SS ومسجلات التأشير هي مسجلان مسجل مؤشر القاعدة Base Pointer BP و مسجل مؤشر المكدسه Stack Pointer SP .
مسجل مؤشر القاعدة Base Pointer -BP :
------------------------------------
يعمل هذا المسجل على تسهيل الوصول الى الوسيطات(البارمترات) والتي تحتوي على عنواين ومعطيات والتي دفعت PUSH بشكل مؤقت الى المكدسه عند أستدعاء روتيمات فرعية من البرامج مع وسيطات ممرة ، وسع هذا المسجل في معالجات ال32بت وأصبح جزء من مسجل أوسع بطول 32بت هو EBP.
مسجل مؤشر المكدسه Stack Pointer -SP :
-------------------------------------
يحتوي المسجل SP على كلمة الذاكرة الحاليه التي ستعالج في المكدس ، وسع هذا المسجل في معالجات ال32بت ليصبح جزء من مسجل أوسع بطول 32بت هو ESP . هذا المسجل يعدل آلياً بواسطة المعالج مع عملية دفع PUSH أو سحب POP في المكدس ليشير دوماً الى قمة المكدس .
[4]المسجلات الدليلية Index Registers :
-------------------------------------
هي مسجلات بطول 16بت تستخدم في عنونة بيتات مقطع البيانات وكذلك في عمليات التأشير الى السلاسل النصية Strings ، وهناك مسجلات دليليان هما SI و DI وعادة مايستخدمان معاً دائماً بغيه تنفيذ عملية ما .
المسجل الدليلي المصدري Source Index -SI :
-----------------------------------------
يستخدم هذا المسجل في التأشير على النص المصدر وذلك لأجراء العمليات التي تتعامل مع نصوص وكذلك يستخدم في في عنونة بيتات مقطع البيانات ،وسع هذا المسجل في معالجات ال32بت ليصبح جزء من مسجل أوسع بطول 32بت هو ESI .
المسجل الدليلي الهدفي Destination Index -DI :
---------------------------------------------
يستخدم هذا المسجل في التأشير على النص الهدف وذلك لأجراء العمليات التي تتعامل مع نصوص وكذلك يستخدم في في عنونة بيتات مقطع البيانات ،وسع هذا المسجل في معالجات ال32بت ليصبح جزء من مسجل أوسع بطول 32بت هو EDI .
[5]مسجلات الحالة والتحكم Status and Control Registers :
------------------------------------------------------
تتكون هذه المسجلات من مسجلين كل بطول 16بت هما مسجل الأعلام Flags Register ومسجل مؤشر التعليمية Instruction Pointer - IP .
مسجل مؤشر التعليمية Instruction Pointer - IP :
----------------------------------------------
يحتوي المسجل IP على أزاحة التعليمية التالية التي ستنفذ ، أي أن المسجل عبارة عن مؤشر الى التعليمية التالية الموجودة في مقطع الشفرة CS-Code Segment المنفذ حالياً ،وسع هذا المسجل في معالجات ال32بت ليصبح جزء من مسجل أوسع بطول 32بت هو EIP.
وما تعليمات القفز والتكرار الى تعديل للمسجل IP .
مسجل الأعلام Flags Register :
---------------------------
وهو مسجل بطول 16بت يحتوي على أعلام طول كل منها 1بت فقط وتستخدم لتعكس حالة آخر عملية أو للتحكم بعمليات معينه وكل علم له موقع معين في ال 16 بت علماً بأن 9 فقط منها محجوزة والباقي غير معرفة وليس عليك حفظ مواقع هذه الأعلام لأنك سستعامل معها بالرمز الذي يرمز لها وكل علم له رمز مكون من حرف واحد فقط يدل عليه ويتبعه أحياناً الحرف F أختصار FLAG للتوضيح أنه علم ، كل علم أما يكون واحد أي SET أو صفر أي CLEAR .
مخطط 4_3 : هذا المخطط يوضح مسجل الأعلام الذي طولة ال 16بت
وهناك نوعين من الأعلام هي أعلام الحالة Status Flags وأعلام التحكم Control Flags .
#أعلام التحكم Control Flags :
----------------------------
وهي أعلام مخصصة لضبط قيمتها من قبل المبرمج أو العتاد ويتم ضبطها عند القيام بالمقاطعات أو أستدعاء البرامج الفرعية أو بعض الأوامر بهدف التحكم بشئ ما وهذه الأعلام هي :
1. علم الأتجاه (DF = direction flag) :
-----------------------------------
يؤثر في التعليمات التي تقوم بنقل البيانات مثل MOVS , CMPS , SCAS. عندما يكون العلم 1 = UP يأخذ الأنتقال أتجاه الطبيعي أما عندما يكون 0 = DOWN يأخذ أنتقال البيانات أتجاه معاكساً ( قيمة العلم DF عند بداية البرنامج = 1). لضبط العلم بواحد نستخدم التعليمة std ولضبطه بصفر cld .
2. علم المقاطعه (if = intrreupt flag) :
-------------------------------------
يحدد هذا العلم اذا ماكان بمقدور النظام أجراء مقاطعات أو لا ، ويضبط هذا العلم بواسطة أجهزة الهاردوير وكذلك وقت النظام ، تستطيع أنت ضبطه أو تصفيره اذا كنت تريد حدوث مقاطعات خارجية أو لا ، اذا كانت قيمة العلم = 1 فهذا يعني مفعل enable ويمكن أجراء المقاطعات أما اذا كان صفر فأنه غير-مفعل disabled ولايمكن أجراء المقاطعات ( قيمة العلم IF عند بداية البرنامج = 1). لضبط العلم بواحد نستخدم sti ضبطه بصفر CLI .
3. علم المصيدة (tf = trap flag) :
-------------------------------
يتيح هذا العلم وضع المعالج في نمط الخطوة الواحدة في الوقت الوحد (single step mode) مما يسمح لبرامج فحص الأخطاء كالديبغر بتتبع البرنامج ، اذا كانت قيمة العلم واحد = ON فأن النمط يعمل أما اذا كان صفر = off فأن النمط لايعمل ( قيمة العلم TF عند بداية البرنامج = 0) .
#أعلام الحالة Status Flags :
---------------------------
هذه الأعلام تضبط آلياً بعد كل عملية رياضية أو منطقية وهي تعكس هذه العملية ، ويمكن بعد العملية التحقق من قيم هذه الأعلام لتنفيذ عمليات مثل الشروط والحلقات وهذه الأعلام هي :
1. علم الحمل (cf = carry flag) :
------------------------------
يضبط هذا العلم = 1 اذا كان نتيجة آخر عملية كبيرة جداً على الهدف أو المقصد (في الأعداد التي بدون أشارة فقط ) ، مثال هذا البرنامج :
mov ah , 200
add ah , 100
بما أن المسجل AH هو 8بت فأن أقصى قيمة يتحملها هي 256 وبما أن القيمة في المسجل هي 200 ثم أضفنا لها 100 فأن الجواب أكبر من الهدف (aH هنا) لذلك العلم CF سوف يضبط = 1 بعد عملية الجمع
لضبط لعلم برمجياً stc ولتصفيره clc
2. علم الفيض (OF = overflow flag) :
---------------------------------
هو نفس علم الحمل لكن مع العمليات ذي الأشارة أي أنه يضبط اذا كان ناتج آخر عملية أكبر أو أصغر من حدود الهدف ، مثال :
mov ah , -100
add ah , -50
بما أن أصغر قيمة يتحملها المسجل AH هي -128 لكن ناتج العملية -150 فأن علم الفيض يضبط = 1
3. علم الأشارة (sf = sign flag) :
------------------------------
يضبط هذا العلم اذا كان ناتج آخر عملية رياضية أو منطقية سالب ويصفر اذا موجب (في الواقع أن العلم نسخة من البت الأخيرة للجواب( بت الأشارة) - كما ذكرنا سابقاً فأن العدد سالب اذا البت الأخيرة 1 وموجب اذا صفر ) .
4. علم الصفر(zf = zero flag) :
----------------------------
يضبط هذا العلم = 1 اذا كانت نتيجة آخر عملية رياضية أو منطقية تساوي صفر .
5. علم الحمل المساعد(af = auxiliary carry flag) :
-----------------------------------------------
يضبط العلم = 1 اذا تسببت آخر عملية رياضية أو منطقية حمل من البت الثالثة الى البت الرابعة أو أستلاف من البت الرابعه الى البت الثالثه . هذا العلم لاتوجد له فائدة واضحةوهو قليل الأستخدام برمجياً .
6. علم الأزدواجية - التحقق (pf = parity flag) :
--------------------------------------------
ببساطة يضبط = 1 هذا العلم اذا كان عدد الوحايد في ناتج آخر عملية رياضية أو منطقية زوجياً وبصفر اذا كان فردياً ، مثال لو كان جواب آخر عملية = 00100010 فأن العلم سوف يضبط = 1 لأن عدد البتات التي تحتوي وحايد = 2 وهو عدد زوجي أما اذا كان الجواب مثلاً = 11100000 فأن العلم يصفر لأن عدد البتات التي تحوي وحايد = 3 وهو عدد فردي . وكما علم الحمل المساعد AF فأن أستعمالة قليل برمجياً ويستخدم عادة من قبل نظام التشغيل لأدارة الذاكرة وكذلك برامج الأتصال لتحقق من سلامة البيانات المرسلة .
لاحط أن كل من الأعلام [علم المصيدة (tf = trap flag)/علم الفيض (OF = overflow flag)/علم الأشارة (sf = sign flag)/علم الصفر(zf = zero flag)/علم الحمل المساعد(af = auxiliary carry flag)/علم الأزدواجية - التحقق (pf = parity flag)] لايوجد لهم تعليمات مباشرة لضبطهم أو تصفيرهم وتحتاج أن تستخدم طريق فيها أنحناءة بسيطة لتعديل قيم هذه الأعلام سوف يتم شرحها في دروس قادمة علماً بأن البرامج العادية لن تحتاج لتعديل قيم هذه الأعلام وكل ماستحتاجه هو قرآة القيم التي بها .
إلى هنا ينتهى الدرس الثالث ، ونبدأ من الدرس الرابع إن شاء الله تعليمات لغة الأسمبلى ( البدايه الفعليه ) ، نشكركم لحسن إستماعكم معنا ، رجاء الإهتمام التام بهذه الدروس الثلاثه السابقه لأهميتها الشديده .
دورة الأسمبلي- اليوم الخامس
اليوم سنفتح باب اللغه إن شاء الله و ندخلها و لكن بخطوات قليله جدا ، هيا جهزوا أنفسكم و الباب يحتاج مفتاح .!!
سنتناول الأتى فى هذا الدرس :-
---------------------------------
1 - نظم العنونه Addressing Modes
2 - تعليمات الأسمبلى Assemply Instructions
1 - نظم العنونه Addressing Modes :-
-------------------------------------------------
قلنا أننا نتعامل مباشرا مع الذاكره و أماكنها المختلفه فيجب أن نتعرف على ما هى نظم عنونة الذاكره و التى تمكن لنا وصولا مضمونا إلى القيم الأخيره (المستهدفه) Operands ،
معلومات عامه :-
-------------------
1 - الذاكره تكون مقسمه تخيليا (عن طريق نظام التشغيل و البروسسور) إلى أجزاء تسمى مقاطع (Segments) . هذه المقاطع تعمل كأقسام بيانات وهى أجزاء محددة الطول ب 64 كيلو بايت ، كل مقطع له رقمه ( عنوانه ) و يمكن الوصول إلى مقطع محدد عن طريق مسجلات المقاطع التى تم ذكرها فى الدرس السابق ، عند أى إستخدام للذاكره ، يجب تحديد المقطع أولا عن طريق Data Segment أو أى مسجل مقاطع آخر ومن ثم تحديد أى مكان داخل هذا المقطع عن طريق مسجل يحمل العنوان المراد وهو بالطبع من 0 إلى 65535 ومن هنا يتم تحديد مكان البيانات بالظبط ،
ممكن أن تتخيلها بطريقه أخر : تخيل أن مدينه معينه وأريد الوصول إلى شخص ما فيها أو منزل بها ، المدينه مقسمه إلى شوارع ، كل شارع برقم معين بالترتيب و داخل كل شارع توجد منازل بأرقام مرتبه أيضا من 1 إلى 100 منزل ، كنت أريد الوصول إلى المنزل 45 فى الشارع ال 20 . عندها سأحاول البحث عن الشارع أولا ومن ثم البحث داخله عن المنزل ، نفس طريقة العمل بالظبط يتم التعامل بها فى إستخدام الذاكره و تخزين و إخراج البيانات منها .
2 - عند تشغيل أى برنامج ، فإن نظام التشغيل يقوم بتحميل البرنامج فى الذاكره ..أين و كم مقطع سيترك للبرنامج ؟؟
فى الحقيقه ، كل برنامج يتم تشغيله على الأقل يأخذ 2 مقطع ، مقطع للشفره Code Segment يتم وضع عنوان هذا المقطع داخل CS مادام البرنامج يتم العمل داخله ، والمقطع الآخر يوضع به البيانات لذلك سمى ب Data Segment ويوضع عنوان هذا المقطع فى DS ،
كل برنامج يكون مكتوب به عدد المقاطع التى يحتاجها أولا ، هذا لخدمة البرامج الكبيرة و التى تكون حجمها أكبر من وضعها فى مقطع واحد ، يتم فعليا تحديد حجم البرنامج فى أوله عن طريق تحديد نوعه ما بين صغير ، كبير ، متوسط ، كبير جدا .
أنواع العنونه :-
-----------------
1 - عنونه فعليه (حقيقيه) Phsical Addressing :-
-------------------------------------------------------------
وهى العنونه الحقيقيه التى يتم التعامل بها بين داخل الذاكره ، بمعنى لو أن الذاكره 128 ميجا ، فإنها ستكون مرتبه ترتيبا تصاعديا من المكان صفر إلى المكان 128 ميجا ،
نظام الهارد وير الفعلى على شريحة الذاكره يعمل بهذا النوع ( طبيعياً) .
مثال بالنظام السادس عشر ، على أساس الذاكره مثلا 1 ميجا ، فإنها بها مليون مكان يتم تحديدهم Decoding ب عشرين مكان ثنائى AF67B .
2 - عنونه تخيليه Logical Addressing :-
----------------------------------------------------
وهو النوع الذى تكلمت عنه بأعلى ، الذاكره مقسمه إلى أقسام Segments و كل قسم به محتوياته من المكان Offset صفر إلى المكان 64 كيلو ، وهذا النظام يتم التعامل به من جانب البروسسور مع نظام التشغيل و البرامج الأخرى و من ثم يكون المعالج مسؤلأ على تحويل هذا العنوان إلى العنوان الفعلى عن طريق عمليه حسابيه بسيطه وهى عن طريق
[أضرب عنوان المقطع فى 10 و من ثم أضيف عليه ال Offset = العنوان الفعلى ]
مثال : [A100 : 9C00] المكان الأول هو عنوان المقطع و الثانى هو ال Offset داخل هذا المقطع ، يتم التعامل بهذا النظام فعليا فى الأسمبلى و بهذه الطريقه بالضبط .
أنظمة عنونة وسائط التخزين المختلفه والوصول إلى القيم المستهدفه Operand (مسجلات و ذاكره و ... ) :-
---------------------------------------------------------------
-1Impiled Mode:
----------------------------
وهو لا يتم ذكر به العنوان و تكون التعليمه مفهومه للبروسسور بدون أى براميتارات إضافيه ،
مثال : HLT هذه التعليمه سنتعرض لها فى جزء التعليمات .
-2 Immediate Mode :-
--------------------------------
ويتم ذكر العنوان صراحاً به ،
مثال : ADD AX , 1000B وهذه التعليمه ذكر بها القيمه صراحاً التى سيتم التعامل بها .
-3 Register mode :-
------------------------------
فى هذا النظام تكون القيمه المراد التعامل معها فى مسجل Register ما ، لذلك يتم ذكر إسم المسجل بجانب التعليمه .
مثال : MOV AX , BX وهنا سيتم التعامل مع المسجلان المذكوران .
-4Direct memory mode :-
-----------------------------------------
وهنا يتم ذكر العنوان فى الذاكره الذى يحتوى القيمه المستهدفه .] حيث أننا نكتب العنوان الذى يوجد به القيمه المستهدفه داخل التعليمه كما هو موضح . مثال :
ADD AX , [1000:200A]
-5 Indirect memory mode :-
-------------------------------------------
وهنا يكون عنوان القيمه فى الذاكره موجود بداخل مسجل و فيها يأخذ المعالج القيمه التى فى المسجل و تكون هى عنوان الذاكره الذى يحتوى على القيمه . مثال :
add BX , [SI]
BX , SI , BP , DI ملاحظه : المسجلات التى من الممكن إستخدامها فى هذا النظام 4 وهي:
-1 تعليمات الأسمبلى Assemply Instructions :-
-------------------------------------------------
تتكون التعليمه الواحدة في الأسمبلي من تمثيل بسيط بالأحرف الأنجليزيه يقابله بالأرقام تعليمة لغة آله ، تتكون كل تعليمة من ممايلي : أولاُ جزء الأمر وهو أمر يدل على نوع العملية المطلوبة مثل ADD (للجمع) ، الجزء الثاني هو الوسائط علماً بأن بعض التعليمات لايأخذ وسائط والجزء الآخر وسيطة واحدة فقط والبعض الآخر أكثر من ذلك ، تحدد هذه الوسائط الشئ الذي سيعمل عليه الأمر ،
فالأمر ADD لوحده عقيم لايدل على شئ لكن الأمر ADD AX , 5 يدل على جمع الرقم 5 مع القيمة الموجودة في المسجل AX ويوضح المثال التالي بعض الأوامر
CODE
clc ; فقط أمر بدون وسائط
dec ax ; وسيطة واحدة فقط
mov cx , dx ; وسيطتين
لاحظ أن أي نص في شفرة الأسمبلي يأتي بعد الفاصلة المنقوطة هو مجرد تعليق
الوسائط ممكن تكون عدة أنواع :-
-----------------------------------
1. بيانات فورية (مباشرة) (أي ثابته) مثال : 10 / 30 / ' a '
2. مسجل مثال : AX / EAX / BL
3. موقع ذاكره (يتم تحديده عن طريق العنوان) مثال : [200] / [bx] / [100]
4.متغير (وهو نفس السابق لكن بدل أن تحفظ أو تحسب العنوان يدوياً يقوم الأسمبلر بأستبدال المتغير برقم يدل على عنوانه ) مثال : count / VAR1 / INTVAL / STR1
:Debugge مدخل الى
------------------------------------
ها قد وصلنا الى واحد من أقوى البرامج المبيته في النظام فبواسطة اليبغ تستطيع عمل أشياء عجيبه وغريبه ، حسناً شغل الدوس وعند محث الأوامر أطبع debug ثم أنتر وستظهر لك علامه ' - ' ليل على أستعداد الديبغر على أستقبال أوامرك .
الأن دعنا نكتب هذا البرنامج الصغير
CODE
mov ax , 2 ; نقل العدد 2 كمعلومة مباشرة الى المسجل أي-أكس
mov bx , 3 ; نقل العدد 3 كمعلومة مباشرة الى المسجل بي-اكس
add ax , bx ; جمع أي-اكي مع بي-اكس مع وضع الجواب في أي-اكس / أي-اكس = أي-أكس + بي-أكس
كيف تقوم بأذخال هذا الكود :-
--------------------------------
1. عند المحث ' - ' أدخل a100 أي أننا سنبدأ نكتب الكود من العنوان 100 ثم أضغط أنتر بالطبع
2. الآن أدخل كل تعليميه ثم أضغط أنتر ومع نهاية التعليمية الأخيرة أضغط أنتر مرتين .
الأن قم بأدخال الرمز R ثم أنتر لترى حالة المسجلات
لاحظ أن المسجل AX يساوي صفر وسترى أيضاَ ظهور التعليميه MOV ax , 0002 وهي التعليميه التي عليها الدور في التنفيذ وليس المعلومة المنفذه ، الآن قم بطباعة الرمز T ثم أنتر لتنفيذ التعليميه التي عليها الدور هنا هي MOV AX , 0002 سترى الآن أن المسجل AX أصبح يساوي 2 وهذا مانتوقعه بالضبط وسترى أيضاً التعليميع التي عليها دور التنفيذ وهي MOV BX , 0003 أدخل الرمز T ثم أنتر لتنفيذها لترى أن المسجل BX أصبح يساوي 3 وسترى أيضاً التعليميه التي عليها الدور في التنفيذ وهي ADD AX , BX قم بأدخال الرمز T لتنفيذها ولاحظ كيف أن المسجل AX أصبحت قيمته مجموع العددين 2 + 3 وهو خمسة بينما بقى المسجل BX يساوي 3 .
الآن بعدما عرفت كيف تكتب كود بسيط أخرج من الديبغر بالضغط على Q ثم أدخل مرة أخرى بكتابة الأمر Debug حتى تصفر المسجلات مرة أخرى أدخل التعليميه A100 ثم جرب تكتب كود من عندك ومع كل نهاية تعليميه أضغط أنتر وفي نهاية التعليميه الأخيرة أضغط أنتر مرتين
( ملاحظة لترى شفرتك بلغة الآله والأسمبلي أدخل الرمز U ثم أنتر مباشرة بعد إدخال الكود وقبل إدخال الرمز R )
أضغط R ثم أنتر لترى المسجلات قبل تنفيذ أي عملية ولترى التعليميه التي عليها الدور في التنفيذ أضغط T ثم أنتر لتنفذ التعليميه وترى النتائج والتعليميه التي بعدها وهكذا ولاتنسى أذا أردت أن تدخل كود جديد الخروج والعودة مرة أخرى الى الديبغر لتصفر المسجلات والذاكره
1 - الجمع :-
--------------
التعليمه : Add
وتأخذ فى الحاله العاديه 2 وسيط ، المصدر و الهدف وهى تكافىء = = = المصدر = المصدر + الهدف
ADD Source , Destination = = = Source = Source + Destination
أمثله :
CODE
; A2H + 20H = C2
MOV AX , A2; 1st Number
ADD AX , 20; 2nd Num
نأخذ فى إعتبارنا أن العدد كون بالنظام السادس عشر إفتراضيا حالما يتم تغييره إلى عشرى أو ثنائى
بمعنى فى المثال السابق أول خطوه نقوم بتحميل A2 بالنظام السادس عشر إلى المسجل AX
وفى الخطوه الثانيه قمنا بجمع على ما بداخل المسجل الرقم السادس عشر A2
مثال آخر :
CODE
[/u]
; A111 + 2302 + 1203 + 4099 = 116AF
; OF COURCE AX IS 16 BIT RWG. SO IT WILL CONTAINS 16AF AFTER THE OPERATION
MOV AX , A111
ADD AX , 2302
ADD AX , 1203
ADD AX , 4099
; AX = 16AF AND CARRY FLAG IS BEEN SET
[u]مثال آخر ( بإستخدام الذاكره ) :
نضيف محتويات الذاكره بالعنوان [A200] + [3409] > > > >
CODE
MOV AX , [A200]
ADD AX , [3409]
والذى تم شرحه فى الدرس السابق ،،،Debug
ملاحظه : يمكن القيام بكل هذه الأمثله على برنامج ال
-------------------------------------------------------------------------------------------------------------------------
2 - الطرح :-
-------------
:SUB التعليمه
بالضبط نفس تعليمة الجمع
مثال :-
CX من محتويات المسجل SI نطرح محتويات المسجل
CODE
SUB SI , CX
مثال آخر :
BX من FFFF نطرح محتويات المكان فى الذاكره المعنون بالعنوان الموجود فى المسجل
CODE
MOV AX , FFFF
SUB AX , [BX]
3 - الضرب :-
---------------
: MUL التعليمه
يتم ضرب أى رقمين فى لغة الأسمبلى فى ثلاث أنظم إلى الآن :-
الأول : ال8-بت (البايت) :-
يتم وضع إحدى قيم الضرب فى AL و الآخر فى أى ريجستر آخر له نفس الحجم أو مكان فى الذاكره بجانب كود الضرب الذى هو فى حالتنا هنا للأرقام الغير محددة الإشاره .
.AX المحددة الإشاره .وتوضع النتيجه فى ال [IMUL]و
مثال :
للحصول على حاصل ضرب 120 * 30 نقوم بالأتى :-
CODE
----------------------------------
MOV CL , 30D
MOV AL , 120D
MUL CL
MOV [1000H] , AX
; لتخزين الناتج فى الذاكره المعنونه ب1000 بالنظام السداسي عشري
;----------------------------------
الثانى : ال16-بت (الكلمه) :-
يتم وضع إحدى القيم فى AX و ألآخرفى أى ريجستر آخر له نفس الحجم أو مكان فى الذاكره بجانب كود الضرب و توضع النتيجه فى DX:AX . و هذا معناه أن الجزء ال Low من ناتج القسمه سيخزن فى ال AX و الجزء ال High سيوضع فى ال DX .
مثال :
للحصول على حاصل ضرب 20000 * 2365 سنقوم بالآتى :-
CODE
;----------------------------------
MOV CX , 2365D
MOV AX , 20000D MUL CX
MOV [1000H] , AX ;تخزين الجزء الأول فى المكان فى الذاكره المعنون ب 1000
MOV [1001H] , DX ;تخزين الجزء الثانى فى المكان فى الذاكره الذى يلى المكان السابق
;----------------------------------
الثالث : ال32 بت :-
يتم وضع إحدى القيم فى EAX و ألآخرفى أى ريجستر آخر له نفس الحجم أو مكان فى الذاكره بجانب كود الضرب و توضع النتيجه(64 بت) فى EDX:EAX . و هذا معناه أن الجزء ال Low من ناتج القسمه سيخزن فى ال EAX و الجزء ال High سيوضع فى ال EDX .
بالطبع نحن نتعامل كبدايه على الأنظمه إلى ال 16 بت ،،،
---------------------------------------------------------------
4 - القسمه :-
---------------
التعليمه : DIV
أيضاً تتم فى نفس النظم السابقه والخاصه بالضرب :-
الأول : ال8بت (بايت) :-
يتم و ضع المقسوم فى AX و المقسوم عليه فى أى ريجستر حجمه بايت مثل BL , CL , DL , ... أو مكان فى الذاكره لها حجم بايت مثل BYTE PTR [1234H] , BYTE PTR [BX] .و يوضع ناتج القسمه فى AL و باقى القسمه فى AH بإستخدام [DIV] .
لاحظ:- أنه فى حالة قسمة الأرقام المحددة الإشاره بإستخدام [IDIV]تكون إشارة ناتج القسمه هى الإشاره العاديه فى هذه الحالات . وتكون إشارة خارج القسمه Remender دائماً موجبه و صحيحه Integer.
لاحظ:- كل القيم هنا 8-بت إذاً , لابد من تحويل القيمه ال 8-بت للمقسوم إلى 16-بت ليمكن نقلها ألى AX ويتم ذلك فى حالة القيم غير محددة الإشاره بمسح ال AH ليكون كله أصفار و تكون قيمة المقسوم 16-بت . أما فى حالة القيم محددة الإشاره يتم ذلك عن طريق كود [CBW] المسئول عن تحويل البايت(8-بت) إلى كلمه (16-بت) لل AX فقط.
مثال :-
للحصول على ناتج قسمة( + 16) على (-5) يمكننا عمل الأتى :-
CODE
;----------------------------------
MOV AL , 16D
CBW
MOV BL , 5D
NEG BL
IDIV BL
MOV PYTE PTR[1000H] , AL
MOV PYTE PTR[2000H] , AH
;----------------------------------
AL وهنا تم نقل المقسوم إلى
.[CBWوتم عمل مد له عن طريق [
BL ثم تم نقل قيمة المقسوم عليه إلى
[NEGبعد وضع الإشاره السالبه عن طريق [
. إذا القيم جاهزه لعملية القسمه ويتم حفظ الناتج فى الذاكره بعدها.
---------------------------------------------------------------
باقى النظم كما سبق من الممكن أن تقوم بإستنتاجها .
MOV ملاحظه أخيره : إستخدمنا التعليمه وهى مسئوله - كما توقعتم - على تحميل المسجلات أو أماكن الذاكره بقيم معينه أو محتويات مسجل أو أى قيم أخرى ،،
http://www.100hla.com/up/uploads/40cf93ad1e.jpg
السلام عليكم :
أما بعد فهذا ما عندي لكم فلا تثقلوا كاهلي بالإعتراضات على ما سبق .....
ولله العليم المنة والفضل أولاً وأخيراً ....
ولمن أرادها في ملف word فله ذلك....
وضعها على أقسام ومشاركات لأبين الفصل بينها والله من وراء القصد.....
http://www.100hla.com/up/uploads/49a6451171.rar
mmn87
01-15-2008, 04:58 AM
مشكور أخي Eyad على هالمشاركة وعلى نشاطك
بالفعل إنك عضو متميز ورائع
أرجو من الله أن يوفقك إلى كل خير
والسلام عليكم ورحمة اللهthnx
vBulletin® v3.8.4, Copyright ©2000-2012, TranZ by Almuhajir