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

[ تمت الإجابة ]ما الفرق بين الأعداد بالأشارة والأعداد بدون إشارة

بدأه Prelware D في 8 أغسطس 2009 · 5 رد · 1,913 مشاهدة · في أرشيف قسم الـــ Assembly
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكــم ورحمـة الله وبركاتــه ،،

الحمدلله والصلاة والسلام على رسول الله وعلى آله وصحبه أجمعين

أرجو الشرح عن الفرق بين الأعداد ذو الإشار والأعداد دون الإشارة عندما نتعامل مع البيارق (الأعلام)

ومع أوامر التفرع أيضا (Unsigned Jumps)

ومع (Singned Jumps)

هل يعني JE التفرع إذا تم المساواة ؟ في الـ(Unsigned Jumps) و (Singned Jumps)

وماذا يكون في حالة Single Flag Jumps

شكراً :happy:

تم تعديل هذه المشاركة بواسطة Prelware D في 8 أغسطس 2009 في 03:38

Danial Tarraf

Prelware D&D Association

Lattakia/Syria

#2

وعليكــم السـلام ورحمة الله وبركاتـه..

اقتباس
أرجو الشرح عن الفرق بين الأعداد ذو الإشار والأعداد دون الإشارة عندما نتعامل مع البيارق (الأعلام)

الاعداد باشارة Signed numbers هي اعداد تاخذ قيم موجبة وسالبة ، بينما الاعداد بدون اشارة Unsigned numbers هي موجبة فقط .

وعليك ان تحدد هل تريد التعامل مع العدد x كاشارة او لا !

مثلا :

[color= #ff007f;]mov [color= #7f7f40;]ah[color= #0000ff;],[color= #7f7f7f;]255

هذا العدد يمكن ان نتعامل معه كعدد بدون اشارة وسيصبح كما هو 255

ويمكنك ان تتعامل معه كعدد باشارة ونظرا لان البت الاخير يساوي واحد فان العدد سيصبح -1 "تحسبها عن طريق المتمم الثنائي".

وعليك ان تتذكر دائما المدى الصحيح الذي يمكنك ان تحفظ فيه الاعداد بدون ان يحصل اي overflow .

بالنسبة لمسجلات 8 بت : فان مدى الاعداد بدون اشارة هو 2^8 = 256 عدد [0,255]

اما مدى الاعداد بالاشارة هو 2^7 = 128 عدد [-127,128] حيث أن البت الاخير هو لاشارة العدد .

مثال لامر القفز :

نفرض ان قيمة al هي 210 مثلا .

[color= #ff007f;]cmp [color= #7f7f40;]al[color= #0000ff;],[color= #7f7f7f;]100

[color= #ff007f;]ja  @PRINT

هنا بما أن الامر المستخدم هو للاعداد بدون اشارة Jump if above فان al سيتم التعامل معها كعدد موجب ولهذا سيتم القفز الى PRINT لان 210 اكبر من 100 .

اما هنا :

[color= #ff007f;]cmp [color= #7f7f40;]al[color= #0000ff;],[color= #7f7f7f;]100

[color= #ff007f;]jg  @PRINT

فلن يتم القفز ، لان الامر Jump if Greater يستخدم مع الاعداد بالاشارة ، لذلك سيتم التعامل مع al كعدد باشارة ، قيمتها ستكون -46 تقريبا وهي اقل من العدد 100 بالطبع.

اقتباس
هل يعني JE التفرع إذا تم المساواة ؟ في الـ(Unsigned Jumps) و (Singned Jumps)

وماذا يكون في حالة Single Flag Jumps

لم افهم سؤالك جيدا ، لكن خذ مثال :

[color= #ff007f;]cmp [color= #7f7f40;]al[color= #0000ff;],[color= #7f7f7f;]3

[color= #ff007f;]je @NEXT

سيتم القفز في حالة كان al=3 ، وهذا النوع من القفز يعتمد على حالة بت من ال FLAGS وهو zero flag حيث ستكون قيمته واحد اذا كان حاصل طرح al-3 = 0 يعني كانوا متساويين ، غير ذلك فان قيمته صفرا.

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

بالتوفيق.

تم تعديل هذه المشاركة بواسطة SudaNix في 8 أغسطس 2009 في 05:51

#3

شكراً لك اخي الكريم

أني أقصد من :

اقتباس
هل يعني JE التفرع إذا تم المساواة ؟ في الـ(Unsigned Jumps) و (Singned Jumps)

وماذا يكون في حالة Single Flag Jumps

أنه إذا تم التحقق من القيمتين أنهما متاسويتين أنتقل إلى

وهذا مثال:

nu1 db 4,'$';in Data segment
Nu2 db 4,'$';in data segment
;-----------
mov al,nu1
Cmp nu2,al
je @do;See if Nu2=al do: @do
jne exit;see if nu2 != al do exit
@do:
;set code here
Exit:
;exit the program

والكود جربتو وطلع صح :happy:

شكراً مرة أخرى

بالتوفيق

Danial Tarraf

Prelware D&D Association

Lattakia/Syria

#4

تمام ،

لي ملاحظة على تعريفك للمتغيرين nu1 و nu2 حيث هناك 2 بايت ضايعة ، ويجب ان تحجز هكذا :

nu1 [color= #7f00ff;]db [color= #7f7f7f;]4

nu2 [color= #7f00ff;]db [color= #7f7f7f;]4

اما بالنسبة للحرف $ فهو يستخدم مع المصفوفات التي تريد طباعتها بالدالة 9 من المقاطعة 21h ، حيث يدل على نهاية المصفوفة.

طبعا اذا كنت تريد طباعة المتغيرين عن طريق الدالة 9 فلا بأس والكود صحيح.

وشكرا.

#5

السلام عليكــم ورحمـة الله وبركاتــه ،،

اتفضلوا هالجداول ضرورية

و ناقلتهن من مزكرة قديمة شوي

(ورقة مطبوعة من كتاب)

حاولوا تطبعوهن

Signed Jumps

SymbolDescriptionCondition for jump
JG/JNLEjump if greater than.

jump if not less than or equal to

ZF = 0 and SF = OF
JGE/JNLjump if greater than or equal to.

jump if not less than

SF = OF
JL/JNGEjump if less than.

jump if not greater than or equal to

SF <> OF
JLE/JNGjump if less than or equal

jump if not greater than

ZF = 1 or SF <> OF

Unsigned Conditional Jumps:

SymbolDescriptionCondition for jump
JA/JNBEjump if above.

jump if not below or equal

CF= 0 and ZF = 0
JAE/JNBjump if above or equal.

jump if not below

CF = 0
JB/JNAEjump if below.

jump if not above or equal.

CF = 1
JBE/JNAjump if below or equal.

jump if not above

ZF = 1 or SF <> OF

Single-Flag Jumps:

SymbolDescriptionCondition for jump
JE/JZjump if equal.

jump if equal to zero

ZF = 1
JNE/JNZjump if not equal.

jump if not zero.

ZF = 0
JCjump if carryCF = 1
JNCjump if no carry.CF = 0
JOjump if overflowOF = 1
JNOjump if no overflow.OF = 0
JSjump if sign negativeSF = 1
JNSjump if non-negative signSF = 0
JP/JPEjump if parity evenPF = 1
JNP/JPOjump if parity oddPF = 0

كل جدول مكون من تلت اعمدة... من اليسار لليمين

العلامة اللي بنستعملهن للشرط و بعدين الشرط و بعدين حالة flag register...

ضروري هالجدول اسناء البرمجة بلغة Assembly

موفقين يارب

bye

[وسط]

♥ Countess ♥

57899411.gif

♥

[/وسط]

#6

شكراً أخي الكريم على ملاحظتك الرائعة

وأريد أن أشكر رغد على الجداول المهمه

--------------------

بالتوفيق :)

Danial Tarraf

Prelware D&D Association

Lattakia/Syria

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

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

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

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

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