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

عمليه الجمع والطرح بنظام hex

مغلقمُجاب
بدأه مبرمجة مبتدئة2 في 16 مارس 2014 · 3 رد · 11,313 مشاهدة · في لغة Assembly لأنظمة 16, 32, 64 بت
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ورحمه الله

 

اريد طريقه الجمع والطرح لنطام الهكل دسميل 

 

ولكم جزيل الشكر 

#2

نظام الجمع و الطرح بنظام hex يماثل الجمع و الطرح بنظام dec الفرق انه فى النظام hex يوجد لدينا 16 عدد قبل الوصول للرقم 10 و فى النظام dec يوجد لدينا 10 أعداد قبل الوصول للرقم 10. المعالج يراهم بصيغة ثنائية لذا بالنسبة له الأمر لا خلاف فيه:

MOV EAX, 9 ; EAX have decimal\hexadecimal value 9
ADD EAX, 1 ; EAX have decimal value of 10 or hexadecimal value of 0xA

و الله ولي التوفيق

مدونتي: C++ Tips and Tricks

#3

مافهمت عليك

طيب عندي مثلا 8000h-0001h= 0111 1111 1111 1111

كيف طلع لنا الناتج بعمليه الطرح ؟

 

وهنا بعد كيف اسوي عمليه الجمع 80+80=؟؟

#4 أفضل إجابة

كل خانه فى النظام العشرى تحتوى على الأرقام من 0 و حتى 9 و عددهم 10 و لهذا سمي بالنظام العشرىن و بالمثل مع النظام السداسي عشرى حيث كل خانه تحتوى على الأرقام من 0 و 9 و أيضا الحروف a-f أو A-F و و اللذين يمثلوا الأرقام 1010- 1510 فى النظام العشرى.

 

لنفترض اننا نريد جمع الرقم 616 مع الرقم 916، لأنه فى النظام العشرى اكبر رقم هو 9 لذا سنقوم بإضافة 1 واحد خانة العشرات و الباقي 5 توضع فى خانة الأحاد ليصبح الناتج 1510، أما فى النظام السداسي عشرى سنقوم بإكمال العد حيث الخانه الواحدة تحتمل 16 قيمة و بالتالي:

0 1 2 3 4 5 6 7 8 9 A B C D E F
------------------9
                  ------------6

كما فى الشكل السابق القيمة 9 قمنا بإضافة 6 إليها و كانت النتيجه الحرف F16.

 

لنأخذ مثال أكثر تعقيدا، لنفترض اننا نريد إضافة الرقم 916 للقيمة CA16:

A + 9 = 1[3]C + 1 = DCA + 9 = D3

فى المثال السابق عند جمع الرقم A16 مع الرقم 916 تنتج لنا القيمة 1316 و لأننا نجمع خانة الاحاد فإن الرقم 316 سيظل فى مكانه و سيتم أخذ الرقم 116 لإضافته على خانة العشرات و التى تحتوى على الرقم C16 و بالجمع ينتج لنا الرقم D16 لتصبح النتيجه النهائية D316.

 

إذا كانت الأمثله لم تصل لك، يمكنك فهم عملية الجمع بأنها تتم كل خانه على حدى و تظل عملية الجمع مستمرة حتى يصبح لدينا رقم واحد فقط، مثلا لنجمع الرقم 916 على الرقم CA16 مرة أخرى:

 C   A 0   9 -- -- C  13 1   3 C   0 -- -- D   3

عملية الطرح تتم عكس عملية الجمع، و لنذكر المثال الأول حيث أردنا جمع 616 على الرقم 916 و هذا جعلنا نتحرك بدءا من الرقم 916 لليمين بمقدار 616 و هذا ما أوصلنا للرقم F16، فى عملية الطرح سنتحرك لليسار بدلا من اليمين و بالتالي عند طرح 616 من 916 ستصبح النتيجه:

0 1 2 3 4 5 6 7 8 9 A B C D E F
------------------9
      6------------

عندما تحركنا لليسار أصبحت النتيجه 316.

 

إذا كانت القيمه المطروح منها أكبر من قيمة الطرح حينها نحتاج للإقتراض من الخانه التى تلى الحالية و إنقاض قيمة تلك الخانه بواحد، مثلا لطرح الرقم F16 من الرقم 1316 كالتالي:

0 1 2 3 4 5 6 7 8 9 A B C D E F [|] 0 1 2 3 4 5 6 7 8 9 A B C D E F
------------------------------------------13
        F----------------------------------

النتيجه كانت 4، لاحظ انه تم زيادة الأعداد بمثلهم و ذلك لأن إقتراضنا من خانة العشرات تعنى الأعداد من 016 و حتى F16 لخانة الاحاد و بعد عملية الإقتراض تم إنقاص خانة العشرات بواحد و حيث أن قيمتها واحد فأصبحت المحصلة فى خانة العشرات صفر.

 

سيساعدك كثيرا إن كان لك دراية على كيفية إتمام عملية الجمع و الطرح على الورق للنظام العشرى حيث ان نفس العملية مماثلة لكل أنظمة العد الباقية.

 

بالنسبة للقيم التى وضعتيها ساتركها لك لتحاول حلها.

 

 

و الله ولي التوفيق

تم تعديل هذه المشاركة بواسطة C++er في 17 مارس 2014 في 22:21

مدونتي: C++ Tips and Tricks

هذا الموضوع مغلق.

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