مضى على الشبكة و يوم من العطاء.

4 # Linux mips # Big Endian vs. Little Endian: A Byte-Sized Explanation

ErrorBinary

./عضو
>:: v1p ::<

السمعة:

بسم الله الرحمن الرحيم
السلام عليكم ورحمة الله

سنتحدث في هذا الموضوع عن الفرق بين mips و mipsel

لينكس ميبس موجود حاليًا في جميع الأشياء المُحيطة بنا وأغلبها قابل للاتصال بالشبكات , من الدرونات و الغسالة و الثلاجة و السيارة و التلفاز و كاميرات المراقبة وصولًا للدبابات و الأسلحة المُتطورة, ويرجع ذلك لمرونته في التحكم بالرقاقات الصناعية المُختلفة.

حديثنا اليوم حول مفهوم مهم جدًا نستنبطه من سؤالنا في الدرس السابق: ما الفرق بين MIPS و MIPSEL ؟

كود:
MIPS : mips big endial
MIPSEL: mips litle endian

هنا سوف ندخل على مفهوم مهم جدًا في علوم الحوسبة وهو : endianess, وهي ببساطة الطريقة التي بها سنقوم بترتيب octets لكتابة الملفات.لدينا طريقتين Big-endian و Little-endian

أعتقد الصورة تُلخص الفكرة والموضوع برمّته:


Screenshot from 2024-07-02 06-33-32.webp

لفهم المبدأ لازم نتعرف على مفهومين جديدن MSB و LSB. للأسف لا أمتلك ترجمة عربية لهذه المصطلحات سأستعملها كما هي:
  • The least significant byte (LSB) | النهاية الصغيرة
كود:
The LSB is the right-most bit in a string, أقصى اليمين في السلسلة،
it is called that because it has the least effect on the value of the binary number
In Little Endian, the LSB of the data is placed at the byte with the lowest address.
  • The most significant byte (MSB) | النهاية الكبيرة
كود:
The MSB the left-most byte is the MSB that carries the greatest numerical value
In Big Endian, the MSB of the data is placed at the byte with the lowest address.
البايت الموجود في أقصى اليسار هو الذي يحمل القيمة العددية الأكبر.

مثال توضيحي: تمثيل للعدد 19911994
Screenshot from 2024-07-02 07-11-24.webp

وبالتالي يكون توزيع الحجم على الشكل التالي:

images.webp

تخيل أن لديك رقمًا مثل 0x12345678، والذي يبلغ طوله 32 بت. تحتاج إلى تخزين هذا الرقم في الذاكرة، والتي يتم تنظيمها بالبايت. ولكن كيف يمكنك تخزينها عبر بايتات مُتعددة؟ هذا هو المكان الذي تلعب فيه مفاهيم النهاية الكبيرة والنهاية الصغيرة.
كود:
Imagine you have a number like 0x12345678, which is 32 bits long.
You need to store this number in memory, which is organized in bytes.
But how do you store it across multiple bytes?
This is where the concepts of big endian and little endian come into play.
  • Endian كبيرة: فكر في الأمر على أنه البايت الأكثر أهمية أولاً. يتم تخزين البايت الأكثر أهمية (MSB) للرقم، في هذه الحالة، 0x12، في عنوان الذاكرة الأدنى. وتتبع البايتات الأخرى ترتيبًا تنازليًا من حيث الأهمية.
كود:
**Big Endian:**

* **Think of it as "most significant byte first".**  The most significant byte (MSB) of the number, in this case, 0x12, is stored at the lowest memory address. The other bytes follow in descending order of significance.
* **Example:** 0x12345678 would be stored as:
    * **Memory Address:** 0x1000: 0x12
    * **Memory Address:** 0x1001: 0x34
    * **Memory Address:** 0x1002: 0x56
    * **Memory Address:** 0x1003: 0x78

  • Endian الصغير: فكر في الأمر على أنه البايت الأقل أهمية أولاً. يتم تخزين البايت الأقل أهمية (LSB)، في هذه الحالة، 0x78، في عنوان الذاكرة الأدنى. وتتبع البايتات الأخرى ترتيبًا تصاعديًا للأهمية.
كود:
**Little Endian:**

* **Think of it as "least significant byte first".** The least significant byte (LSB), in this case, 0x78, is stored at the lowest memory address. The other bytes follow in ascending order of significance.
* **Example:** 0x12345678 would be stored as:
    * **Memory Address:** 0x1000: 0x78
    * **Memory Address:** 0x1001: 0x56
    * **Memory Address:** 0x1002: 0x34
    * **Memory Address:** 0x1003: 0x12

أهمية Endianness:
  1. تفسير البيانات: إذا قرأت رقمًا مخزنًا في الذاكرة دون معرفة قيمة النهاية، فقد تحصل على قيمة خاطئة.
  2. التوافق عبر الأنظمة الأساسية: تستخدم المعالجات والأنظمة المختلفة اصطلاحات endianness مختلفة. وهذا يمكن أن يؤدي إلى مشاكل عند تبادل البيانات بينهما.
  3. بروتوكولات الشبكة: غالبًا ما تحدد بروتوكولات الشبكة نهاية معينة لضمان تفسير البيانات بشكل صحيح بواسطة أنظمة مختلفة.

فكر في هذا السيناريو:
تخيل أن لديك برنامجًا مكتوبًا لجهاز ذو نهاية كبيرة [Big Endian] يرسل قيمة 0x12345678 عبر الشبكة إلى جهاز ذو نهاية صغيرة [Little Endian]. تتلقى الآلة ذات النهاية الصغيرة البيانات بنفس الترتيب الذي تم إرسالها به، وهو تمثيل النهاية الكبيرة. عندما يحاول تفسير البيانات، فإنه سيقرأها على أنها 0x78563412، وهي مختلفة عن القيمة المقصودة. يمكن أن يؤدي هذا إلى حدوث أخطاء وتلف البيانات.

يشير Endianness إلى الترتيب الذي يتم به تخزين البايتات في الذاكرة. يقوم [Big Endian] بتخزين البايت الأكثر أهمية أولاً، بينما يقوم [Little Endian] بتخزين البايت الأقل أهمية أولاً. يعد فهم endianness أمرًا بالغ الأهمية لتفسير البيانات وضمان التوافق بين الأنظمة والأنظمة الأساسية المختلفة.


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

دعواتكم شباب
نهاركم مبارك و
في رحاب الله
 
التعديل الأخير بواسطة المشرف:

آخر المشاركات

عودة
أعلى