ترتيب البايتات

في مجال الحوسبة ، يُشير مصطلح "ترتيب البايتات" إلى ترتيب نقل البايتات ضمن نوع بيانات كلمة واحدة عبر وسيط اتصال البيانات أو عند الوصول إليها في ذاكرة الحاسوب ، مع مراعاة أهمية البايتات فقط مقارنةً بأسبقيتها. ويُعبّر عن ترتيب البايتات بشكل أساسي بمصطلحي "ترتيب البايتات الكبير" ( BE ) و "ترتيب البايتات الصغير " ( LE ).
تخزن الحواسيب المعلومات في مجموعات ثنائية بأحجام مختلفة . تُخصص لكل مجموعة رقم يُسمى عنوانها ، يستخدمه الحاسوب للوصول إلى تلك البيانات. في معظم الحواسيب الحديثة، يبلغ طول أصغر مجموعة بيانات ذات عنوان ثمانية بتات، وتُسمى بايت . تتكون المجموعات الأكبر من بايتين أو أكثر؛ على سبيل المثال، غالبًا ما تحتوي الكلمة على 32 بتًا أو 64 بتًا .
هناك طريقتان رئيسيتان لترقيم البايتات الفردية في مجموعة أكبر من البيانات، بدءًا من أحد طرفيها. في نظام "الترتيب الكبير" (Big-Endian)، يُخزَّن البايت الأكثر أهمية في الكلمة عند أصغر عنوان ذاكرة ، والبايت الأقل أهمية عند أكبر عنوان. أما في نظام "الترتيب الصغير" (Little-Endian)، فيُخزَّن البايت الأقل أهمية عند أصغر عنوان. [ 1 ] [ 2 ] [ 3 ] ومن بين هاتين الطريقتين، يُعدّ نظام "الترتيب الكبير" أقرب إلى طريقة كتابة الأرقام من اليسار إلى اليمين في اللغة الإنجليزية، حيث يُكتب الرقم الأكثر أهمية أولًا، مع مقارنة الأرقام بالبايتات، وبافتراض أن العناوين تزداد من اليسار إلى اليمين.
يُستخدم كلا نوعي ترتيب البايتات على نطاق واسع في هندسة الإلكترونيات الرقمية. غالبًا ما يكون اختيار ترتيب البايتات في التصميم الجديد عشوائيًا، ولكن التحديثات والمراجعات التقنية اللاحقة تُبقي على الترتيب الحالي للحفاظ على التوافق مع الإصدارات السابقة . يُعدّ ترتيب البايتات الكبير هو الترتيب السائد في بروتوكولات الشبكات، كما هو الحال في مجموعة بروتوكولات الإنترنت ، حيث يُشار إليه بترتيب الشبكة ، ويتم فيه إرسال البايت الأكثر أهمية أولًا. في المقابل، يُعدّ ترتيب البايتات الصغير هو الترتيب السائد في معمارية المعالجات ( x86 ، ومعظم تطبيقات ARM ، وتطبيقات RISC-V الأساسية ) والذاكرة المرتبطة بها. يمكن لتنسيقات الملفات استخدام أيٍّ من الترتيبين؛ وتستخدم بعض التنسيقات مزيجًا من كليهما أو تحتوي على مؤشر يُبيّن الترتيب المُستخدم في جميع أنحاء الملف. [ 4 ]
تُعدّ خاصية الترتيب الثنائي للبايتات ميزةً تدعمها العديد من بنى الحواسيب التي تتميز بإمكانية تبديل ترتيب البايتات في عمليات جلب البيانات وتخزينها أو في عمليات جلب التعليمات. وتُعرف الترتيبات الأخرى عمومًا باسم الترتيب المتوسط للبايتات أو الترتيب المختلط للبايتات . [ 5 ] [ 6 ] [ 7 ] [ 8 ]
أصل

يُعبّر عن ترتيب البايتات بشكل أساسي بمصطلحي "البايتات الكبيرة" (BE) و "البايتات الصغيرة" (LE)، وهما مصطلحان قدّمهما داني كوهين في مذكرة تجريبية على الإنترنت نُشرت عام 1980. [ 9 ] استعار كوهين هذين المصطلحين من حلقة عبثية في رواية " رحلات جاليفر" الساخرة لجوناثان سويفت . في أرض ليليبوت الخيالية ، ينقسم العلماء بشدة في نقاش لا ينتهي حول الطريقة الصحيحة لكسر قشرة البيضة المسلوقة . يُطلق على من يُصرّون على كسر الطرف الكبير من القشرة اسم "البايتات الكبيرة"، بينما يُطلق على خصومهم الذين يكسرون الطرف الآخر اسم "البايتات الصغيرة". [ 10 ] [ 11 ]
صفات
تتكون ذاكرة الحاسوب من سلسلة من خلايا التخزين (أصغر وحدات قابلة للعنونة )؛ في الأجهزة التي تدعم عنونة البايت ، تُسمى هذه الوحدات بايتات . يتم تحديد كل بايت والوصول إليه في الأجهزة والبرامج بواسطة عنوانه في الذاكرة . إذا كان العدد الإجمالي للبايتات في الذاكرة هو n ، فإن العناوين تُرقّم من 0 إلى n - 1.
تستخدم برامج الحاسوب غالبًا هياكل بيانات أو حقولًا قد تحتوي على بيانات أكثر مما يمكن تخزينه في بايت واحد. في سياق هذه المقالة، حيث لا يمكن أن يكون نوعها معقدًا بشكل تعسفي، يتكون الحقل من سلسلة متتالية من البايتات ويمثل قيمة بيانات بسيطة يمكن، نظريًا على الأقل، معالجتها بواسطة تعليمة واحدة للأجهزة. في معظم الأنظمة، يكون عنوان قيمة البيانات البسيطة متعددة البايتات هو عنوان البايت الأول (البايت ذو العنوان الأدنى). توجد استثناءات لهذه القاعدة - على سبيل المثال، تُعنون تعليمة الجمع (Add) في معالج IBM 1401 الحقول ذات الأطوال المتغيرة في موضعها الأدنى (الأعلى عنوانًا)، حيث يتم تحديد أطوالها بواسطة علامة كلمة مُعينة في موضعها الأعلى (الأدنى عنوانًا). عند تنفيذ عملية مثل الجمع، يبدأ المعالج من المواضع الأدنى عند العناوين الأعلى للحقلين وينتقل تدريجيًا إلى المواضع الأعلى. [ 12 ]
من السمات المهمة الأخرى للبايت كجزء من حقل ما ، أهميته . تلعب هذه السمات لأجزاء الحقل دورًا هامًا في تسلسل وصول مكونات الحاسوب إلى البايتات، وتحديدًا: من خلال الخوارزميات منخفضة المستوى التي تساهم في نتائج تعليمات الحاسوب.
أرقام
تُعدّ أنظمة الأعداد الموضعية (غالبًا الأساس 2، أو نادرًا الأساس 10) الطريقة السائدة لتمثيل البيانات العددية الصحيحة ومعالجتها بواسطة الحواسيب. في صورتها النقية، تُطبّق هذه الطريقة على الأعداد الصحيحة غير السالبة متوسطة الحجم، مثل نوع البيانات C. unsignedفي هذا النظام العددي، لا تُحدّد قيمة الرقم المُساهم في العدد الكلي بقيمته كرقم منفرد فحسب، بل أيضًا بموقعه في العدد الكلي، والذي يُسمى دلالته. يُمكن ربط هذه المواقع بالذاكرة بطريقتين رئيسيتين: [ 13 ]
- انخفاض الأهمية العددية مع زيادة عناوين الذاكرة، والمعروف باسم نظام بيج-إنديان و
- زيادة الأهمية العددية مع زيادة عناوين الذاكرة، والمعروفة باسم little-endian .
في نظامي big-endian و little-endian ، تكون النهاية هي الطرفية حيث يتم كتابة الأهمية الكبيرة أو الصغيرة في الموقع المفهرس بواسطة عنوان الذاكرة الأدنى.
نص
عند مقارنة سلاسل الأحرف (النصوص) مع بعضها، مثلاً لدعم آلية معينة كالفرز ، يُجرى ذلك غالباً بشكل معجمي، حيث يمتلك كل حرف قيمة موضعية. تعني المقارنة المعجمية في أغلب الأحيان أن الحرف الأول له الأولوية، كما هو الحال في دليل الهاتف. معظم الأجهزة التي تستطيع القيام بذلك باستخدام تعليمة واحدة تستخدم نظام Big-Endian أو على الأقل نظام Mixed-Endian.
يتم تمثيل الأرقام الصحيحة المكتوبة كنص دائمًا بالرقم الأكثر أهمية أولاً في الذاكرة، وهو ما يشبه نظام big-endian، بغض النظر عن اتجاه النص .
معالجة البايت
عند طباعة بايتات الذاكرة بالتسلسل من اليسار إلى اليمين (كما في تفريغ البيانات الست عشري )، فإن تمثيل الأعداد الصحيحة بنظام little-endian يتناقص فيه ترتيب البايتات من اليمين إلى اليسار. بعبارة أخرى، يظهر التمثيل معكوسًا عند عرضه، وهو ما قد يبدو غير بديهي.
يظهر هذا السلوك، على سبيل المثال، في تقنية FourCC أو تقنيات مشابهة تتضمن تجميع الأحرف في عدد صحيح، بحيث يصبح سلسلة من أحرف محددة في الذاكرة. على سبيل المثال، لنأخذ السلسلة "JOHN" المخزنة بنظام ASCII الست عشري . في الأجهزة ذات نظام big-endian، تظهر القيمة من اليسار إلى اليمين، متوافقةً مع ترتيب السلسلة الصحيح لقراءة النتيجة ("JOH N"). أما في الأجهزة ذات نظام little-endian، فستظهر "NHO J". وتزيد الأجهزة ذات نظام middle-endian الأمر تعقيدًا؛ فعلى سبيل المثال، في جهاز PDP-11 ، يُخزن عدد عشري 32 بت على شكل كلمتين من 16 بت "JO" و"HN" بنظام big-endian، بينما تُخزن الأحرف في الكلمات الـ 16 بت بنظام little-endian، مما ينتج عنه "OJN H". [ 14 ]
تبديل البايتات
تتضمن عملية تبديل البايتات إعادة ترتيب البايتات لتغيير ترتيب البايتات. توفر العديد من المترجمات تعليمات مدمجة يُحتمل أن تُترجم إلى تعليمات معالج أصلية ( مثل bswap/ ) . تشمل واجهات البرامج الخاصة بالتبديل ما يلي:movbe__builtin_bswap32
- وظائف ترتيب البايتات القياسية للشبكة (من/إلى BE، حتى 32 بت). [ 15 ] يحتوي نظام التشغيل Windows على امتداد 64 بت في
winsock2.h. - وظائف BSD و Glibc
endian.h(من/إلى BE و LE، حتى 64 بت). [ 16 ] - وحدات الماكرو لنظام macOS
OSByteOrder.h(من/إلى BE وLE، حتى 64 بت). - الدالة
std::byteswapفي C++23 . [ 17 ]
توفر بعض مجموعات تعليمات وحدة المعالجة المركزية دعمًا أصليًا لتبديل البايتات endian، مثل bswap[ 18 ] ( x86 - 486 وما بعده، i960 - i960Jx وما بعده [ 19 ] )، و rev[ 20 ] ( ARMv6 وما بعده).
تتضمن بعض المترجمات إمكانيات مدمجة لتبديل البايتات. على سبيل المثال، يدعم كل من GNU Fortran ومترجم Intel Fortran المُحدِّد غير القياسي CONVERTعند فتح ملف، على سبيل المثال: [ 21 ] [ 22 ] . وتوفر مترجمات أخرى خيارات لتوليد كود يُفعِّل التحويل بشكل عام لجميع عمليات إدخال/إخراج الملفات. وهذا يسمح بإعادة استخدام الكود على نظام ذي ترتيب بايتات معاكس دون الحاجة إلى تعديله.OPEN(unit,CONVERT='BIG_ENDIAN',...)
الاعتبارات
تبسيط الوصول إلى جزء من الحقل
في معظم الأنظمة، يكون عنوان القيمة متعددة البايتات هو عنوان البايت الأول منها (البايت ذو العنوان الأدنى)؛ وتتميز أنظمة الترتيب الصغير (little-endian) من هذا النوع بخاصية أنه بالنسبة لقيم البيانات الصغيرة بما يكفي، يمكن قراءة القيمة نفسها من الذاكرة بأطوال مختلفة دون استخدام عناوين مختلفة (حتى عند فرض قيود على المحاذاة ). على سبيل المثال، يمكن قراءة موقع ذاكرة 32 بت يحتوي على بيانات 4A 00 00 00من العنوان نفسه كما لو كان 8 بت (القيمة = 4A)، أو 16 بت (004A)، أو 24 بت (00004A)، أو 32 بت (0000004A)، حيث تحتفظ جميعها بنفس القيمة العددية. على الرغم من أن خاصية الترتيب الصغير هذه نادرًا ما تُستخدم مباشرةً من قِبل مبرمجي البرامج عالية المستوى، إلا أنها تُستخدم أحيانًا من قِبل مُحسِّني التعليمات البرمجية، وكذلك من قِبل مبرمجي لغة التجميع . في حين أن لغة C++ لا تسمح بذلك، فإن هذا النوع من التعليمات البرمجية المُعرَّفة حسب النوع مسموح به باعتباره "مُعرَّفًا حسب التنفيذ" وفقًا لمعيار C11 [ 23 ] ، ويُستخدم بشكل شائع [ 24 ] في التعليمات البرمجية التي تتفاعل مع الأجهزة. [ 25 ]
ترتيب الحساب
تتطلب بعض العمليات في أنظمة الأعداد الموضعية ترتيبًا طبيعيًا أو مفضلًا لتنفيذ خطواتها الأساسية. قد يؤثر هذا الترتيب على أدائها في المعالجات الصغيرة ووحدات التحكم الدقيقة القابلة للعنونة بالبايت . مع ذلك، عادةً ما تسترجع المعالجات عالية الأداء معاملات متعددة البايتات من الذاكرة في نفس الوقت الذي تستغرقه لاسترجاع بايت واحد، لذا لا يتأثر تعقيد الأجهزة بترتيب البايتات.
تبدأ عمليات الجمع والطرح والضرب من خانة الرقم الأقل أهمية، ثم ينتقل الحمل إلى الخانة التالية الأكثر أهمية. في معظم الأنظمة، يكون عنوان القيمة متعددة البايتات هو عنوان البايت الأول (البايت ذو العنوان الأدنى). ويكون تنفيذ هذه العمليات أبسط قليلاً باستخدام أجهزة ذات ترتيب البايتات الصغير (little-endian)، حيث يحتوي هذا البايت الأول على الرقم الأقل أهمية.
تبدأ عمليات المقارنة والقسمة من الرقم الأكثر أهمية، ويتم نقل أي رقم زائد محتمل إلى الأرقام الأقل أهمية اللاحقة. بالنسبة للقيم العددية ذات الطول الثابت (عادةً ما تكون أطوالها 1، 2، 4، 8، 16)، يكون تنفيذ هذه العمليات أبسط قليلاً على أجهزة Big-Endian.
تحتوي بعض المعالجات ذات الترتيب الكبير (مثل IBM System/360 وخلفائها) على تعليمات للأجهزة لمقارنة سلاسل الأحرف ذات الأطوال المختلفة معجميًا .
إن نقل البيانات العادي بواسطة عبارة التخصيص مستقل من حيث المبدأ عن ترتيب البايتات في المعالج.
الأجهزة
تستخدم العديد من المعالجات التاريخية والحالية تمثيل الذاكرة بنظام Big-Endian، إما بشكل حصري أو كخيار تصميمي. يستخدم نظام IBM System/360 نظام Big-Endian، وكذلك الأنظمة اللاحقة له System/370 و ESA/390 و z/Architecture . يستخدم PDP-10 نظام Big-Endian للعنونة في التعليمات الموجهة بالبايت. يستخدم الحاسوب المصغر IBM Series/1 نظام Big-Endian. تستخدم معالجات Motorola 6800/6801 و 6809 وسلسلة 68000 نظام Big-Endian. تشمل البنى التي تعتمد نظام Big-Endian فقط IBM z/Architecture و OpenRISC . مع ذلك، يستخدم الحاسوب المصغر PDP-11 نظام Little-Endian، وكذلك النظام اللاحق له VAX .
استخدم جهاز Datapoint 2200 منطقًا تسلسليًا بسيطًا مع ترتيب البايتات الصغير لتسهيل نقل البيانات . عندما طورت شركة إنتل المعالج الدقيق 8008 لجهاز Datapoint، استخدمت ترتيب البايتات الصغير لضمان التوافق. مع ذلك، ولأن إنتل لم تتمكن من توفير المعالج 8008 في الوقت المحدد، استخدمت Datapoint معالجًا مكافئًا متوسط الحجم ، ولكن تم الاحتفاظ بترتيب البايتات الصغير في معظم تصميمات إنتل، بما في ذلك MCS-48 والمعالج 8086 وخلفائه من معالجات x86 ، بما في ذلك معالجات IA-32 و x86-64 . [ 26 ] [ 27 ] عائلة MOS Technology 6502 (بما في ذلك Western Design Center 65802 و 65C816 )، و Zilog Z80 (بما في ذلك Z180 و eZ80 )، و Altera Nios II ، و Atmel AVR ، و Andes Technology NDS32، و Qualcomm Hexagon ، والعديد من المعالجات وعائلات المعالجات الأخرى هي أيضًا ذات ترتيب البايتات الصغير.
يتوقع معالج Intel 8051 ، على عكس معالجات Intel الأخرى، عناوين 16 بت لـ LJMP و LCALL بتنسيق big-endian؛ ومع ذلك، تخزن تعليمات xCALL عنوان الإرجاع على المكدس بتنسيق little-endian. [ 28 ]
ثنائية النهاية
تتضمن بعض بنى مجموعات التعليمات إعدادًا يسمح بتغيير ترتيب البايتات في جلب البيانات وتخزينها، أو جلب التعليمات، أو كليهما؛ وتُعرف هذه البنى باسم "ثنائية البايتات" . تشمل البنى التي تدعم تغيير ترتيب البايتات: PowerPC / Power ISA ، وSPARC V9، و ARM الإصدار 3 وما فوق، و DEC Alpha ، وMIPS ، و Intel i860 ، و PA-RISC ، و SuperH SH-4 ، و IA-64 ، و C-Sky ، و RISC-V . تُحسّن هذه الميزة الأداء أو تُبسّط منطق أجهزة وبرامج الشبكات. يُشير مصطلح " ثنائي البايتات" ، عند استخدامه لوصف الأجهزة، إلى قدرة الجهاز على معالجة البيانات أو تمريرها بأي من تنسيقي البايتات.
يمكن تبديل العديد من هذه البنى عبر البرامج لتعتمد افتراضيًا على تنسيق endian محدد (يتم ذلك عادةً عند بدء تشغيل الكمبيوتر)؛ ومع ذلك، في بعض الأنظمة، يتم تحديد endianness الافتراضي بواسطة الأجهزة الموجودة على اللوحة الأم ولا يمكن تغييره عبر البرامج (على سبيل المثال، Alpha، الذي يعمل فقط في وضع big-endian على Cray T3E ).
يعمل نظاما التشغيل IBM AIX و IBM i بنظام big-endian على معالجات Power ISA ثنائية الباينتية؛ وكان نظام Linux يعمل في الأصل بنظام big-endian، ولكن بحلول عام 2019، انتقلت IBM إلى نظام little-endian لنظام Linux لتسهيل نقل برامج Linux من معالجات x86 إلى معالجات Power. [ 29 ] [ 30 ] لا يوجد تطبيق ذو صلة بنظام little-endian على معالجات SPARC، حيث يعمل كل من Oracle Solaris وLinux بنظام big-endian على أنظمة SPARC ثنائية الباينتية، ويمكن اعتبارهما عمليًا بنظام big-endian. كذلك، لا يوجد تطبيق ذو صلة بنظام big-endian على معالجات ARM وC-Sky وRISC-V، ويمكن اعتبارها عمليًا بنظام little-endian.
يشير مصطلح "ثنائي الباين" بشكل أساسي إلى كيفية تعامل المعالج مع عمليات الوصول إلى البيانات. قد تفترض عمليات الوصول إلى التعليمات (جلب كلمات التعليمات) على معالج معين ترتيبًا ثابتًا للبايتات، حتى لو كانت عمليات الوصول إلى البيانات ثنائية الباين بالكامل، على الرغم من أن هذا ليس هو الحال دائمًا، كما هو الحال في وحدة المعالجة المركزية إيتانيوم من إنتل المبنية على معمارية IA-64 ، والتي تسمح بكلا الترتيبين.
تتطلب بعض وحدات المعالجة المركزية ثنائية البايتات اسميًا مساعدة من اللوحة الأم لتغيير ترتيب البايتات بالكامل. على سبيل المثال، تعمل معالجات PowerPC المكتبية ذات 32 بت في وضع little-endian كمعالجات little-endian من وجهة نظر البرامج المنفذة، ولكنها تتطلب من اللوحة الأم إجراء تبديل 64 بت عبر جميع مسارات البايت الثمانية لضمان تطبيق ترتيب البايتات الصغير على أجهزة الإدخال/الإخراج . في حال عدم وجود هذه الخاصية غير المعتادة في اللوحة الأم، يجب على برنامج تشغيل الجهاز الكتابة إلى عناوين مختلفة لإلغاء التحويل غير المكتمل، كما يجب عليه أيضًا إجراء تبديل بايتات عادي.
تسمح بعض وحدات المعالجة المركزية، مثل العديد من معالجات PowerPC المخصصة للاستخدام المدمج وجميع معالجات SPARC تقريبًا، باختيار ترتيب البايتات لكل صفحة.
تسمح معالجات SPARC منذ أواخر التسعينيات (المعالجات المتوافقة مع SPARC v9) باختيار ترتيب البايتات مع كل تعليمة فردية تقوم بتحميل البيانات من الذاكرة أو تخزينها فيها.
تدعم بنية ARM نمطين من أنماط Big-Endian، يُطلق عليهما BE-8 و BE-32 . [ 31 ] تدعم وحدات المعالجة المركزية حتى ARMv5 نمط BE-32 فقط، أو نمط الكلمة الثابتة. في هذا النمط، يعمل أي وصول طبيعي إلى 32 بت كما في نمط Little-Endian، ولكن يُعاد توجيه الوصول إلى بايت أو كلمة 16 بت إلى العنوان المقابل، ولا يُسمح بالوصول غير المُحاذي. يُقدم ARMv6 نمط BE-8، أو نمط البايت الثابت، حيث يعمل الوصول إلى بايت واحد كما في نمط Little-Endian، ولكن الوصول إلى كلمة 16 بت أو 32 بت أو (بدءًا من ARMv8) 64 بت يؤدي إلى تبديل بايت البيانات. يُبسط هذا الوصول غير المُحاذي للذاكرة، بالإضافة إلى الوصول المُرتبط بالذاكرة إلى السجلات غير 32 بت.
تحتوي العديد من المعالجات على تعليمات لتحويل كلمة في سجل إلى ترتيب البايتات المعاكس، أي أنها تقوم بتبديل ترتيب البايتات في كلمة 16 أو 32 أو 64 بت.
تحتوي معالجات Intel الحديثة ذات بنية x86 و x86-64 على تعليمة MOVBE ( معالجات Intel Core منذ الجيل الرابع، بعد Atom )، [ 32 ] والتي تجلب كلمة بتنسيق big-endian من الذاكرة أو تكتب كلمة في الذاكرة بتنسيق big-endian. بخلاف ذلك، فإن هذه المعالجات تعتمد بشكل كامل على تنسيق little-endian.
توجد أيضاً أجهزة تستخدم تنسيقات مختلفة في أماكن مختلفة. على سبيل المثال، يستخدم مقياس البطارية BQ27421 من شركة Texas Instruments تنسيق little-endian لسجلاته وتنسيق big-endian لذاكرة الوصول العشوائي الخاصة به .
استخدمت معمارية SPARC تاريخيًا نظام big-endian حتى الإصدار 9، الذي أصبح ثنائي الباينات. وبالمثل، كانت معالجات IBM POWER الأولى تستخدم نظام big-endian، لكن معالجات PowerPC و Power ISA اللاحقة تستخدم الآن نظام bi-endian. أما معمارية ARM فكانت تستخدم نظام little-endian قبل الإصدار 3، ثم أصبحت تستخدم نظام bi-endian.
الفاصلة العائمة
على الرغم من أن العديد من المعالجات تستخدم تخزينًا بنظام النهاية الصغرى لجميع أنواع البيانات (الأعداد الصحيحة، والأعداد العشرية)، إلا أن هناك عددًا من بنى الأجهزة التي تُمثل فيها الأعداد العشرية بنظام النهاية الكبرى، بينما تُمثل الأعداد الصحيحة بنظام النهاية الصغرى. [ 33 ] توجد معالجات ARM تستخدم تمثيلًا مختلطًا للأعداد العشرية ذات الدقة المزدوجة: حيث تُخزن كل كلمة من الكلمتين 32 بت بنظام النهاية الصغرى، ولكن تُخزن الكلمة الأكثر أهمية أولًا. أما معالجات VAX، فتُخزن الكلمات ذات 16 بت بنظام النهاية الصغرى بترتيب النهاية الكبرى. ولأن العديد من تنسيقات الأعداد العشرية لم يكن لها تمثيل قياسي على مستوى الشبكة، فإن معيار XDR يستخدم معيار IEEE 754 بنظام النهاية الكبرى كتمثيل لها. ولذلك، قد يبدو غريبًا أن معيار IEEE 754 واسع الانتشار للأعداد العشرية لا يُحدد ترتيب النهاية. [ 34 ] نظريًا، هذا يعني أن بيانات الأعداد العشرية القياسية IEEE، حتى تلك المكتوبة بواسطة جهاز ما، قد لا تكون قابلة للقراءة بواسطة جهاز آخر. مع ذلك، في الحواسيب الحديثة القياسية (أي التي تطبق معيار IEEE 754)، يمكن افتراض أن ترتيب البايتات هو نفسه للأعداد العشرية كما هو للأعداد الصحيحة، مما يجعل التحويل بسيطًا بغض النظر عن نوع البيانات. أما الأنظمة المدمجة الصغيرة التي تستخدم تنسيقات خاصة للأعداد العشرية فقد تكون مسألة أخرى.
بيانات متغيرة الطول
تحتوي معظم التعليمات التي تمّت دراستها حتى الآن على حجم (طول) معاملاتها ضمن رمز العملية . تتراوح أطوال المعاملات الشائعة بين 1 و2 و4 و8 و16 بايت. ولكن توجد أيضًا بنى معمارية يُمكن فيها تخزين طول المعامل في حقل منفصل ضمن التعليمات أو مع المعامل نفسه، على سبيل المثال، باستخدام علامة كلمة . يسمح هذا الأسلوب بأطوال معاملات تصل إلى 256 بايت أو أكثر. أنواع بيانات هذه المعاملات هي سلاسل نصية أو BCD . تشمل الأجهزة القادرة على معالجة هذه البيانات بتعليمات واحدة (مثل المقارنة والجمع) أجهزة IBM 1401 و 1410 و 1620 و System/360 و System/370 و ESA/390 و z/Architecture ، وجميعها من نوع big-endian.
ترتيب النهاية الوسطى
توجد العديد من الترتيبات الأخرى الممكنة، والتي تسمى بشكل عام الترتيب المتوسط أو الترتيب المختلط .
يُعدّ جهاز PDP-11 نظامًا أساسيًا يعتمد على ترتيب البايتات الصغير (little-endian) ذي 16 بت. في معالج الفاصلة العائمة الاختياري لأجهزة PDP-11/45 وPDP-11/70، وبعض المعالجات اللاحقة، كانت تعليمات التحويل بين قيم الفاصلة العائمة والأعداد الصحيحة تخزن قيمًا عددية صحيحة طويلة (long) ذات دقة مزدوجة (double precision) بحجم 32 بت ، مع تبديل أنصاف الـ 16 بت عن ترتيب البايتات الصغير المتوقع. استخدم مُصرّف لغة C في نظام UNIX نفس التنسيق للأعداد الصحيحة الطويلة (long) ذات 32 بت. يُعرف هذا الترتيب باسم PDP-endian . [ 35 ]
كان نظام يونكس من أوائل الأنظمة التي سمحت بتجميع نفس الكود لمنصات ذات تمثيلات داخلية مختلفة. كان من المفترض أن يقوم أحد البرامج الأولى التي تم تحويلها بطباعة Unix، ولكن على جهاز Series/1 قام بطباعة nUxiبدلاً من ذلك. [ 36 ]
إحدى طرق تفسير هذا الترتيب البايتات هي أنه يخزن عددًا صحيحًا من 32 بت على شكل كلمتين صغيرتين من 16 بت، مع ترتيب الكلمات الكبير:
| إزاحة البايت | قيمة 8 بت | قيمة صغيرة النهاية مكونة من 16 بت |
|---|---|---|
| 0 | 0Bh | 0A0Bh |
| 1 | 0Ah | |
| 2 | 0Dh | 0C0Dh |
| 3 | 0Ch |
تحتفظ واصفات القطاعات في معالجات IA-32 والمعالجات المتوافقة معها بعنوان أساسي للقطاع مكون من 32 بت مخزن بترتيب النهاية الصغرى، ولكن في أربعة بايتات غير متتالية، في المواضع النسبية 2 و3 و4 و7 من بداية الواصف. [ 37 ]
برمجة
تصميم المنطق
تدعم لغات وصف الأجهزة (HDLs) المستخدمة للتعبير عن المنطق الرقمي في كثير من الأحيان ترتيب البايتات العشوائي، وبدقة عشوائية. على سبيل المثال، في لغة SystemVerilog ، يمكن تعريف الكلمة على أنها ذات ترتيب البايتات الصغير أو الكبير.
الملفات وأنظمة الملفات
يُعد التعرف على ترتيب البايتات أمرًا مهمًا عند قراءة ملف أو نظام ملفات تم إنشاؤه على جهاز كمبيوتر بترتيب بايتات مختلف.
لا يمكن عادةً قراءة ملفات Fortran التسلسلية غير المنسقة، التي تم إنشاؤها باستخدام ترتيب البايتات (Endianness) معين، على نظام يستخدم ترتيب البايتات الآخر، لأن Fortran عادةً ما تُنفذ السجل (المُعرّف بأنه البيانات المكتوبة بواسطة عبارة Fortran واحدة) كبيانات مسبوقة ومتبوعة بحقول عدّ، وهي أعداد صحيحة تساوي عدد البايتات في البيانات. تؤدي محاولة قراءة مثل هذا الملف باستخدام Fortran على نظام يستخدم ترتيب البايتات الآخر إلى خطأ أثناء التشغيل، لأن حقول العدّ غير صحيحة.
يمكن أن يبدأ نص يونيكود اختيارياً بعلامة ترتيب البايتات (BOM) للإشارة إلى ترتيب البايتات في الملف أو التدفق. رمزها هو U+FEFF. في ترميز UTF-32 على سبيل المثال، يجب أن يبدأ الملف ذو الترتيب الكبير للبايتات بـ 00 00 FE FF; بينما يبدأ الملف ذو الترتيب الصغير للبايتات بـ FF FE 00 00.
عادةً ما تكون تنسيقات البيانات الثنائية للتطبيقات، مثل ملفات MATLAB بامتداد .mat ، أو تنسيق البيانات بامتداد .bil المستخدم في رسم الخرائط الطبوغرافية، مستقلة عن ترتيب البايتات. ويتحقق ذلك إما بتخزين البيانات دائمًا بترتيب بايتات ثابت، أو بتضمين مفتاح لتحديد ترتيب البايتات. ومن الأمثلة على ذلك تنسيق ملف XLS الثنائي ، القابل للنقل بين أنظمة Windows وMac، والذي يكون دائمًا بترتيب بايتات صغير (little-endian)، مما يتطلب من تطبيق Mac تبديل البايتات عند التحميل والحفظ عند تشغيله على معالج Motorola 68K أو PowerPC بترتيب بايتات كبير (big-endian). [ 38 ]
تُعد ملفات صور TIFF مثالًا على الاستراتيجية الثانية، حيث يُحدد رأس الملف للتطبيق ترتيب البايتات للأعداد الصحيحة الثنائية الداخلية. إذا بدأ الملف بالتوقيع `<li>`، MMفهذا يعني أن الأعداد الصحيحة مُمثلة بنظام big-endian، بينما `<li>` IIيعني نظام little-endian. يتطلب كل توقيع كلمة واحدة من 16 بت، وهما متناظران ، لذا فهما مستقلان عن ترتيب البايتات. ` I<li>` يرمز إلى Intel و ` <li>` Mيرمز إلى Motorola . معالجات Intel تعمل بنظام little-endian، بينما معالجات Motorola 680x0 تعمل بنظام big-endian. يسمح هذا التوقيع الصريح لبرنامج قارئ TIFF بتبديل البايتات عند الضرورة، إذا تم إنشاء ملف معين بواسطة برنامج كاتب TIFF يعمل على جهاز كمبيوتر بنظام ترتيب بايتات مختلف.
نتيجة لتنفيذه الأصلي على منصة Intel 8080، يتم تعريف نظام ملفات جدول تخصيص الملفات (FAT) المستقل عن نظام التشغيل بترتيب بايت صغير النهاية، حتى على المنصات التي تستخدم ترتيب نهاية آخر بشكل أصلي، مما يستلزم عمليات تبديل البايت للحفاظ على جدول تخصيص الملفات على هذه المنصات.
يُعرف نظام ZFS ، الذي يجمع بين نظام الملفات ومدير وحدات التخزين المنطقية ، بتوفيره لخاصية ترتيب البايتات التكيفية وقدرته على العمل مع كل من أنظمة ترتيب البايتات الكبيرة والصغيرة. [ 39 ]
التواصل
تستخدم العديد من وثائق IETF RFC مصطلح " ترتيب الشبكة" ، والذي يعني ترتيب إرسال البايتات عبر الشبكة في بروتوكولات الشبكة . ومن بين هذه الوثائق، تحدد وثيقة RFC 1700 التاريخية ترتيب الشبكة لبروتوكولات مجموعة بروتوكولات الإنترنت على أنه ترتيب البايتات الكبير (big-endian). [ 40 ]
مع ذلك، لا تستخدم جميع البروتوكولات ترتيب البايتات الكبير (Big-Endian) كترتيب للشبكة. يستخدم بروتوكول كتلة رسائل الخادم (SMB) ترتيب البايتات الصغير (Little-Endian). في بروتوكول CANopen ، تُرسل المعلمات متعددة البايتات دائمًا بدءًا من البايت الأقل أهمية (Little-Endian). وينطبق الأمر نفسه على بروتوكول Ethernet Powerlink . [ 41 ]
تُعرّف واجهة برمجة تطبيقات Berkeley sockets مجموعة من الدوال لتحويل الأعداد الصحيحة ذات 16 و32 بت من وإلى ترتيب بايتات الشبكة: تقوم الدالتان (host-to-network-short) و (host-to-network-long) بتحويل القيم ذات 16 و32 بت على التوالي من ترتيب الجهاز ( المضيف ) إلى ترتيب الشبكة؛ بينما تقوم الدالتان بتحويلها من ترتيب الشبكة إلى ترتيب المضيف. [ 42 ] [ 43 ] قد لا تُحدث هذه الدوال أي تغيير على نظام ذي ترتيب بايتات كبير.htonshtonlntohsntohl
بينما تعتبر بروتوكولات الشبكة عالية المستوى عادةً البايت (ويُقصد به غالبًا ثمانية بتات ) وحدتها الأساسية، فإن الطبقات الدنيا من حزمة الشبكة قد تتعامل مع ترتيب البتات داخل البايت. يُشار إلى ترتيب البتات أحيانًا باسم الترتيب الصغير (little-endian) أو الترتيب الكبير (big-endian). لا يشترط أن يكون ترتيب البتات مطابقًا لترتيب البايتات. على سبيل المثال، ينقل بروتوكول RS-232 البتات الأقل أهمية أولًا، بينما ينقل بروتوكول I2C البتات الأكثر أهمية أولًا، ويمكن إرسال بيانات بروتوكول SPI بأي ترتيب. أما بروتوكول Ethernet فينقل البتات الفردية الأقل أهمية أولًا، ولكن يتم إرسال البايتات بترتيب كبير (big-endian).
انظر أيضاً
- ترتيب البتات – اصطلاح لتحديد مواقع البتات. صفحات تعرض أوصافًا مختصرة لأهداف إعادة التوجيه.
مراجع
- ↑ "فهم ترتيب البايتات الكبير والصغير" . betterexplained.com . مؤرشف من الأصل بتاريخ 24-05-2019 . تم الاطلاع عليه بتاريخ 20-05-2019 .
- ↑ "ترتيب البايت في إعلانات الدفع لكل نقرة" . مؤرشف من الأصل بتاريخ 9 مايو 2019. تم الاطلاع عليه بتاريخ 20 مايو 2019 .
- ↑ "كتابة كود مستقل عن ترتيب البايتات في لغة C" . مؤرشف من الأصل بتاريخ 10 يونيو 2019. تم الاطلاع عليه بتاريخ 20 مايو 2019 .
- ↑ تنسيق ملف لتبادل الصور على الإنترنت . IETF . أبريل 1992. ص 7. doi : 10.17487/RFC1314 . RFC 1314. تاريخ الاسترجاع: 16 أغسطس 2021 .
- ↑ "رائد قاعة مشاهير الإنترنت" . قاعة مشاهير الإنترنت . جمعية الإنترنت . مؤرشف من الأصل بتاريخ 21-07-2021 . تم الاطلاع عليه بتاريخ 07-10-2015 .
- ↑ كاري، ديفيد. "أسئلة وأجوبة حول الهنود الحمر" . مؤرشف من الأصل بتاريخ 9 نوفمبر 2017. تم الاطلاع عليه بتاريخ 11 أكتوبر 2010 .
- ↑ جيمس، ديفيد ف. (يونيو 1990). "حافلات الإرسال المتعدد: حروب ترتيب البايتات مستمرة". IEEE Micro . 10 (3): 9-21 . Bibcode : 1990IMicr..10c...9J . doi : 10.1109/40.56322 . ISSN 0272-1732 . S2CID 24291134 .
- ↑ بلانك، برتراند؛ معروي، بوب (ديسمبر 2005). "ترتيب البايتات أو أين البايت 0؟" (ملف PDF) . مؤرشف (PDF) من الأصل بتاريخ 3 ديسمبر 2007. تم الاطلاع عليه بتاريخ 21 ديسمبر 2008 .
- ↑ كوهين، داني (1980-04-01). حول الحروب المقدسة ونداء من أجل السلام . IETF . IEN 137.نُشر أيضًا في: كوهين، داني (أكتوبر 1981). "حول الحروب المقدسة ونداء من أجل السلام". مجلة IEEE Computer . 14 (10): 48-54 . Bibcode : 1981Compr..14j..48C . doi : 10.1109/CM.1981.220208 .
- ↑ سويفت، جوناثان (1726). "رحلة إلى ليليبوت، الفصل الرابع" . رحلات جاليفر . مؤرشف من الأصل بتاريخ 2022-09-20 . تم الاطلاع عليه بتاريخ 2022-09-20 .
- ↑ براينت، راندال إي .؛ ديفيد، أوهالارون (2016)، أنظمة الحاسوب: منظور المبرمج ( الطبعة الثالثة)، بيرسون للتعليم، ص 79، ISBN 978-1-488-67207-1
- ↑ ملخص نظام IBM 1401 (ملف PDF) . شركة IBM. أبريل 1966. صفحة 15. A24-1401-1. مؤرشف (ملف PDF) من النسخة الأصلية بتاريخ 10-10-2022.
- ↑ تانينباوم، أندرو س.؛ أوستن، تود م. (4 أغسطس 2012). تنظيم الحاسوب الهيكلي . برنتيس هول بي تي آر. رقم ISBN 978-0-13-291652-3تم الاطلاع عليه بتاريخ 18 مايو 2013 .
- ↑ دليل معالج PDP11 – PDP11/05/10/35/40 (ملف PDF) . شركة ديجيتال إكويبمنت. أبريل 1973. مؤرشف (ملف PDF) من الأصل بتاريخ 2025-07-02.انظر الشكل 2-6
- ↑ – دليل مبرمج لينكس – وظائف المكتبة
- ↑ – دليل مبرمج لينكس – وظائف المكتبة
- ↑ "std::byteswap" . en.cppreference.com . مؤرشف من الأصل بتاريخ 20 نوفمبر 2023. تم الاطلاع عليه بتاريخ 3 أكتوبر 2023 .
- ↑ "دليل مطوري برامج معمارية Intel 64 و IA-32، المجلد 2 (2A، 2B، و2C): مرجع مجموعة التعليمات، AZ" (ملف PDF) . Intel. سبتمبر 2016. ص 3-112. مؤرشف (PDF) من الأصل بتاريخ 9 أكتوبر 2022. تم الاطلاع عليه بتاريخ 5 فبراير 2017 .
- ↑ "دليل مطوري معالج i960® VH" (ملف PDF) . إنتل. أكتوبر 1998. مؤرشف (ملف PDF) من الأصل بتاريخ 2024-04-02 . تم الاطلاع عليه بتاريخ 2024-04-02 .
- ↑ "دليل مرجعي لمعالج ARMv8-A" . شركة ARM Holdings . مؤرشف من الأصل بتاريخ 19 يناير 2019. تم الاطلاع عليه بتاريخ 5 فبراير 2017 .
- ↑ "محدد فتح: تحويل" . دليل ومرجع مطوري مترجم إنتل® فورتران الكلاسيكي ومترجم إنتل® فورتران . تم الاطلاع عليه بتاريخ 29 يونيو 2026 .
- ↑ "محدد التحويل" . gcc.gnu.org . تم الاطلاع عليه بتاريخ 29 يونيو 2026 .
- ↑ معيار "C11" . المنظمة الدولية للمقاييس (ISO). القسم 6.5.2.3 "الهيكل وأعضاء الاتحاد"، الفقرة 3 والحاشية 95. مؤرشف من الأصل بتاريخ 28 مارس 2020. تم الاطلاع عليه بتاريخ 15 أغسطس 2018 .
- ↑ "3.10 خيارات التحكم في التحسين: -fstrict-aliasing" . مجموعة مُجمِّعات جنو (GCC) . مؤسسة البرمجيات الحرة. مؤرشف من الأصل في 1 يوليو 2023. تم الاطلاع عليه في 15 أغسطس 2018 .
- ↑ تورفالدز، لينوس (5 يونيو 2018). " [ سحب من جيت ] تحديث إطار عمل خصائص الجهاز للإصدار 4.18-rc1" . نواة لينكس (قائمة بريدية). مؤرشف من الأصل في 15 أغسطس 2018. تم الاسترجاع في 15 أغسطس 2018 .
- ↑ هاوس، ديفيد؛ فاجين، فيديريكو؛ فيني، هال؛ جيلباخ، إد؛ هوف، تيد؛ مازور، ستان؛ سميث، هانك (21 سبتمبر 2006). "جلسة التاريخ الشفوي حول تطوير وترويج معالج إنتل 8008" (ملف PDF) . متحف تاريخ الحاسوب . ص. ب5. مؤرشف (ملف PDF) من الأصل بتاريخ 29 يونيو 2014. تم الاطلاع عليه بتاريخ 23 أبريل 2014 .
- ^ لوندي ، كين (13 يناير 2009). معالجة معلومات CJKV . شركة O'Reilly Media، Inc.، ص. 29. ردمك 978-0-596-51447-1تم الاطلاع عليه بتاريخ 21 مايو 2013 .
- ↑ "دليل مستخدم Cx51: ترتيب البايتات E" . keil.com . مؤرشف من الأصل بتاريخ 2015-04-02 . تم الاطلاع عليه بتاريخ 2015-03-28 .
- ↑ جيف شيل (16 يونيو 2016). "نظام ليتل إنديان ولينكس على أنظمة آي بي إم باور" . آي بي إم . مؤرشف من الأصل بتاريخ 27 مارس 2022. تم الاطلاع عليه بتاريخ 27 مارس 2022 .
- ↑ تيموثي بريكيت مورغان (10 يونيو 2019). "بدء الانتقال إلى RHEL 8 على أنظمة الطاقة" . ITJungle . مؤرشف من الأصل في 24 يناير 2022. تم الاطلاع عليه في 26 مارس 2022 .
- ↑ "الاختلافات بين حافلات BE-32 وBE-8" . مؤرشف من الأصل بتاريخ 12 فبراير 2019. تم الاطلاع عليه بتاريخ 10 فبراير 2019 .
- ↑ "كيفية اكتشاف دعم التعليمات الجديدة في معالجات الجيل الرابع من Intel® Core™" (ملف PDF) . مؤرشف (ملف PDF) من النسخة الأصلية بتاريخ 20 مارس 2016. تم الاطلاع عليه بتاريخ 2 مايو 2017 .
- ↑ سافارد، جون جي جي (2018) [2005]، "تنسيقات الفاصلة العائمة" ، quadibloc ، مؤرشف من الأصل في 2018-07-03 ، تم استرجاعه في 2018-07-16
- ↑ "pack – تحويل قائمة إلى تمثيل ثنائي" . مؤرشف من الأصل بتاريخ 18 فبراير 2009. تم الاطلاع عليه بتاريخ 4 فبراير 2009 .
- ↑ دليل معالج PDP-11/45 (ملف PDF) . شركة ديجيتال إكويبمنت . 1973. صفحة 165. مؤرشف (ملف PDF) من الأصل بتاريخ 2022-10-09.
- ↑ جاليكس، بول جيه؛ هاينز، توماس إس. (1 ديسمبر 1983). "نقل نظام تشغيل محمول: يونكس إلى حاسوب آي بي إم صغير" . اتصالات رابطة مكائن الحوسبة . 26 (12): 1066-1072 . doi : 10.1145/358476.358504 . S2CID 15558835 .
- ↑ دليل مبرمج معمارية AMD64، المجلد 2: برمجة النظام (ملف PDF) (تقرير فني). 2013. صفحة 80. مؤرشف من الأصل (ملف PDF) بتاريخ 18-02-2018.
- ↑ "مواصفات تنسيق الملفات الثنائية لبرنامج مايكروسوفت أوفيس إكسل 97 - 2007 (*.xls 97-2007 format)" . شركة مايكروسوفت. 2007. مؤرشف من الأصل بتاريخ 22 ديسمبر 2008. تم الاطلاع عليه بتاريخ 18 أغسطس 2014 .
- ↑ مات أهرنز (2016). تفاصيل نواة نظام FreeBSD: شرح تفصيلي للشيفرة . وثائق OpenZFS / محاضرة القراءة والكتابة. مؤرشف من الأصل بتاريخ 14 أبريل 2016. تم الاطلاع عليه بتاريخ 30 مارس 2016 .
- ↑ رينولدز، ج.؛ بوستل ، ج. (أكتوبر 1994). "رموز البيانات" . الأرقام المخصصة . IETF . ص 3. doi : 10.17487/RFC1700 . STD 2. RFC 1700. تاريخ الاسترجاع: 2012-03-02 .
- ↑ مجموعة توحيد معايير Ethernet POWERLINK (2012)، اقتراح مسودة العمل EPSG 301: مواصفات ملف تعريف اتصال Ethernet POWERLINK الإصدار 1.1.4 ، الفصل 6.1.1.
- ↑ معهد مهندسي الكهرباء والإلكترونيات (IEEE) ومجموعة Open Group (2018). "3. واجهات النظام". مواصفات Open Group الأساسية ، الإصدار 7، المجلد 2، صفحة 1120. مؤرشف من الأصل بتاريخ 18 أبريل 2021. تم الاطلاع عليه بتاريخ 9 أبريل 2021 .
- ↑ "htonl(3) - صفحة دليل لينكس" . linux.die.net . مؤرشف من الأصل بتاريخ 18 أبريل 2021. تم الاطلاع عليه بتاريخ 9 أبريل 2021 .
روابط خارجية
تعريف كلمة endianness في قاموس ويكشنري
- ذاكرة الحاسوب
- نقل البيانات
- الاستعارات
- حروب البرمجيات
