السبت، 16 يونيو 2012

Lecture 1 - Introduction for C programming language







History of computers (Hardware)
- تاريخ اجهزة الحاسب

طبعا حبيت قبل ما أتكلم عن لغة الـ   وتاريخها . لازم نعرف ازاي بدأت اجهزة الحاسب وكيف تم تطويرها الي ان وصلت لهذا التقدم .

طبعا مش عايز ارجع بالتاريخ اوي من اول الاجهزه الميكانيكيه ولكن هنبدأ من اول حاسب رقمي الكتروني .


-          في عام 1964 بدأ اول حاسب رقمي الكتروني في العمل تحت اسم (ENIAC – Electronic Numerical and Calculator )  يستخدم نظاما خارجيا لدوائر التبديل والتوصيل لبرمجته .



-          الترانزستور : في عام 1974 ظهر الترانزستور وتم اختراعها في معامل بل علي يد ثلاثه من العلماء هم (جون باردين ووالتر براتين ووليام شوكلي ) وحصلوا علي جايزة نوبل .
-          الجيل التالت (1970-1964) الدوائر المتكامله : في عام 1958 قام د.جاك كليبي بتصميم اول دائره الكترونيه متكامله وتكونت من عدة مكونات من السليكون مجمعة مع بعضها البعض لتجميع دائره الكترونيه علي شريحة سليكون واحده سمح بتطويرها بعد ذلك .
-          ميني حاسب (1963) : في هذا العام تم بنجاح توزيع اول ميني حاسب تجاري قامت بانتاجه وتوزيعه شركة DEC  وكان هذا الانتاج تحت اسم PDP-8   وكانت نسخه ناجحه .
-          نظام اي بي ام والجيل التالت : في عام 1964 اتمت شركة IBMعائلة نظم 360 بعد استبدال النظام 260 بالترانزستور والدوائر المتكامله وقد تم بيع اكثر من ثلاثين الف نسخه . وبعد شهر من هذا الانتاج كانت برامج لغة البيزيك تعمل في كلية دارتمواث علي يد مخترعها توماس كيريس وجون كيمني واصبحت من اقوي اللغات وقتها .
-          الجيل الرابع (1990-1971) جيل الميكروبروسيسور : في عام 1971 ظهر الحاسب الشخصي الاول ولم يكن يسمي بالحاسب الشخصي كان اسمه وقتها (Kenbak-1) وله ذاكره قدرها 256 بايت وتظهر البيانات علي شكل مجموعة لمبات بيان ولم يتم بيع سوي 40 قطعه من هذا الجهاز بسبب ارتفاع سعره لكنه ساهم في الاعداد لثورة الحاسب الشخصي التي اعقبت هذا التاريخ .
-          وفي عام 1974 ايضا : قامت شركة انتل بالاعلان عن المعالج 8086 يعمل علي نظام 8 بت كأول معالج عام الاغراض.

حبيت بس اوضح تاريخ بدايات الحاسب وطبعا هو اكبر من كده بكتير ولكني اختصرت وخدت اللي يهمنا منه  .

تاريخ لغة الـ C

بدأت لغة الـ C  علي يد العالم Dennis Ritchie  عام 1970 ومازلت اللغه الاقوي والمستخدمه حتي الان فهي تستخدم في انظمة التشغيل والميكروكنترولر والجرافيكس والبرامج .


ليه مش بنتعامل مع الكمبيوتر بالانجليزي ؟؟

سؤال غريب قريته في احد الكتب ... ليه مش ممكن نكتب برامجنا ونتعامل مع الكمبيوتر بالانجليزي يعني مثل اقول للجهاز " Clean history and then go to web browser then open website and so on   "  طبعا سؤال كان غريب شويه ولكنه منطقي بدل ما نبهدل نفسنا في حفظ لغات برمجه وفهمها كان ممكن نكلم الكمبيوتر بالانجليزي . طبعا ردت علي الاسئله دي Grace Hopper  ودي كانت اول عالمة حاسب .

قالت انه في اللغه الانجليزيه فيه مصطلحات كتير جدا ومنقدرش اننا نكلم الكمبيوتر بالانجليزي لانها لغه مليئه بكثير من التعبيرات والكلمات الغريبه واللي ممكن الكمبيوتر يفهمها غلط وبالتالي تحدث اخطاء اثناء تطبيق البرنامج . يعني لو رجعنا للمثال اللي انا كتبته مثلا " اول جمله قولتله Clear history  كان ممكن اقول Delete history or remove history  وهكذا وبالتالي فصعب جدا انتاج لغه انجليزيه للحاسب . لكن من حوالي سنه اعتقد انه فيه لغة برمجه اخترعت لبرمجة الكمبيوتر باللغه العربيه ولكن طبعا مازالت تحت التطوير اسمها لغة "جيم "  - http://www.jeemlang.com/ . ولكن طبعا اللغه ضعيفه وعمرها ماهتبقي بنفس قوة لغات البرمجه الاخري .

اوائل اجهزة الحاسب كانت مكلفه للغايه وبالتالي المبرمجين كانوا بيقبضوا حوالي 15.000$ في السنه لانه وقتها كان الحاسب بيتبرمج بلغة الاله –  -  machine code يعني الكمبيوتر مكنش بيفهم غير 1 و 0 وبالتالي كانت البرمجه صعبه جدا وبتاخد مجهود ووقت  ... مثال لكود مكتوب بلغة الاله :

1010 1111 ..
0111 0011
      0111 0001
 And so on ..,

طبعا الموضوع كان صعب علي المبرمجين فبالرغم انه لغة الاله – الارقام – هي سهله للكمبيوتر الا انها صعبه علي الانسان .. المبرمجين وقتها كانوا بيكتبوا برامجهم بلغة الاسمبلي – Assembly language -  ولغة الاسمبلي كل جمله فيها بتتحط في سطر لوحدها وبيتم ترجمتها يدويا الي لغة الاله – Binary -  0 او 1 مثال علي كود مكتوب بالاسمبلي :
Program                     Translation
MOV A,74                              010 1111
ADD A,B                              0011 0111
Halt                                      0111 0110

والي اخره من الاوامر .


  
صورة توضيحيه لعملية الترجمه بين الاسمبلي ولغة الاّله .

وطبعا كانت مشاكل كتير بتواجه المبرمجين بسبب الترجمه اليدويه دي . غير انه لو حاول بس يطور برنامج او يعدل فيه بيحتاج انه يكتب الاكواد من اول وجديد ويعيد صياغتها .
ملحوظه : مش عايز حد يقولي ياخد الاكواد copy – paste  لان ساعتها مكنش فيه الكلام دا J

في الوقت دا فكر مهندس برمجيات في احد الشركات انه يخلي الكمبيوتر هو اللي يترجم الاكواد بدل ما كل مبرمج يقعد يترجم يدويا ويحول من اسمبلي للغة اّله . فاخترع حاجه اسمها Assembler  ودي بتعمل نفس اللي بيعمله المبرمج وهو الترجمه . طبعا المهندس دا راح لمدير الشركة علشان يعرض عليه الاختراع دا ولكن كانت المقابله سيئه للغايه كما ذُكر في كتاب "O’Relly C programming 3rd edition   “ . فكان رد المدير علي المهندس دا " ازاي تجرؤ انك حتي تفكر تستخدم اّله غاليه زي دي في مجرد تجارب فاشله وقد كلفت الشركة تمن هذه الساعه التي يعمل بها هذا الجهاز " . طبعا ساعتها الاجهزه كانت غاليه جدا دا غير انها كانت ممكن تشتغل نص ساعه اخرهاJ فكان الوقت فيها بحساب . وكان المهندس دا شايف انه لو فكرته نجحت يبقي احنا كده هنقدر نوفر تمن الساعه اللي بيقعدها المبرمج لترجمة الاوامر وياخد عليها فلوس  وجهاز الحاسب هو اللي هيقوم بالوظيفه دي . ولحسن الحظ بدات اسعار المبرمجين هي اللي تطلع واسعار اجهزة الحاسب هي اللي تنزل وبالتالي بدأت فكرة الـ Assembler  و بدأت تُستخدم علي نطاق واسع .

ظهور لغات البرمجه ذات المستوي العالي – : High Level Language 

طبعا بعد نجاح فكرة الـ Assembler  ووجدوا انها موفره وعمليه بدأو في التفكير لاختراع لغه اقرب للانسان فكما لاحظنا في لغة الاسمبلي ان كل جمله بتكتب في سطر الا انها غير مألوفه للانسان ايضا فحاول علماء الحاسب انهم يوجدوا طريقه بحيث تكون قريبه من الانسان وهيستخدموا نفس مبدأ الـ Assembler معاها  . من اوائل لغات البرمجه العاليه التي تم اختراعها كانت FORTRAN  وهي صممت للعمليات الحسابيه وبعدها لغة الـ COBOL  والتي كان غرضها كتابة التقارير التجاريه ولغة الـ PASCAL والتي صممت من اجل الطلبه في الجامعات .

ملحوظه : بدأ بيل جيتس حياته من خلال لغة الـ BASIC  التي تعلمها حينما كان طالبا باحد الجامعات فقد كانت اجهزة الحاسب وقتها باهظة الثمن ولذلك قررت الجامعه بالاتفاق مع احدي شركات الحاسب توفير اجهزة حاسب من خلال مدد زمنيه يتم الدفع من خلالها . – يعني كانت مثلا الشركه دي بتوفر للمدرسه مدة استخدام الحاسب اسبوع ولهم حسابات خاصه بتنتهي بعد الاسبوع – ولكن نظرا لان بيل جيتس كان شغوفا بالحاسب فقد استطاع اختراق انظمة تلك الشركه واستطاع انه ياخد مدد اطول وكان له صديق يدعي بول اّلن استطاعوا سويا تعطيل نظام الشركه بالكامل مما ادي الي حرمان الشركه للمدرسه باستخدام اجهزة الحاسب لمدة شهر كامل . وبعد رفع الحظر
عرض بيل جيتس وصديقه علي تلك الشركه ان يقوموا بتطوير انظمتها وحمايتها وفي مقابل توفير النظام مجانا لهم . وطبعا دي كانت بداية بيل جيتس وانطلاق مايكروسوفت بعد ذلك .

- الملحوظه دي انا كتبتها عشان بس افكركم بحاجه ان لغة الـ BASIC  اللي هي من ايام بيل جيتس وهو صغير لسه كنا واخدينها السنه اللي قبل اللي فاتت J

بداية عملاق لغات البرمجه –   :- C

زي ماذكرت قبل كده ان دينيس ريتشي في عام 1970 قام باختراع لغة الـ C  وكانت ومازالت اقوي لغات البرمجه . اللغه دي اتكتبت عشان هدف واحد وهو برمجة انظمة التشغيل ولكن بعدها اصبحت اللغه السائده في العالم . الميزة في لغة C  انها لديها مرونه كبيره جدا في التعامل وفي غاية السهوله كما انها تستخدم في العديد من الاغراض . وبسبب نجاح هذه اللغه تم اشتقاق العديد من اللغات منها فتم اختراع الـ Objective C   فهي خاصه بالبرمجه لانظمة APPLE   و Embedded C  الخاصه ببرمجة الميكروكنترولر و C with classes  وهي تطوير للغة C  ومن ثم بعد ذلك تم انشاء لغة C++  ومنها كانت لغة الـ Java  اذا فكل لغات البرمجه الحاليه هي من لغة الـ C  وبالتالي فتعلم تلك اللغه سيفتح لك العديد من الابواب للغات البرمجه الاخري .

ماهو الـ Compiler : 

زي ماعرفنا الـ Assember  للغة الاسمبلي فيوجد ايضا مايسمي بالـ Compiler  وهو مترجم ايضا يقوم بتحويل لغات البرمجه ذات المستوي العالي الي لغة الاّله لكي يفهمها الحاسب .

الصوره بالاعلي توضح كود مكتوب بلغة الـ C  ليقوم بطبع جملة Hello world  ولكن مايهمنا معرفته هو ان اي لغة برمجه يتم كتابتها فهي في الصوره الاول Source code  ولا يفهمها سوي المبرمج اي ان جهاز الحاسب لايفهم مثل هذه الاكواد . يأتي دور الـ compiler  في ترجمة تلك الجمل الي لغة يفهمها الحاسب مثل الصوره الموضحه بالاسفل .

ففي الصوره يقوم الـ compiler  بأخذ الـ source code  الذي كتبناه بالاعلي ليتم تحويله الي object file  ومن خلال مكتبات نظام التشغيل يتم تحويله الي Executable program  حيث يفهمه جهاز الحاسب ونظام التشغيل . وطبعا يوجد انواع كثيره من الـ compiler  وتختلف باختلاف انظمة التشغيل فمثلا في وندوز يوجد مثل (   (Borland C++ , Turbo C++ , Dev C++ , Microsoft Visual C++ ومثلا في انظمة اللينكس توجد (GCC compiler  وغيرها ) .

ملحوظه الـ Compiler  الخاص بـ C++  يستطيع بالفعل ترجمة الاكواد المكتوبه بلغة الـ C .

صورة اخري توضح عملية ترجمة اللغات العاليه :


عايزين نرجع بالتاريخ شويه لانظمة التشغيل ونعرف زمان انظمة التشغيل كان بتشتغل ازاي . ونجرب نكتب برامج عليها قبل مانبدأ نتعرف علي السهل نحاول نجرب الصعب شويه J .

 اول ماتم اكتشاف انظمة التشغيل كانت CLI – Command Line Interface  يعني ايه ! . يعني كانت شاشه بيتم من خلالها ادخال الاوامر زي الصوره اللي تحت دي .


دي صورة من نظام لينكس وكان التعامل مع انظمة التشغيل كلها بالاوامر فقط مفيش ولا ماوس ولا شاشة عرض يتم الاختيار من خلالها .

ودي صورة اخري لبدايات انظمة مايكروسوفت نظام Ms-Dos  :


برده كلها كتابة اوامر ولكن مازال نظام الـ MS-DOS  موجود في انظمة وندوز الحديثه حتي الان .

 GUI-Graphical User Interface :

في عام 1948 دوغلاس انجلبارت بدأ في التفكير جديا في تحويل البرامج المكتوبه الي شاشة عرض يسهل الي اي شخص قراءته وكانت الكمبيوترات الموجوده وقتها هي الكمبيوترات العملاقه (Main Frames )  . ومن ثم قامت شركة APPLE  والتي كانت وقتها في جراج صغير تحت قيادة ستيف جوبز وستيف وزنياك بانتاج اول نظام تشغيل بشاشة عرض .

ومن ثم بدأت باقي الشركات وانظمة التشغيل بعد ذلك في تطبيق ذلك النظام لتسهيل استخدام الحاسب حيث تم اصدار GUI  لنظام التشغيل MS-DOS  عام 1985 كما بالصوره التاليه ;

وبعدها تطورت كل انظمة التشغيل الي ان تصل بالشكل الذي نراه الأن .

مما تتكون انظمة التشغيل :


كما في الشكل بالاعلي فان جهاز الكمبيوتر مقسم من اول الهاردوير وهي قطع الحاسب ومن ثم نظام التشغيل ومن ثم برامج انظمة التشغيل واخيرا المستخدم ولكن مايهمنا الان هو مما يتكون اي نظام تشغيل .

نظام التشغيل هو حلقة الوصل بين اجزاء الحاسب (الهاردوير) والمستخدم فانه ليس الا واجهه للمستخدم لتسهيل عليه عملية استخدام الحاسب وكتابة الاكواد . وكما بالشكل الاعلي فان نظام التشغيل يتكون من :

Kernel :
وهو نواة النظام مثله مثل اي أساس في المنزل لا يمكن بناء المنزل الا بانشاء الاساس اولا  . اذن فان نواة النظام هي التي تحتوي علي كل شئ خاص بها وهي التي تربط بين البرامج علي نظام التشغيل و اجزاء الحاسب (الهاردوير) .

Application :

وهي البرامج المقدمه مع نظام التشغيل لتسهيل العمليه علي المستخدم فمثلا لما بنزل نظام تشغيل جديد مثل وندوز بيبقي معاه – Text Editor -  مثل النوتباد ومحرر صور مثل برنامج الرسام وبرنامج لتصفح المواقع مثل انترنت اكسبلورر كل هذه البرامج مهمه للمستخدم ولا يمكن الاستغناء عنها في اي نظام تشغيل .

Devices :

دي طبعا سهله ومعروفه فدي اجهزة الهاردوير الخاصه باي جهاز كمبيوتر مثل الرامات والهارد والبروسيسور ولا يمكن استغناء اي نظام تشغيل عن اي منها .

CPU – Central processing Unit :

دي اهم جزئيه عايز اتكلم عنه وهي الـ  CPU  عشان هي اللي بتحتوي علي كل اللي يهمنا فهي المسئوله عن العمليات الحسابيه والمنطقيه وتقوم بتنظيم تزامن العمليات الاخري في الحاسوب والتحكم بها . حيث ظهر بعد ذلك الـ Microprocessor  والذي يمثل عقل الحاسوب .
الـ CPU  بيتكون من :
-           ALU – Arithmetic Logic Unit : المسئوله عن العمليات الحسابيه والمنطقيه داخل الحاسب
-          Registers : وهي بمثابة مساحه في الذاكره محجوزه ليتم تخزين مانريده بها .
-          Control Sections : وهي وحدة التحكم .
-          Internal Bus :  ممرات مسئوله عن الاتصال بين الوحدات المختلفه .

 بعد طرح انتل لمعالجات 8086 و 8088 حيث وجدوا انهم متشابهين كثيرا من حيث الخصائص لذا سمو بـ X-86 Family .  ودرسناها في مادة الميكروبروسيسور السنه دي لو حد فاكر J

الـمسجلات  - Registers  :  
انا هتكلم بس عن المسجلات ذات الاغراض العامه وهي كما موضحه بالصوره  ومعها المسجلات الاخري  : 
في انظمة انتل 32 بت فان المسجلات العامه EAX  حجمها 32 بت حيث سعة المسجل من 0 الي 31 وكما قلنا من قبل ان المسجلات العامة الاغراض تستخدم في تخزين مانريد .
في المسجل العام الغرض EAX  مقسم الي ثلاثة اجزاء  :
-          الاولي من 0 الي 15 وتحتوي علي مسجلين AL – AH  حيث ان AL  يقع مابين اول 0 الي 7 بت ومن ثم المسجل AH والذي يقع مابين 7  الي 15 بت حيث يساعدنا في تخزين معلومات محدده وبقيم محدده
-          الثانيه : اما باقي المسجل يمكن تخزين اي داتا به . وكما الامر مع EBX , ECX , EDX  .

صورة اخري للتوضيح :



الجزء العملي
اسف جدا لان الكلام النظري كان كتير ولكن كان لابد منه عشان نفهم اساسيات انظمة التشغيل وازاي بدأت عشان نقدر نفهم بعد كده اساسيات اي لغة برمجه حتي ولو لم تكن  .

عايزين بقي نرجع بالزمن ورا شويه ونحاول نكتب برنامج بلغة الاسمبلي – اللي احنا المفروض اخدناه في مادة الميكروبروسيسور ومدخلناش المعمل فيها ولا يوم J  - ونشوف زمان قد ايه الناس دي كانت بتتعب عشان تكتب برنامج .

اول حاجه نفتح شاشة الدوس من خلال الضغط علي Start > CMD  هتفتح معانا النافذه دي :


هنكتب كلمة Debug  وندوس انتر هنلاحظ وجود سطر جديد وجنبه شرطه كده .

دلوقتي هنكتب اول instruction  الا وهي
A 100 -    دي عشان نبتدي نكتب من موقع ذاكره محدد يعني احنا دلوقتي هنبتدي نكتب من اول 100
بعد ما هندوس انتر هنلاحظ انه بدأ يحدد الموقع اللي هنكتب من عنده .


هنبتدي نكتب البرنامج بتاعنا كل اللي هنعمله اننا هنكتب برنامج مجرد بيطبع جمله احنا عايزينها .

التعليمه الجايه اللي هنكتبها هي :
Jmp 1234

ودي عشان نتاكد ان الذاكره فارغه فاحنا بنفرغ حوالي 4 بايتات كمان .

 لو لاحظنا هنلاقيه انه قفز حوال 4 بايتات من العنوان 0100 الي 0103 .

بعد كده يجي دور الجمله اللي احنا عايزين نسجلها انا مثلا هكتب "”Welcome ahmed

هنفذ التعليمه التاليه عشان نخزن الجمله بتاعتنا :
Db “welcome ahmed$”

ولازم نكتب في الاخر علامة $  عشان نأكد للبرنامج ان دي نهاية الجملة .


تمام ... هنلاحظ اننا بقينا في المكان 0111 اي ان الجمله اخدت حيز من البايتات .

طيب دلوقتي عايزين نسجل الجمله دي  في Register  عشان احنا كل اللي عملناه اننا قلنا للبرنامج فيه جمله دخلالك بس لكن لحد دلوقتي فهي مش متسجله عشان يتم استدعائها مره اخره .


هنستخدم التعليمه MOV  واعتقد دي اخدناها برده في مادة الميكروبروسيسور J  وهنسجل الجمله دي في المسجل dx .
Mov dx,0103

-          احنا عارفين ان تعليمة Mov destination,source  اي انه يستخدم للنقل فالامر ياتي ومن ثم المكان الذي ينقل اليه ومن ثم الشئ الذي نريد نقله
-          مثال : Mov ax,3 معناها اننا عايزين نسجل الرقم 3  في المسجل ax  .
-          احنا هنا كتبنا Mov dx,0103  يعني يسجل الامر اللي محطوط في الاوفست 0103  في المسجل dx
-          ومش هسجله في ax عشان هستخدمه في حاجه تانيه بعد كده .



طيب جه بقي وقت اننا نعرف ايه الطريقه اللي احنا بنستخدمها دي . دي طريقها اسمها interrupt 21  عملية المقاطعه رقم 21  ودي معناها انه بيستحضر ما بداخل المسجل ax  .

-          يعني دلوقتي لو انا ادخلت امر طباعه في المسجل ax  وعملت int 21  هيطبع من داخل ax
-          لو ادخلت امر اضافه او اي عمليه حسابيه هيقرا برده مابداخل ax
-          وكل عمليه وليها رقمها
-          رقم عملية الطباعه هو 0900



طيب دلوقتي برده البرنامج مش هيعمل حاجه لسه لان زي ماقلنا ان المسجلات ماهي الا اوعية تخزينيه فقط يعني انا حطيت امر الطباعه جوه المسجل ax  وخلاص ولكن معملتلوش استدعاء وبالتالي لازم اعمله استدعاء عشان يشتغل

فهكتب الامر اللي بعدها وهو
Int 21

البرنامج بالتاي هيقوم بعملية مقاطعه وتحميل مابداخل مسجل الـ ax  .

طيب دلوقتي كده البرنامج هيشتغل تمام فاضل اننا نخرج من البرنامج بعد ما ينفذ الاوامر فهنستخدم عملية interrupt 20  ودي معناها الخروج لنظام التشغيل .


طيب دلوقتي هندوس انتر مره تانيه عشان نلاحظ وجود علامة الـ -   اللي كانت موجوده .


طبعا احنا عارفين ان كل اللي احنا بنكتبه دا مازال source code  عايزين نحوله لحاجه الجهاز يقدر يفهمها ويقراها عشان ينفذ اللي طلبناه منه . وبالتالي محتاجين نحدد للجهاز حجم الكود اللي كتبناه عشان يعرف هوا يبتدي ينفذ الاوامر من اول فين لحد فين . 

طيب احنا ليه استخدمنا الامر jmp 1234  في الاول ؟؟ عشان نقدر بعد كده نستدعي المسجل dx  من بداية البرنامج
هنشوف دلوقتي
هنكتب تاني a 100  عشان نبتدي من اول الـ 100   اللي كتبنا عليها بس المره دي هنكتب فيها jmp 0111  ودا رقم الاوفست اللي مستجل فيه كلمة welcome ahmed  جوه ريجستر .dx


زي ما شايفين ان البرنامج بادئ من اول 0100 زي ماحددنا في الاول لغاية 011B عايزين نحدد مساحة الملف دا عشان يبتدي يطبعهم . من خلال الامر –h
-h end start     يعني النهايه وبعد كده البدايه       
-h 011B 0100               عشان يطبعلنا حجم البايتات بالظبط اللي هنعملها ترجمه   



كل اللي يهمنا هو الجمله الاخيره دي 001B  دي مساحة البايتات اللي الاكود مستخدماها بالهكس طبعا .

دلوقتي عايزين ننشئ البرنامج الـ executable  اللي يمكن قرأته فعلا ويبقي ملف تنفيذي

-n ahmed.com

-n  وهي الاشاره الي new  file  

-  ahmed  دا اسم الملف التنفيذي اللي هننشأه وممكن تغيروه لاي اسم
- .com  دا امتداد الملف التنفيذي اللي هينشأ


مش فاضل غير اننا نطبع الاوامر دي كلها في مسجل CX  واحنا عارفين طبعا ان المسجل دا هو الـ counter  واللي بيحسب بالظبط عدد الاوامر اللي هتتنفذ فهنحتاج للامر rcx  وهنطبع عدد البايتات بالهكس اللي احنا استخرجناها .

Rcx  ومن ثم انتر
وبعدها ندخل القيمة
001B

ملحوظه في الصوره اللي فوق طلع ايرور عشان كتبت rcx  وجنبها رقم البايتات علي طول . المفروض rcx  ومن ثم انتر وبعدها ندخل عدد البايتات .



كل حاجه تمام مش فاضل غير اننا نعمل write  جوه الـ CX  بالبايتات اللي حددناها بمجرد الضغط علي w  ومن ثم انتر



جاري كتابة البايتات علي المسجل . وبكدا نكون انتهينا من البرنامج مجرد ندوس انتر مره اخر ومن ثم q  وبعدها انتر مره اخري للخروج .

طيب دلوقتي عايزين نستعدي البرنامج مره ونشغله عشان نشوف هيطبع الجمله ولا لأ .



طبعا لغة الاسمبلي دي كانت مهزله J  لما واحد يقعد ساعه عشان يكتب كود مجرد يطبع جمله فمابالكم عشان يعمل برنامج يقوم بعمليات حسابيه ممكن يقعد قد ايه J  فالحمد لله انه فيه لغة برمجه عاليه المستوي هنتعلمها في الدرس الجاي ان شاء الله . اتمني ان تعود الافاده علي الجميع واسف علي الاطاله ولكني حبيت اوضح كل الاساسيات عشان نقدر ندخل بعد كده في لغة الـ C  واحنا عارفين ايه الفرق بين الـ low level language  والـ High Level language وازاي بتشتغل انظمة التشغيل وانواعها .



With My Best Wishes

Ahmed Sherif

You Can Download PDF Files :  Here  or HERE

0 التعليقات:

إرسال تعليق

شكرا لاضافة تعليق