الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

مقدمة الى الكيان الصلب في الحاسوب الشخصي - الجزء 3

مغلق
بدأه Xacker في 15 سبتمبر 2005 · 21 رد · 3,788 مشاهدة · في لغة Assembly لأنظمة 16, 32, 64 بت
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

في هذا المقال سوف نتابع المقالين الاخيرين من السلسلة لننهي هذه المقدمة (الطويلة :) ) للدخول في الكيان الصلب للحاسوب الشخصي وسنبدا في المقال التالي في متطلبات البرمجة بلغة التجميع وصيغة برنامج لغة التجميع (بدا الجد :D )

متطلبات فهم هذا المقال بسيطة.. الاستماع الى اغنية Cold / Crossfade : http://www.wopvideos.com/musicvideos/en.1790.htm :D

Looking back at me I see

That I never really got it right

I never stopped to think of you

I'm always wrapped up in

Things I cannnot win

You are the antidote that gets me by

Something strong

Like a drug that gets me high

What I really meant to say

Is I'm sorry for the way I am

I never meant to be so cold to you

And I'm sorry about all the lies

Maybe in a different light

You could see me stand on my own again

Cause now i can see

You were the antidote that got me by

Something strong like a drug that got me high

I never meant to be so cold

I never really wanted you to see

The screwed up side of me that I keep

Locked inside of me so deep

It always seems to get to me

I never really wanted you to go

So many things you should have known

I guess for me theres just no hope

I never meant to be so cold

وتحميل المقال B)

مقدمة الى الكيان الصلب في الحاسوب الشخصي - 3.zip

Do as I say, not as I do

We are Anonymous. We are Legion. We don't forgive. We don't forget

#2

حبيت اكون اول واحد يحمل المقال ويقلك شكرا

وبالمناسبة مين هادا crossfade <_<

شو جديد عالساحة؟

مع اني بسمع كتير اجنبي بس اول مرة اسمع فيه

#3

بارد :D

أظن أنهم لا يعرفون Nero

d4baa0.gif
#4

صرنا 2 اخي allko.. هي الاغنية سمعتها من حوالي 6 شهور ولهلأ معلقة بمخي حتى اني حطيتها مرة في بداية الدخول للويندوز :D (هم صرلهم حوالي سنة وللاسف ما قدرت احصل غير هالاغنية)

..

انت اذا بتسمعها اخي DeltaAziz رح تشوف انه الكلمات فيها رائعة بالنطق مش بالقراءة :)

Do as I say, not as I do

We are Anonymous. We are Legion. We don't forgive. We don't forget

#5

عندي استفسار

ذكرت في آخر المقال في فقرة العناوين الزوجية

اقتباس
تستطيع المعالجات تنفيذ عمليات الوصول الى كلمات الذاكرة بفعالية اكبر

اذا كانت عناوينها زوجية ففي تعليمة mov يستطيع المعالج الوصول

الى الكلمة ذات الازاحة0012 مثلا بشكل كامل ونسخها مباشرة الى

المسجل AX مثلا لانها تمتلك عنوانا زوجيا اما اذا كانت الكلمة ذات عنوان

فردي كعنوان الازاحة 0013 عندئذ سينفذ المعالج خطوتين للوصول الى هذه

الكلمة التي سنفرض ان محتوياتها كما بالشكل:

asm.JPG

في الخطوة الاولى ينسخ المعالج محتويات الحجرة ذات الازاحة0013

الى المسجل AL بعد وصوله الى كلتا الحجرتين عند الازاحتين 0012

و 0014 اما في الخطوة الثانية فهو ينسخ الحجرة ذات الازاحة 0014 الى

المسجل AH بعد وصوله الى كلتا الحجرتين ذات الازاحتين 0014و0015

وبذلك  تصبح محتويات المسجل AX هي 0123h"

ممكن توضح اكتر؟

انا فهمت انو لما يكون العنوان زوجي 0012 مثلا

فالمعالج بنسخ محتويات 0012 الى ax مباشرة

ولما يكون فردي 0013 فبحتاج لخطوتين مرة على

al ومرة لـ ah

الرجاء التوضيح

سلام

#6

انا فهمت التالي:

يعني احنا بنتكلم عن Word مقسمة على حجرتين للذاكرة(2 بايت) كل حجرة الها عنوان

وبحالة العنوان الفردي فان الـ W قسمت الى 0013 و 0014

ولنسخ الـ W هادي فلازم ننسخ محتويات 0013 الى AL ومحتويات 0014 الى AH

اما في حالة العنوان الزوجي فان الـ W قسمت الى 0012 و 0013

ولنسخ الـ W هادي فبننسخ محتويات الـ 0012 و 0013 بخطوة وحدة الى AX

هيك قصدك؟؟

بعدين في تعليق

انتا في الاول قلت"عمليات الوصول الى كلمات الذاكرة "

يعني احنا بنتكلم عن word ...بس بالاخر بتقول "محتويات المسجل AX هي 0123h" الـ0123 هادي DW مش W

سلام

تم تعديل هذه المشاركة بواسطة allko في 15 سبتمبر 2005 في 23:11

#7

انت دائما تدهشني باسئلتك اخي allko فقلما ارى تفاعلا مع مقالات الاسمبلي وتركيز على النقاط التفصيلية.. اوكيه.. بتذكر لما حكينا عن زمن تنفيذ التعليمة من قبل؟ :)

يمكن ان نقوم بصياغة سؤالك بشكل اخر: "كيف تتحكم وحدة التحكم CU بتنفيذ التعليمات من قبل CPU؟"

- تمتلك الوحدة CPU المسجل IP الذي يخزن عنوان التعليمة الواجب تنفيذها، وحالما تتم تهيئة المسجل IP فان وحدة التحكم تهيئ تسلسلا من العمليات يدعى دورة التعليمة Instruction cycle.

الشكل التالي سيوضح اكثر المطلوب شرحه وسيتم التعليق عليه ادناه..

15_09_05_12_02_17_1126810937icycle.gif

يوجد في الشكل ست حالات مرقمة من 1 الى 6 وسبعة انتقالات من a الى g. لاحظ ان هناك مسارين ممكنين تاخذهما الوحدة CPU وذلك اعتمادا على التعليمة، فاذا لم تحتاج التعليمة الى جلب معامل من الذاكرة (اي ان المعامل موجود في عند قيمة الازاحة المخزنة في IP) سيكون المسار الذي تاخذه الوحدة هو a b c g f، واذا كان المعامل مطلوبا لتعليمة ما فسيكون المسار هو a b c d e f. على هذا الاساس يعتمد الزمن الكلي المصروف لاتمام دورة تعليمة واحدة على التعليمة نفسها، فالزمن الفعلي الذي تاخذه التعليمة سيعتمد على الزمن اللازم لتنفيذ العمليات المحددة ضمن الحالة. حيث ان الزمن اللازم لعمليات محددة مثل تفكيك شفرة التعليمة سيكون قصيرا جدا في حين ان معظم الوقت سيصرف على جلب المعامل من الذاكرة.

ارجو ان تجيب هذه الاسطر القليلة عن استفساريك :)

Do as I say, not as I do

We are Anonymous. We are Legion. We don't forgive. We don't forget

#8

اما بالنسبة للـ W والـ DW:

W = Word = 2 bytes = 01 23 (لانهم قيمة ست عشرية انتبه.. مش ارقام منفصلة عشرية 0 1 2 3)

Do as I say, not as I do

We are Anonymous. We are Legion. We don't forgive. We don't forget

#9

شكرا على سرعة الرد (انا حاسس انو انتا دايما بتكون موجود في الوقت الي انا بكتب فيه السؤال!!)

بخصوص dw و w فانا فهمت وعدّلت مشاركتي السابقة بناء على ذلك...

بخصوص ال machine cycle فالشكل بوضح عملية تتبع(او تنفيذ) الـ instruction و بوضح ليش الزمن بختلف من تعليمة لاخرى

بس انا سؤالي كان مختلف قليلا

1- اجب بنعم او لا :rolleyes: :

ان كل word تخزن في حجرتين للذاكرة (كل وحدة 1 بايت)

2-اجب بنعم او لا : :rolleyes:

اقتباس
"وبحالة العنوان الفردي فان الـ W قسمت الى 0013 و 0014

ولنسخ الـ W هادي فلازم ننسخ محتويات 0013 الى AL ومحتويات 0014 الى AH

اما في حالة العنوان الزوجي فان الـ W قسمت الى 0012 و 0013

ولنسخ الـ W هادي فبننسخ محتويات الـ 0012 و 0013 بخطوة وحدة الى AX

3 -حضرتك قلت

اقتباس
في الخطوة الاولى ينسخ المعالج محتويات الحجرة ذات الازاحة0013

الى المسجل AL بعد وصوله الى كلتا الحجرتين عند الازاحتين 0012

و 0014 اما في الخطوة الثانية فهو ينسخ الحجرة ذات الازاحة 0014 الى

المسجل AH بعد وصوله الى كلتا الحجرتين ذات الازاحتين 0014و0015

وبذلك  تصبح محتويات المسجل AX هي 0123h"

طيب في الخطوة الاولى..."بعد وصوله الى كلتا الحجرتين عند الازاحتين 0012 و 0014 " شو علاقة0012 و 0014 ؟؟؟

احنا بدنا نوصل ل0013 !!!

ونفس الاشي في الخطوة التانية!!

وشكرا مقدما...واسف على كترة الاسئلة

best wishes

تم تعديل هذه المشاركة بواسطة allko في 15 سبتمبر 2005 في 23:44

#10

نعم

يدويا؟ لا.. لانك تتعامل مع اسماء تشير الى عناوين الذاكرة المختارة من قبل النظام وليس مع العناوين مباشرة وبالتالي المعالج يقوم بهذا بنفسه.

ان كان الرصف عم يتم بطريقة word بالتالي عندما يصل التنفيذ للتعليمة mov ax, [0013] مثلا فان البرنامج يقوم بمحاولة الوصول الى الازاحة 0012 ومن ثم يقوم بتعديل الـ IP بزيادته واحد ليقوم بعملية الجلب fetch ومن ثم يتابع بصورة عادية لجلب التعليمة من الازاحة 0014

اما بالنسبة لوجودي باغلب الاوقات لما بتكتب اسئلة.. احيانا صح واحيانا لا.. لاني بالغالب ما بسجل خروج :)

Do as I say, not as I do

We are Anonymous. We are Legion. We don't forgive. We don't forget

#11

يعني عشان يوصل لل0013 لازم يروح عال0012 وبعدين يزود IP ويوصل لل0013

صح؟

#12

صح (في حالة الرصف بواسطة word) وبنفس الاسلوب مع الانواع الاخرى من الرصف

Do as I say, not as I do

We are Anonymous. We are Legion. We don't forgive. We don't forget

#13

كالعادة جيت متأخر :)

جزاك الله خير أخى

Nothing to mention except that I am Muslim

Using your brain is not bad as you think

My Blog

logo.jpg

#14

xacker

يا عزيزي يا ريت تدخل بالاعماق لانك شوقتني كتير

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

assembly step by step

تحياتي

تم تعديل هذه المشاركة بواسطة allko في 16 سبتمبر 2005 في 04:06

#15

:)

باذن الله اخي allko واهلين وسهلين neo.. شو بعد ما رحت؟ :D

Do as I say, not as I do

We are Anonymous. We are Legion. We don't forgive. We don't forget

#16

رائع كالعادة أخى xacker . الشرح المبسط لDOS فك لى طلاسم كبيرة ..

#17

السلام عليكم

هالمرة تأخرت عليكم اشوي

جاري التحميل .. و الاسئلة في الطريق

باك الله فيك اخي Xacker

/index.php/topic/264448-%D8%A7%D9%84%D8%A8%D8%AF%D8%A7%D9%8A%D8%A9-%D9%85%D8%B9-%D8%A7%D9%84%D8%A7%D9%86%D8%AF%D8%B1%D9%88%D9%8A%D8%AF/

 

اني وان كنت الاخير زمانه ---- لأتِ بما لم تستطعه الاوائلُ

#18

وانا بالانتظار :D (والعفو من الجميع)

Do as I say, not as I do

We are Anonymous. We are Legion. We don't forgive. We don't forget

#19

السلام عليكم

جزاك الله خيرا اخي

واليك بعض الاستفارات

1- بالنسبة لايعاز push

للتوضيح فقط ، اظنه يقوم بالعملية كالاتي

sp-1

push high order

sp-1

push low order

اما ايعاز pop

pop low order

sp+1

pop high order

sp+1

و بالتالي ستكون المحصلة كما ذكرت زيادة او نقصان بمقدار 2

2- ذكرت اخي

اقتباس
  لاحظ ان القيم التي تم استرجاعها من المكدس تبقى موجوده فيه لكن لا يؤشر عليها المسجل sp 

انت متأكد من الكلام ده !! :D

طيب كيف يتم تفريغ المكدس اذا اردنا ذلك ؟

3- هل لـ stack حجم معين .. حسب علمي ان حجم الـ seg = 64KB

يعني انت ذكرت الترقيم من 0000 الى FFFF ، و كل حقل طوله 2 byte

يعني كم يطلع ( هو في علاقة بين الامرين ولا انا المرض مأثر عليّ )

4- ذكرت في العناوين ذات الصفة الزوجية ( و الكلام خاص بـ 8086 الذي يحتوي على 16 bit data bus )

انه اذا قرء odd word انه سيحتاج ان يقوم بـ two memory read cycles

لكن ماذا عن عملية الكتابة write . هل ينطبق نفس الكلام ؟ ارجو التوضيح

واسف على الاطالة .

/index.php/topic/264448-%D8%A7%D9%84%D8%A8%D8%AF%D8%A7%D9%8A%D8%A9-%D9%85%D8%B9-%D8%A7%D9%84%D8%A7%D9%86%D8%AF%D8%B1%D9%88%D9%8A%D8%AF/

 

اني وان كنت الاخير زمانه ---- لأتِ بما لم تستطعه الاوائلُ

#20

استاذي الغالي xacker

هل انتهت سلسة الاسمبلي بالجزء التالت؟

ولا في اجزاء تانية؟ :rolleyes:

#21

1- بالنسبة للنقطة الثانية نعم انا متاكد من هالشي :) بالنسبة لتفريغ المكدس فانت لن تحتاج الى تفريغ كامل المكدس (الذاكرة 4gb يا رجال ;) ) اللي انت بتحتاجه انك تفرغ buffer معين انت بدك تستخدمها في برنامجك صح؟ خلاص.. استخدم mov buff, 0 وبتقدر فيها تصفر محتويات ال buffer اما بالنسبة للمكدس فالبرنامج عند التنفيذ بيقوم المعالج بالكتابة فوق المعطيات القديمة بدون اي مشاكل فيه..

2- لل stack حجم افتراضي هو 64k كان مخصص لتطبيقات الـ 16bit وانت بتزيده على كيفك حسب الحاجة. بالنسبة لموضوع الترقيم فهو اعتباري.. المهم الفكرة انه انت لما بتستخدم بايتات من المكدس فالمساحة الفارغة منه بتنقص بالتدريج حتى ما يبقى فيه امكانية لاضافة اي بيانات (الحالة 0000) والعكس صحيح.. انت مارح تستخدم كامل المكدس ببرنامجك. صح؟ ;)

3- بالنسبة للعنونة الزوجية. نعم :)

اخي allko انتهى الجزء الثالث وليس كامل السلسلة والجزء التالي يتناول عملية التجميع والربط.. ساحاول قدر الامكان انهاءه اليوم.

تحياتي :D

تم تعديل هذه المشاركة بواسطة Xacker في 2 أكتوبر 2005 في 15:49

Do as I say, not as I do

We are Anonymous. We are Legion. We don't forgive. We don't forget

#22

جزاك الله خيرا اخي العزيز

مبدع كالعادة .. والله خايف لا ازعجك بأسئلتي .. بارك الله فيك

/index.php/topic/264448-%D8%A7%D9%84%D8%A8%D8%AF%D8%A7%D9%8A%D8%A9-%D9%85%D8%B9-%D8%A7%D9%84%D8%A7%D9%86%D8%AF%D8%B1%D9%88%D9%8A%D8%AF/

 

اني وان كنت الاخير زمانه ---- لأتِ بما لم تستطعه الاوائلُ

هذا الموضوع مغلق.

مواضيع مشابهة