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

[ تمت الإجابة ]ما هي أسرع طريقة

بدأه MohammadKaraki في 22 سبتمبر 2009 · 15 رد · 2,074 مشاهدة · في أرشيف قسم الـــ Assembly
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

أتمنى أن يكون سؤالي منطقياً...

ما هو أسرع كود لجعل قيم المسجلات الأربعة EAX, EBX, ECX, EDX تساوي 1

وكيف يمكنني معرفة زمن تنفيذ تعليمة معينة بلغة الآلة على معالج معين؟

; 1
		XOR EAX, EAX
		XOR EBX, EBX
		XOR ECX, ECX
		XOR EDX, EDX
		INC EAX
		INC EBX 
		INC ECX 
		INC EDX


; 2
		MOV EAX, 1
		MOV EBX, 1
		MOV ECX, 1		
		MOV EDX, 1


;3
		MOV EAX, 1
		MOV EBX, EAX
		MOV ECX, EAX
		MOV EDX, EAX

والسلام عليكم

SAFETY TIP : Always delete what you new, and free what you malloc, never mix new with free or malloc with delete.

#2

وعليكم السلام ..

زمن المعالجة تختلف باختلاف المعالجات فلكل معالج سرعته .. لكن يمكنك معرفة أيهم أسرع من خلال النظر الى أيهم يولد كود أصغر .. وتقريبا الحلول متساوية لأن التعليمة XOR و INC تأخذ كل منهم 1 بايت في الذاكرة وبالتالى عدد بايتات الحل الأول هو 8 .

بينما التعليمة MOV تأخذ 2 بايت .. وبالتالى الحل الثاني والثالث يولدوا 8 بايت ..

والله أعلم ..

http://informatic-ar.com منصة تعليمية عربية في علوم الحاسب والبرمجة

https://moalfat.com  للكتب الالكترونية والكورسات التعليمية

Everything we see now is just an engineering solution based on old science

#3

شكرا على الرد أخ وجدي

لا أظن أن سرعة تنفيذ التعليمة تعتمد على حجمها فقط، فالتعليمتان CALL EAX و JMP EAX، كل منهما حجمها 2 بايت (IA-32)، ولكن لا شك أن تعليمة CALL مكلفة أكثر للوقت، لقيامها بإضافة عنوان العودة للمكدس.

اقتباس
زمن المعالجة تختلف باختلاف المعالجات فلكل معالج سرعته

ذكرت أنني أريد زمن المعالجة لتعليمة على معالج معين.

والسلام عليكم

SAFETY TIP : Always delete what you new, and free what you malloc, never mix new with free or malloc with delete.

#4

السلام عليكم....

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

فمثلاً, تردد المعالج = 2Gh, هذا يعني مليارين نبضة في الثانية الواحدة, و لمعرفة زمن النبضة الواحدة:

cycle time = 1 / 2 * 10^9

بعد أن تعرف زمن النبضة الواحدة بالثانية, يمكن حساب عدد النبضات المطلوبة للتعليمات التي تقوم بكتابتها, ثم ضربها في وقت النبضة الواحدة لتحصل على الوقت المطلوب بالثانية.

بالمناسبة هذا الأمر لعبة مبرمجي الـ Real Time Systems :)

تحياتي...

تم تعديل هذه المشاركة بواسطة Khaled.Alshaya في 23 سبتمبر 2009 في 02:04

#5

معلومات جميلة جدا أخ خالد

هذا ما كنت أنتظره، شكرا لك

أين أجد الجدول الخاص بتعليمات المعالج IA-32 ؟

والسلام عليكم

SAFETY TIP : Always delete what you new, and free what you malloc, never mix new with free or malloc with delete.

#6

أهلاً أخ محمد,

بالنسبة لوثائق معالجات Intel فهي من هنا,

للاسف لا أعرف إلا القليل عن معالجات Intel :(

#7
اقتباس
للاسف لا أعرف إلا القليل عن معالجات Intel

ماذا تستخدم!؟

اقتباس
cycle time = 1 / 2 * 10^9

cycle time = 1 / (2 * 10^9)

تم تعديل هذه المشاركة بواسطة MoHammaD_93 في 23 سبتمبر 2009 في 02:43

SAFETY TIP : Always delete what you new, and free what you malloc, never mix new with free or malloc with delete.

#8

Motorola 68K

بس أنا متأكد إنك ما راح تشوفه في حياتك :P

#9

72.jpg

:P :P

SAFETY TIP : Always delete what you new, and free what you malloc, never mix new with free or malloc with delete.

#10
اقتباس
أين أجد الجدول الخاص بتعليمات المعالج IA-32 ؟

وجدت هذا الموقع.. لمن يريد

http://www.penguin.cz/~literakl/intel/intel.html

SAFETY TIP : Always delete what you new, and free what you malloc, never mix new with free or malloc with delete.

#11

ماكان ال OP Code أصغر فهو الأسرع...

سلامي لك

#12
اقتباس
ماكان ال OP Code أصغر فهو الأسرع...

لا علاقة لحجم الـ OP Code بالزمن اللازم لتنفيذ التعليمة.

مثلاً, من المصدر الذي وضعه الأخ محمد, قارن بين TEST و بين DIV. كلاهما نفس الطول تقريباً, و ربما TEST أطول في بعض الحالات, إلا أنها أسرع بـ x40 تقريباً في إحدى الحالات!

تحياتي...

#13
اقتباس
ثلاً, من المصدر الذي وضعه الأخ محمد, قارن بين TEST و بين DIV. كلاهما نفس الطول تقريباً, و ربما TEST أطول في بعض الحالات, إلا أنها أسرع بـ x40 تقريباً في إحدى الحالات!

تحياتي لك... أنا أجبت فقط من وجهت نظري , شكرا على التصحيح وسأطلع على الأمر بإذن الله

#14

لكن.. هل زمن تنفيذ تعلميتين مختلفتين (ومتساويتين بعدد الـ cycles) متساوي بدقة عالية؟

تحرير: بعبارة أخرى، هل هناك عوامل أخرى تؤثر على سرعة تنفيذ تعليمة غير عدد الـ Cycles ؟

تحياتي

تم تعديل هذه المشاركة بواسطة MoHammaD_93 في 24 سبتمبر 2009 في 19:17

SAFETY TIP : Always delete what you new, and free what you malloc, never mix new with free or malloc with delete.

#15
اقتباس
لكن.. هل زمن تنفيذ تعلميتين مختلفتين (ومتساويتين بعدد الـ cycles) متساوي بدقة عالية؟

إذا كان عدد الـ Cycles لتعليمتين مختلفتين متساوي, فالوقت متساوي بكل تأكيد. و لكن لاحظ أن التعليمات تأخذ src و dest في كثير من الأحيان, و بالتالي لو كان أحدهما في الذاكرة, فسيختلف الوقت بكل تأكيد عما لو كان في register.

هذا الأمر موضح في جداول أي معالج, بمعنى أن الجدول سيذكر بأن التعليمة عندما يكون الـ src فيها في الذاكرة, فإنها ستأخذ كذا Cycle و عندما تكون في register فإنها ستأخذ كذا Cycle.

تم تعديل هذه المشاركة بواسطة Khaled.Alshaya في 24 سبتمبر 2009 في 21:24

#16
اقتباس
بالتالي لو كان أحدهما في الذاكرة, فسيختلف الوقت بكل تأكيد عما لو كان في register.

سيتأثر بسرعة الذاكرة إذا.. شكرا لك أخ خالد.. تحياتي

SAFETY TIP : Always delete what you new, and free what you malloc, never mix new with free or malloc with delete.

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