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

اسئلة في الأعداد السداسي عشرية , وأقنعة البتات

بدأه Delphawi في 31 مارس 2008 · 30 رد · 6,512 مشاهدة · في أرشيف قسم الـــ Assembly
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

بسم الله الرحمن الرحيم

السلام عليكم شباب التجميع

حاليا انا اقرأ كتابا عن البنية التحتية للريجستري

ولكن واجهتني مشكلة ,

ما معنى قوله :

"أقنعة البتات" ؟

وما معنى :

العدد 12 عدد عشري

والعدد 12×0 عدد سداسي عشري

:wacko: ؟

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

اقتباس
If A is success in life, then A equals x plus y plus z. Work is x; y is play; and z is keeping your mouth shut

Albert Einstein

مدخل إلى برمجة وتصميم الألعاب : كيف أبدأ ؟

#2

bit masks

اقتباس
In computer science, a mask is some data that, along with an operation, is used in order to extract information stored elsewhere.

مثلا تقوم بتحديد قيمة بت ما في حال كونه 0 أو 1 من خلال معالجته مع بت آخر ليكن 1 (هذا البت يسمى bit mask) اختياري تعلم أنه عند تنفيذه مع عملية bitwise ولتكن AND مثلا سيعطى قيمة 0 فرضاً في حال كون البت الاساسي (0) أو 1 في حال كون البت الأساسي (1)... هل الفكرة واضحة؟

CONSOLE

10011101

AND 00001000

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

= 00001000

انظر البت الثالث من اليمين (ترقيم البتات يبدأ من صفر لا تنسى)

2- فقط يقول لك كل ما يسبقه 0x يعني انه ضمن تمثيل ست عشري فيما عدا هذا فالعدد عشري.

في الأسمبلي 0x يعني h بعد الرقم (hexa)

تم تعديل هذه المشاركة بواسطة Xacker في 31 مارس 2008 في 22:22

Do as I say, not as I do

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

#4
اقتباس
فقط يقول لك كل ما يسبقه 0x يعني انه ضمن تمثيل ست عشري فيما عدا هذا فالعدد عشري.

هذه وصلت , لكن كيف احول مثلا 12×0 إلى التمثيل السداس عشري , يعني انا عارف ان

4ِA في Hex تصبح 01001010

طيب , 12×0 في Hex كم تصبح ؟؟؟

بالنسبة لشرح القناع , فللأسف لم أستوعبه جيدا

أيضا أخي , حضرتك ذكرت AND , وكنت سمعت أيضا عن OR

ممكن شرح لهما

وجاري تصفح المووضع أخي croconile

وجزاكم الله خيرا,,,

تم تعديل هذه المشاركة بواسطة Ala2 VB في 1 أبريل 2008 في 21:22

اقتباس
If A is success in life, then A equals x plus y plus z. Work is x; y is play; and z is keeping your mouth shut

Albert Einstein

مدخل إلى برمجة وتصميم الألعاب : كيف أبدأ ؟

#5

ابحث عن bitwise operators

هي عبارة عن AND / OR / XOR / NOT

اما موضوع 0x12 في هكس فهي 0x12 نفسها!

كل ما يسبقه 0x هو هكس بالأصل ولا تحتاج لتحويله إلى هكس

Do as I say, not as I do

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

#6

و هذا موقع للتحويل إذا كنت تريد (هنا)

rasool4k.gif

[وسط]mimetex.cgi?MSN:root@root-shell.net.

[/وسط]

#7

شكر على الموقع أخي كروكو

وانا عرفت And و Or

و Not أعتقد هي العكس

يعني :

0 Not 1 =
Not 0 = 1

ولكن ما هي XOR

وأيضا ممكن شرح أكثر لأقنعىة البتات , يعني مثلا

كيف أعرف قناع لبت ما

نفرض أنا حولت عدد إلى Binary

وأصبح 10100100

كيف اعرف قناعه , وكيف أستفيد من ذلك ؟

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

اقتباس
If A is success in life, then A equals x plus y plus z. Work is x; y is play; and z is keeping your mouth shut

Albert Einstein

مدخل إلى برمجة وتصميم الألعاب : كيف أبدأ ؟

#8

لا أجد أحسن من كلام ويكيبيديا:

In computer science, a mask is some data that, along with an operation, is used in order to extract information stored elsewhere.

The most common mask used, also known as a bitmask, extracts the status of certain bits in a binary string or number (a bit field or bit array). For example, if we have the binary string 10011101 and we want to extract the status of the fifth bit counting along from the most significant bit, we would use a bitmask such as 00001000 and use the bitwise AND operator. Recalling that 1 AND 1 = 1, with 0 otherwise, we find the status of the fifth bit, since

10011101 10010101

AND 00001000 00001000

= 00001000 00000000

القناع شئ تستخدمه ليست قيمة معينة.

rasool4k.gif

[وسط]mimetex.cgi?MSN:root@root-shell.net.

[/وسط]

#9

السلام عليكم,

مرة أخرى بصورة أوضح إن شاء الله,

لنفرض لديك الرقم 10011101

وتريد أن تحدد فيما إذا كان البت الخامس فعّال (أي يحمل القيمة 1)

انظر الى الرقم مرة أخرى

البت الخامس من اليمين (تذكر البت الأول له الترتيب صفر) = 0

الآن لدينا عدة عمليات bitwise يمكن الاستفادة منها

لنأخذ مثلا AND

هذه العملية لو نظرت إلى جدول الحقيقة الخاص بها فهو بالشكل التالي

جدول الحقيقة

A AND B

B

A

1

1

1

0

1

0

0

0

1

0

0

0

لذلك لاحظ, أنا أريد الحصول على قيمة البت الخامس, يمكن إما الحصول عليها مباشرة من خلال عمليات الإزاحة SHL, SHR

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

لذلك يصبح لدي رقم جديد هو عبارة عن

00100000

الآن حسب جدول الحقيقة لو قمت بتنفيذ عملية AND لهذا الرقم مع الرقم السابق فطالما يوجد بت مساوي للصفر في إحدى القيمتين أعلاه فالقيمة التي سأحصل عليها في الناتج في موضع ذلك البت هي الصفر حتماً لأن عملية AND لا تتأثر بهذه القيمة.

يبقى لدي البت الخامس, الذي أضعه مساوي للـ 1 في القيمة الثانية, ولا أعلم ما هو في القيمة الأولى.

فعند تنفيذ عملية AND بين القيمتين لدينا الحالتين:

  1. أن تكون القيمة للبت الخامس في القيمة الأولى مساوية لـ 0 عندها سأحصل على القيمة 0 بعد تنفيذ AND في موضع ذلك البت.
  2. أن تكون القيمة للبت الخامس في القيمة الأولى مساوية لـ 1 عندها سأحصل على القيمة 1 بعد تنفيذ AND في موضع ذلك البت.

في الحالة (1) سيكون الناتج عبارة عن 00000000 بالباينري المساوي 0 في العشري.

في الحالة (2) سيكون الناتج عبارة عن 00100000 بالباينري المساوي 32 في العشري.

لذلك باختصار شديد

اقتباس
In computer science, a mask is some data that, along with an operation, is used in order to extract information stored elsewhere.

وهو المقصود بأقنعة البتات, الحصول على معلومات عن البت من خلال استخدام عمليات bitwise المنطقية وبت اختياري هو عبارة عن mask إما أن يقوم بتغطية (لنختر كلمة أخرى "بت ماص" لا تسألني ما هذا :lol:) يقوم بامتصاص القيمة التي يتم فحصها ويعطيك إشارة على أنه 0 في حال كون العملية AND

أو يكون "بت حيادي" يترك القيمة 1 في حال كون العملية AND والقيمة 1

هل هذا أوضح؟

Do as I say, not as I do

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

#10

شكرا على التوضيح أخي X

والقناع هنا كان : 00100000

صحيح ؟

اقتباس
مباشرة من خلال عمليات الإزاحة SHL, SHR

ما هي هذه العمليات ؟

أيضا أخي , انا عارف جدول OR

وهو :

1 | 1 = 1

1 | 0 = 1

0 | 0 = 0

وجدول Not

~ 0 = 1

~ 1 = 0

لكن جدول XOR ؟ ما هو

وشكرا على التوضيح

تم تعديل هذه المشاركة بواسطة Ala2 VB في 4 أبريل 2008 في 08:27

اقتباس
If A is success in life, then A equals x plus y plus z. Work is x; y is play; and z is keeping your mouth shut

Albert Einstein

مدخل إلى برمجة وتصميم الألعاب : كيف أبدأ ؟

#11
1 ^ 1 = 0
1 ^ 0 = 1
0 ^ 1 = 1
0 ^ 0 = 0

SHL = Shift Left

SHR = Shift Right

rasool4k.gif

[وسط]mimetex.cgi?MSN:root@root-shell.net.

[/وسط]

#12

نعم صحيح القناع هو كما ذكرت.

فيما يتعلق بعمليات الإزاحة فهي عمليات تنفذ على مستوى البت أيضا.

نأخذ SHL

اقتباس
SHL Shift Logical Left; Intel 80x86; shifts the contents of a data register or memory location (8, 16, or 32 bits) to the left (towards most significant bit) by a specified amount (by 1, by 0 to 31 bits specified by an immediate operand, or by 0-31 bits specified by the contents of the CL register), with the high-order bit being shifted into the carry flag, zeros shifted into the low-order bit; sets or clear flags

ولنأخذ مثال بسيط في البداية:

الرقم 5 العشري = 101b في التمثيل الثنائي

لنفرض قمت بتنفيذ العملية التالية

mov	al, 5
shl	  al, 1

ما سيحدث هو التالي

CONSOLE

5d = 00000101b

shift left 101 bits to the left by 1, to the most significant bits, filling least significant bits with zeros

00001010b = 10d

انظر الى البتات كيف تم ازاحتها خانة اليسار وتم وضع صفر في الخانة في اقصى اليمين

مثال آخر

CONSOLE

7d = 00000111b

shift to most significant bits by "1"

00001110b = 14d

انظر يبدو أن الازاحة الى اليسار بمقدار واحد تكافئ ضرب العدد بـ 2 ؟؟

هل هذا صحيح؟

طيب لو أزحته بمقدار 2 هل يكون ضرب بمقدار 3 ؟؟

لا, فعلياً هو يكافئ الضرب بمضاعفات الـ 2

طالما الازاحة بمقدار 1 تعني الضرب بـ 2

الازاحة بمقدار 2 تعني الضرب بمربع المقدار 2 أي 4

الازاحة بمقدار 3 تعني الضرب بمكعب المقدار 2 أي 8

وهكذا

لنعد الى التفاصيل الآن

خذ ورقة وقلم

CONSOLE

5d = 00000101b

shift left by 2

00010100b = 20d

5d = 00000101b

shift left by 3

00101000b = 40d

shift left by 4

01010000b = 80d

shift left by 5

10100000b = 160d

shift left by 6

101000000b = 320d

shift left by 7

1010000000b = 640d

عد الان الى الاقتباس أعلاه

اقتباس
by 0 to 31 bits specified by an immediate operand

ماذا يعني 0 to 31 bits ؟

هذا حجمه 32 bits

يعني؟ dword

يعني؟ لا تنسى المسجلات لا تستطيع التعامل مع أكبر من dword على 32بت

هناك عدة ملاحظات على هذا الموضوع

الازاحة الى اليسار كما تلاحظ في الأعلى كأنك تقوم بعملية ضرب العدد العشري بالقيمة 2n

الازاحة الى اليسار بمقدار واحد كأنك تقوم بضرب العدد بقاعدته (radix), ان كان عشري فازاحته بمقدار 1 الى اليسار كأنك تضربه بـ 10

ازاحته بمقدار 2 الى اليسار كأنك تضربه بـ 100

لو الرقم ثنائي فازاحته بمقدار 1 كأنك تضربه بـ 2

ازاحته بمقدار 2 يعني ضربه بمقدار 4

باختصار هو ضربه بـ radixn

SHR هي مشابهة للقسمة, لكن هناك ملاحظات اضافيه عليها عندما يكون الرقم signed

راجع هذه الصفحة ففيها معلومات جميلة

http://webster.cs.ucr.edu/AoA/Windows/HTML...entationa6.html

ان كان لديك أسئلة لا تتردد بالطرح.

تم تعديل هذه المشاركة بواسطة Xacker في 8 أبريل 2008 في 00:31

Do as I say, not as I do

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

#13

جزاك الله خيرا أخي X على المعلومات

أنا استوعبت جزء بسيط , لكن انا أفهم إن كان التطبيق على مثال من عندي

مثلا العدد 01001010

أريد إجراء عملية SHL و SHR عليه

وشكرا جزيلا لك وللأخ croconile على المتابعة الحلوة دي

اقتباس
If A is success in life, then A equals x plus y plus z. Work is x; y is play; and z is keeping your mouth shut

Albert Einstein

مدخل إلى برمجة وتصميم الألعاب : كيف أبدأ ؟

#14

اوكيه, 01001010, أنت أخبرني ماذا سيكون الناتج بعد عدة عمليات SHL بمقدار 4 مثلا ونفس الأمر في حال SHR؟

:)

Do as I say, not as I do

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

#15

انا كان قصدي حضرتك تشرحلي العمليات على هذا المثال

لكن لا مشكلة من تشغيل الدماغ قليلا :lol:

انا في البداية سأطبق على مثال بسيط , زي :

0001

هل SHL هي >>

يعني

2 >> 0001 = 0010

و SHR هي <<

يعني

2 << 0001 = 00001

؟؟؟

اقتباس
If A is success in life, then A equals x plus y plus z. Work is x; y is play; and z is keeping your mouth shut

Albert Einstein

مدخل إلى برمجة وتصميم الألعاب : كيف أبدأ ؟

#16

الأولى صحيحة, الثانية...

امممم..

كل الأرقام العشرية ذات الفاصلة يمكن تمثيلها بالصورة الثنائية لكن مع الانتباه إلى أمر مهم أوضحه في المثال التالي

512.34 = 5 * 102 + 1 * 101 + 2 * 100 + 3 * 10-1 + 4 * 10-2

إن أردت تمثيل هذا الرقم بالترميز الثنائي ماذا يصبح؟

نقوم بتمثيل الجزء الصحيح أولاً

512 / 2 = 256 والباقي 0

256 / 2 = 128 والباقي 0

128 / 2 = 64 والباقي 0

64 / 2 = 32 والباقي 0

32 / 2 = 16 والباقي 0

16 / 2 = 8 والباقي 0

8 / 2 = 4 والباقي 0

4 / 2 = 2 والباقي 0

2 / 2 = 1 والباقي 0

1 / 2 = 1 والباقي 1

اذا 512 بالتمثيل العشري تساوي 1000000000 بالتمثيل الثنائي

تأكد بنفسك

الآن تقوم بتمثيل 34 أيضا

34 / 2 = 17 والباقي 0

17 / 2 = 8 والباقي 1

8 / 2 = 4 والباقي 0

4 / 2 = 2 والباقي 0

2 / 2 = 1 والباقي 0

1 / 2 = 1 والباقي 1

اذا 34 تمثيلها بالتمثيل الثنائي يساوي 100010

اذا يصبح تمثيل 512.34 بالعشري يماثل

1000000000.100010

لماذا اخبرك هذا وما علاقته بـ SHR ؟

بما ان SHR تقوم على أساس القسمة على 2n

حيث n = 1 من أجل ازاحة بمقدار 1

n = 2 من أجل ازاحة بمقدار 2

الخ...

يعني ازاحة 1 إلى اليمين بمقدار 1 تعني قسمته على 2 بالتالي الناتج يكون نصف والنصف 0.5

الذي تقوم بتمثيله بالتمثيل الثنائي بالشكل 0.101 لأنه كما تعلم 5d = 101b

لذلك انتبه إلى هذه النقطة في البداية, تابع الآن في الأمثلة :happy:

Do as I say, not as I do

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

#17

جزاك الله خيرا على التوضيح

اقتباس
5d = 101b

لكن هل تقصد بـ 5d :

01011101

و 101b

0001000000011011

؟ أم انا حولتها خطأ ؟

اقتباس
يعني ازاحة 1 إلى اليمين بمقدار 1 تعني قسمته على 2 بالتالي الناتج يكون نصف والنصف 0.5

الذي تقوم بتمثيله بالتمثيل الثنائي بالشكل 0.101 لأنه كما تعلم 5d = 101b

معقدة شوية

انا كما ذكرت , عرفت SHL , وهي إزاحة 1 إلى اليسار

و SHR أقوم بعمل قسمة مثل هذه :

اقتباس
34 / 2 = 17 والباقي 0

17 / 2 = 8 والباقي 1

8 / 2 = 4 والباقي 0

4 / 2 = 2 والباقي 0

2 / 2 = 1 والباقي 0

1 / 2 = 1 والباقي 1

يعني المثال اللي انا ذكرته يصبح :

01001010

0100

100 / 2 = 50

50 / 2 = 25

25 / 2 = 12 والباقي 1

12 / 2 = 6

6 / 2 = 3

3 / 2 = 1 والباقي 1

1 / 2 = 1 والباقي 1

1010

1010 / 2 = 505

505 / 2 = 252 والباقي 1

252 / 2 = 126

126 / 2 = 63

63 / 2 = 32 والباقي 1

32 / 2 = 16

16 / 2 = 8

8 / 2 = 4

4 / 2 = 2

2 / 2 = 1

1 / 2 = 1 والباقي 1

يصبح كله :

001001101001000001

يعني SHR على 01001010 =

001001101001000001

؟؟؟

هل هذا صحيح أستاذ X :lol:

اقتباس
If A is success in life, then A equals x plus y plus z. Work is x; y is play; and z is keeping your mouth shut

Albert Einstein

مدخل إلى برمجة وتصميم الألعاب : كيف أبدأ ؟

#18
Ala2 VB كتب:
لكن هل تقصد بـ 5d :

01011101

و 101b

0001000000011011

؟ أم انا حولتها خطأ ؟

5d = 5 decimal

101b = 101 binary

الحرف الأخير فقط يأتي ليبين نظام العد فقط.

5d = 5D مجازاً لكن يفضل استخدام الحروف الصغيرة كي لا يتم الخلط بين الثانية والنظام الست عشري, لذلك يعمد إلى وضع h في نهاية 5Dh للتوضيح على انها ست عشري.

--

ازاحة أي عدد إلى اليمين بمقدار x يعني قسمته على 2 مرفوع إلى هذا المقدار

ازاحة مثلا 45 الى اليمين بمقدار 4 تعني قسمته على 24

اقتباس
انا كما ذكرت , عرفت SHL , وهي إزاحة 1 إلى اليسار

SHL هي ازاحة لليسار بدون أن تقوم بتحديد مقدار الازاحة لانها متغيرة.

أما بخصوص باقي ما ذكرت, ألا تلاحظ معي أنك تقوم بتقسيم عدد بصيغته الثنائية على عدد بصيغة عشرية؟

there is no such thing as "2" in binary ;)

Do as I say, not as I do

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

#19

نعم ,

يبدو أني لخبطت ! :lol:

اقتباس
ازاحة مثلا 45 الى اليمين بمقدار 4 تعني قسمته على 24

يعني 8125.SHR 45 = 45 / 16 = 2

؟؟؟؟

طيب . آخر حاجة

ممكن شرح تفصيلي , لكيفية عمل SHR و SHL على

0000001

0001000

0010100

عشان المعلومة تثبت بس

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

اقتباس
If A is success in life, then A equals x plus y plus z. Work is x; y is play; and z is keeping your mouth shut

Albert Einstein

مدخل إلى برمجة وتصميم الألعاب : كيف أبدأ ؟

#20

SHL 0000001 by 1 = 0000010

SHR 0000001 by 1 = 0000000.101

SHL 0001000 by 1 = 0010000

SHR 0001000 by 1 = 0000100

SHL 0010100 by 1 = 0101000

SHR 0010100 by 1 = 0001010

Do as I say, not as I do

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

#21

جزاك الله خيرا أخي , تعبتك معي كثيرا

ولكن :

اقتباس
SHR 0000001 by 1 = 0000000.101

أليست المفروض تكون 000000.1 ؟

اقتباس
If A is success in life, then A equals x plus y plus z. Work is x; y is play; and z is keeping your mouth shut

Albert Einstein

مدخل إلى برمجة وتصميم الألعاب : كيف أبدأ ؟

#22
Xacker كتب:

SHR 0000001 by 1 = 0000000.101

خطأ ، النتيجة صفر

 00000001 SHR 1 = 00000000

عند الازاحة من اليمين بواحد نحذف اول عدد من اليمين ونظيف صفر من الشمال

d4baa0.gif
#23

هل الإزاحة إلى اليمين محدودة أخ محمد؟

لم أجد ما يؤكد هذا الأمر أو ينفيه ولا أستطيع الاعتماد على آلة حاسبة مبرمجة لهذا الغرض لأني لا أضمن مدى دقتها وتوسعها في الإجابة, لو تملك شئ ملموس فهلا تتفضل بطرحه للإطلاع.

تم تعديل هذه المشاركة بواسطة Xacker في 10 أبريل 2008 في 11:25

Do as I say, not as I do

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

#24

البت الخارج Shifted out يتم يحميله في الـcarry flag

mov eax, dword ptr ds:[0xffdf0308]

jmp dword ptr [eax+0xfc]

#25

هذا معروف GM, لكن بعد ان يتم تحميله في الـ CF والذي سيكون 1 في هذه الحالة يبقى 0 في المسجل مثلاً

بالتالي SHR محدودة عندما تصل للصفر سيكون الـ CF والـ ZF مساوية للـ 1

أليس هذا ما تقوله؟

Do as I say, not as I do

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

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

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

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

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

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