بسم الله الرحمن الرحيم
السلام عليكم شباب التجميع
حاليا انا اقرأ كتابا عن البنية التحتية للريجستري
ولكن واجهتني مشكلة ,
ما معنى قوله :
"أقنعة البتات" ؟
وما معنى :
العدد 12 عدد عشري
والعدد 12×0 عدد سداسي عشري
:wacko: ؟
وجزاكم الله خيرا
بسم الله الرحمن الرحيم
السلام عليكم شباب التجميع
حاليا انا اقرأ كتابا عن البنية التحتية للريجستري
ولكن واجهتني مشكلة ,
ما معنى قوله :
"أقنعة البتات" ؟
وما معنى :
العدد 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
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)... هل الفكرة واضحة؟
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
اقتباسفقط يقول لك كل ما يسبقه 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
ابحث عن 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
شكر على الموقع أخي كروكو
وانا عرفت 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
لا أجد أحسن من كلام ويكيبيديا:
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
القناع شئ تستخدمه ليست قيمة معينة.

[وسط].
[/وسط]
السلام عليكم,
مرة أخرى بصورة أوضح إن شاء الله,
لنفرض لديك الرقم 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) سيكون الناتج عبارة عن 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
شكرا على التوضيح أخي 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
نعم صحيح القناع هو كما ذكرت.
فيما يتعلق بعمليات الإزاحة فهي عمليات تنفذ على مستوى البت أيضا.
نأخذ 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
ما سيحدث هو التالي
5d = 00000101b
shift left 101 bits to the left by 1, to the most significant bits, filling least significant bits with zeros
00001010b = 10d
انظر الى البتات كيف تم ازاحتها خانة اليسار وتم وضع صفر في الخانة في اقصى اليمين
مثال آخر
7d = 00000111b
shift to most significant bits by "1"
00001110b = 14d
انظر يبدو أن الازاحة الى اليسار بمقدار واحد تكافئ ضرب العدد بـ 2 ؟؟
هل هذا صحيح؟
طيب لو أزحته بمقدار 2 هل يكون ضرب بمقدار 3 ؟؟
لا, فعلياً هو يكافئ الضرب بمضاعفات الـ 2
طالما الازاحة بمقدار 1 تعني الضرب بـ 2
الازاحة بمقدار 2 تعني الضرب بمربع المقدار 2 أي 4
الازاحة بمقدار 3 تعني الضرب بمكعب المقدار 2 أي 8
وهكذا
لنعد الى التفاصيل الآن
خذ ورقة وقلم
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
جزاك الله خيرا أخي 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
اوكيه, 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
انا كان قصدي حضرتك تشرحلي العمليات على هذا المثال
لكن لا مشكلة من تشغيل الدماغ قليلا :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
الأولى صحيحة, الثانية...
امممم..
كل الأرقام العشرية ذات الفاصلة يمكن تمثيلها بالصورة الثنائية لكن مع الانتباه إلى أمر مهم أوضحه في المثال التالي
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
جزاك الله خيرا على التوضيح
اقتباس5d = 101b
لكن هل تقصد بـ 5d :
01011101
و 101b
0001000000011011
؟ أم انا حولتها خطأ ؟
اقتباسيعني ازاحة 1 إلى اليمين بمقدار 1 تعني قسمته على 2 بالتالي الناتج يكون نصف والنصف 0.5الذي تقوم بتمثيله بالتمثيل الثنائي بالشكل 0.101 لأنه كما تعلم 5d = 101b
معقدة شوية
انا كما ذكرت , عرفت SHL , وهي إزاحة 1 إلى اليسار
و SHR أقوم بعمل قسمة مثل هذه :
اقتباس34 / 2 = 17 والباقي 017 / 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
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
نعم ,
يبدو أني لخبطت ! :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
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
جزاك الله خيرا أخي , تعبتك معي كثيرا
ولكن :
اقتباس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
Xacker كتب:SHR 0000001 by 1 = 0000000.101
خطأ ، النتيجة صفر
00000001 SHR 1 = 00000000
عند الازاحة من اليمين بواحد نحذف اول عدد من اليمين ونظيف صفر من الشمال
هل الإزاحة إلى اليمين محدودة أخ محمد؟
لم أجد ما يؤكد هذا الأمر أو ينفيه ولا أستطيع الاعتماد على آلة حاسبة مبرمجة لهذا الغرض لأني لا أضمن مدى دقتها وتوسعها في الإجابة, لو تملك شئ ملموس فهلا تتفضل بطرحه للإطلاع.
تم تعديل هذه المشاركة بواسطة 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
البت الخارج Shifted out يتم يحميله في الـcarry flag
mov eax, dword ptr ds:[0xffdf0308]
jmp dword ptr [eax+0xfc]
هذا معروف 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
المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية
جارٍ التحقق من المتواجدين…