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

[ تمت الإجابة ]طلب مساعده في طباعة Even Number

بدأه LINUX MAN في 12 يونيو 2009 · 7 رد · 955 مشاهدة · في أرشيف قسم الـــ Assembly
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

انا مطلوب مني برنامج كالتالي

Enter number of elements in the list:5
Enter the elements:
1
2
3
4
8

The numbers you entered are:1,2,3,4,8
The even numbers are:4,8
Their total is:18
Their average is :4
Their Minimum is:1

أنا الحمد لله كتبتها جميعا صح 100% ماعدا الEven number حاولت فيها حتى اليأس

أنا الي اعرفه عشان تحسب الEven number تقسم الرقم على 2 إذا طلع الremainder (يعني الباقي من القسمة) 0 معناها الرقم زوجي Even عكس ذلك الرقم odd

فكتبتها على النحو التالي لكن ماضبطت معاي

mov cx,N
		mov dx,0
		 mov bx,2
		 div bx
		 start5:
		 cmp dx,0
		 je next2
			  mov ax,list[bx]
		next2:
		 add ax,2
		 loop start5
		  putint list[bx]
		  nwln

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

الحرص واجب :lol:

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

بعد تسليم البرنامج لمدرس المادة

وآسف على الإطاله في الموضوع لكن حبيت أحطكم في الصورة

انا في انتظاركم :wub:

#2

الـ remainder في 16 بت يخزن في AH وليس DX

ثم ما هذا

		 start5:
		 cmp dx,0
		 je next2
			  mov ax,list[bx]
		next2:
		 add ax,2
		 loop start5

شغل هذا الكود في ذهنك، هل تجد عمله صحيح؟

-_-

السلام عليكم

Do as I say, not as I do

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

#3
Xacker كتب:
الـ remainder في 16 بت يخزن في AH وليس DX

ثم ما هذا

		 start5:
		 cmp dx,0
		 je next2
			  mov ax,list[bx]
		next2:
		 add ax,2
		 loop start5

شغل هذا الكود في ذهنك، هل تجد عمله صحيح؟

-_-

السلام عليكم

أهلا أخ Xacker

لكني اعتقد انك غلطان بخصوص الremainder

الremainder يخزن في الAH إذا كان 8 بت

ويخزن في ال DX إذا كان 16 بت

وبالنسبة للكود الي أنا كاتبه أكيد مش صحيح

لأنه لو كان صحيح كان اشتغل معاي

لكن أنا راح أقول لك ليش أنا كنت أعتقد أنه هذه الكود صحيح

 cmp dx,0

في البداية نقارن هل الDx المتبقي من القسمة يساوي 0

إذا كان نعم ندخل في الشرط

jz next2
			  mov ax,list[bx]
		next2:
		 add bx,2

ونضع الأرقام الي في داخل الList إلى AX

ثم نضيف 2 على الbx عشانا بنتعامل مع word 16 bit

ثم نطبعها

وانا عدلت في الكود الي فوق عن الكود الأصلي المكتوب في الموضوع شيئين فقط

عدلتها من je إلى Jz <<لأنه الjz معناها jump if equal zero

وبدال الadd ax,2 جعلتها add bx,2

بس هذه كل الي عندي :wink:

وأتمنى منكم المساعده العاجلة عشانى تسليم الواجب بكره :wacko:

#4

قم بعملية AND بين الرقم الذي تريده والرقم واحد ، إذا كان الناتج 0 فالعدد زوجي Even ..

سبحان الله وبحمده ... سبحان الله العظيم

#5

أهلا أخي

تذكر أن أي رقم زوجي (even) يكون له LSB ياسوي 0 (صفر)

وبالتالي أي رقم فردي (odd) يكون له LSB يساوي 1 (واحد).. طبعا نتحدث عن Binary Representiation

قم بإجراء عملية AND أي رقم مع 0x1 أو ببساطة 1.. ثم إن كان الناتج واحد فالرقم فردي وإلا فهو زوجي

LSB---> تعني البت الأخير للرقم من جهة اليمين.

#6
LINUX MAN كتب:
أهلا أخ Xacker

لكني اعتقد انك غلطان بخصوص الremainder

الremainder يخزن في الAH إذا كان 8 بت

ويخزن في ال DX إذا كان 16 بت

ممم

تقصد إن كانت القسمة على مسجل طوله بايت > AH

ولو كانت 2 بايت > DX

نعم صحيح، شكراً على تذكيري بهذا حتى أتفاداه في المرة القادمة.

وبخصوص طريقة القسمة والبواقي خليك معي في مثال سريع لم أقم بتجريبه

 

	[color= #ff007f;]mov	[color= #7f7f40;]cx[color= #0000ff;],n	[color= #007f00; font-style: italic;]; number of loops

	[color= #ff007f;]lea	[color= #7f7f40;]di[color= #0000ff;],[color= #7f00ff;]list	[color= #007f00; font-style: italic;]; di = pointer to list

	[color= #ff007f;]lea	[color= #7f7f40;]si[color= #0000ff;],[color= #7f00ff;]even	[color= #007f00; font-style: italic;]; si = pointer to even table

	[color= #ff007f;]mov	[color= #7f7f40;]bx[color= #0000ff;],[color= #7f7f7f;]2

[color= #aa007f;]@b[color= #0000ff;]:

	[color= #ff007f;]mov	[color= #7f7f40;]ax[color= #0000ff;],[color= #aa007f;]word [color= #7f00ff;]ptr [color= #0000a0; font-weight: bold;][[color= #7f7f40;]di[color= #0000a0; font-weight: bold;]]

	[color= #ff007f;]div	[color= #7f7f40;]bx

	[color= #ff007f;]cmp	[color= #7f7f40;]dx[color= #0000ff;],[color= #7f7f7f;]0

	[color= #ff007f;]jne	@odd

	[color= #ff007f;]mov	[color= #7f7f40;]ax[color= #0000ff;],[color= #aa007f;]word [color= #7f00ff;]ptr [color= #0000a0; font-weight: bold;][[color= #7f7f40;]di[color= #0000a0; font-weight: bold;]]

	[color= #ff007f;]mov	[color= #aa007f;]word [color= #7f00ff;]ptr [color= #0000a0; font-weight: bold;][[color= #7f7f40;]si[color= #0000a0; font-weight: bold;]][color= #0000ff;],[color= #7f7f40;]ax

	[color= #ff007f;]add	[color= #7f7f40;]si[color= #0000ff;],[color= #7f7f7f;]2

@odd[color= #0000ff;]:

	[color= #ff007f;]add	[color= #7f7f40;]di[color= #0000ff;],[color= #7f7f7f;]2

	[color= #ff007f;]loop	[color= #aa007f;]@b
المبرمج أحمد كتب:
قم بعملية AND بين الرقم الذي تريده والرقم واحد ، إذا كان الناتج 0 فالعدد زوجي Even ..

نعم هذه طريقة أفضل وأسرع لكون العدد الزوجي حسب نظام التمثيل الثنائي الـ LSB فيه صفر.

Do as I say, not as I do

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

#7
اقتباس
قم بعملية AND بين الرقم الذي تريده والرقم واحد ، إذا كان الناتج 0 فالعدد زوجي Even ..

او xor مع 0 وكذلك or مفيش عاوز ارخم :D

موقع البرنامج

مبارك لشعب تونس photo-thumb-42837.png

#8

اممممممم ممكن ليش لا!!

XOR مع الصفر !! X xor 0 = X ...

:lol:

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

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

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

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

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