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

[ تمت الإجابة ]كيف نبدل بين قيم المسجلات بدون mov أو xchg

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

كيف يتم تبديل محتوى مسجل مع مسجل اخر بدون استخدام ايعاز

mov, xchg

#2

هاك مثالين بناء على ما ذكرت (بدون استخدام mov / xchg)

[color= #ff007f;]xor	[color= #7f7f40;]eax[color= #0000ff;],[color= #7f7f40;]ebx

[color= #ff007f;]xor	[color= #7f7f40;]ebx[color= #0000ff;],[color= #7f7f40;]eax

[color= #ff007f;]xor	[color= #7f7f40;]eax[color= #0000ff;],[color= #7f7f40;]ebx

[color= #ff007f;]push	[color= #7f7f40;]eax

[color= #ff007f;]push	[color= #7f7f40;]ebx

[color= #ff007f;]pop	[color= #7f7f40;]eax

[color= #ff007f;]pop	[color= #7f7f40;]ebx

Do as I say, not as I do

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

#3

شكرا على المجهود لكن هل يعمل هذين اللايعازين مع اسيمبلي 80*86

#4

نعم

Do as I say, not as I do

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

#5

لدي تعقيب إضافي على موضوع عدم استخدام mov في العملية أن هذا الأمر يستوجب استخدام وسيط ثالث لأنك لا تستطيع استخدامه بين المسجلين المطلوبين مباشرة.

كمثال:

[color= #ff007f;]mov	[color= #7f7f40;]ecx[color= #0000ff;],[color= #7f7f40;]eax

[color= #ff007f;]mov	[color= #7f7f40;]eax[color= #0000ff;],[color= #7f7f40;]ebx

[color= #ff007f;]mov	[color= #7f7f40;]ebx[color= #0000ff;],[color= #7f7f40;]ecx

بالتالي إن كان المطلوب من خلال سؤالك أيضاً عدم استخدام وسيط ثالث فعليك أن تقوم باستخدام طريقة XOR فقط وتصبح الطريقة الثانية غير صحيحة لأنك تعتمد على المكدس كوسيط ثالث.

تم تعديل هذه المشاركة بواسطة Xacker في 7 فبراير 2009 في 20:21

Do as I say, not as I do

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

#6

الله يعطيك العافية والف شكرا كنت محتاجة هذه الاجابة وشكرا لكل الجهد والدعم اللي بيتوفر في هذا المنتدى الرائع

والف شكرا مرة ثانية

#7

add ax,bx

sub bx,ax

sub ax,bx

هذا هو الحل الصحيح لانه لو فرضنا ان قيمة ax:20,bx:10 بالخطوة الاولى يصيح قيمة ax:30 عندما اقوم بطرح 30-10=20 وهكذا اصبحت قيمة المسجل bx=20 وفي الخطوة الاخيرة عندما اطرح 20-30=10 ,وهي القيمة المطلوب وضعها في المسجلax=10وهكذا تم تبديل القيم بدون استخدام ايعاز mov,xchg

#8
اقتباس
هذا هو الحل الصحيح لانه لو فرضنا ان قيمة ax:20,bx:10 بالخطوة الاولى يصيح قيمة ax:30 عندما اقوم بطرح 30-10=20 وهكذا اصبحت قيمة المسجل bx=20 وفي الخطوة الاخيرة عندما اطرح 20-30=10 ,وهي القيمة المطلوب وضعها في المسجلax=10وهكذا تم تبديل القيم بدون استخدام ايعاز mov,xchg

استخدام xor هو الأفضل, لأن طريقتك يمكن أن تؤدي إلى overflow :)

#9
Khaled.Alshaya كتب:

استخدام xor هو الأفضل, لأن طريقتك يمكن أن تؤدي إلى overflow :)

ليس هناك overflow ، كل ما فى الأمر ان carry Flag ستكون 1

لكن الطريقه صحيحه والناتج صحيح فى جميع الاحوال

#10

ax = 1

bx = 0FFFFh

أخبرني بعد تنفيذ هذا ماذا سيكون قيمة ax, bx :)

add ax,bx
sub bx,ax
sub ax,bx

Do as I say, not as I do

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

#11
Xacker كتب:
ax = 1

bx = 0FFFFh

أخبرني بعد تنفيذ هذا ماذا سيكون قيمة ax, bx :)

add ax,bx
sub bx,ax
sub ax,bx

كودك غير مضبوط اساسا

صحح الكود كالتالى ثم أخبرني بعد تنفيذ كل ما تريد ماذا سيكون قيمة ax, bx :)

add ax,bx
sub bx,ax
neg bx
sub ax,bx

شاااو

تم تعديل هذه المشاركة بواسطة NawalyZuma في 15 فبراير 2009 في 15:59

#12

وبالتالي كان من الأفضل أن تكتبه في الرد السابق طالما أردت أن تؤكد أنه من الصحيح استخدام add / sub

Do as I say, not as I do

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

#13

أنا لم أكتب شيئ

انا علقة على رد Khaled.Alshaya

وهذا الرد لا يحتوى على أى كود

ثم بعد ذلك أنت طرحت الكود غير المضبوط

ولم تخبرنى

اقتباس
أخبرني بعد تنفيذ كل ما تريد ماذا سيكون قيمة ax, bx
شاااو
#14
اقتباس
انا علقة على رد Khaled.Alshaya

وهذا الرد لا يحتوى على أى كود

ثم بعد ذلك أنت طرحت الكود غير المضبوط

و منكم نستفيد :)

#15
Khaled.Alshaya كتب:
و منكم نستفيد :)
العفو ... أنت من ذو المقالات المميزة فى المنتدى، وانا من استفدت كثيراً من مقالات فى قسم السى، حقيقة مقالات رائعة، اعجبنى جداً موضوع الجديدة في لغة C++0x

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

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…