Sebuah fenomena yang mengganggu dan ingin tahu berkaitan dengan bagaimana byte dalam kata dan
bit dalam byte keduanya dirujuk dan mewakili. Kita melihat pertama pada masalah dari byte pemesanan dan kemudian menganggap bahwa bit.
Urutan Byte
Konsep endianness pertama kali dibahas dalam literatur oleh Cohen [COHE81].
Sehubungan dengan byte, endianness harus dilakukan dengan urutan byte dari skalar multibyte
nilai-nilai. Isu ini terbaik diperkenalkan dengan sebuah contoh. Misalkan kita memiliki 32-bit
nilai heksadesimal 12345678 dan bahwa itu disimpan dalam sebuah kata 32-bit dalam byte-addressable memori di lokasi byte 184. Nilai ini terdiri dari 4 byte, dengan paling signifikan
byte yang berisi nilai 78 dan byte paling signifikan yang mengandung nilai 12.
Ada dua cara yang jelas untuk menyimpan nilai ini:
Pemetaan di sebelah kiri menyimpan byte paling signifikan dalam byte numerik terendah
alamat; ini dikenal sebagai endian besar dan setara dengan urutan dari kiri ke kanan penulisan
dalam bahasa budaya Barat. Pemetaan di toko sebelah kanan byte paling signifikan
di alamat byte numerik terendah; ini dikenal sebagai little endian dan mengingatkan
urutan yang benar-ke-kiri dari operasi aritmatika dalam aritmatika units. 3 Untuk multibyte diberikan
nilai skalar, endian besar dan kecil endian adalah pemetaan byte-terbalik satu sama lain.
Konsep endianness muncul jika diperlukan untuk mengobati multiple-byte
entitas sebagai item data tunggal dengan satu alamat, meskipun terdiri dari
unit beralamat lebih kecil. Beberapa mesin, seperti Intel 80x86, x86, VAX, dan
Alpha, adalah mesin little-endian, sedangkan yang lain, seperti IBM System 370/390,
Motorola 680x0, Sun SPARC, dan sebagian besar mesin RISC, yang endian besar. Ini
menyajikan masalah ketika data ditransfer dari mesin dari satu jenis endian untuk
yang lain dan ketika programmer mencoba untuk memanipulasi byte individu atau bit
dalam skalar multibyte.
Milik endianness tidak melampaui unit data individu. Dalam setiap mesin, agregat seperti file, struktur data, dan array terdiri dari beberapa unit data, masing-masing dengan endianness. Dengan demikian, konversi blok memori dari satu gaya endianness ke yang lain membutuhkan pengetahuan tentang struktur data. Gambar 12.13 menggambarkan bagaimana endianness menentukan pengalamatan dan byte memesan. Struktur C di atas berisi sejumlah tipe data. Ingatan
tata letak dalam hasil kiri bawah dari kompilasi struktur yang untuk big-endian mesin, dan bahwa di kanan bawah untuk mesin little-endian. Dalam setiap kasus, memori digambarkan sebagai rangkaian 64-bit baris. Untuk kasus big-endian, memori biasanya adalah dilihat dari kiri ke kanan, atas ke bawah, sedangkan untuk kasus little-endian, memori biasanya dipandang sebagai kanan ke kiri, atas ke bawah. Perhatikan bahwa layout ini sewenang-wenang.
Entah skema bisa menggunakan salah kiri ke kanan atau kanan ke kiri dalam satu baris; ini
adalah masalah penggambaran, bukan tugas memori. Bahkan, dalam memandang programmer
manual untuk berbagai mesin, koleksi membingungkan penggambaran adalah menjadi
ditemukan, bahkan di dalam manual yang sama.
Kita bisa membuat beberapa pengamatan tentang struktur data ini:
• Setiap item data memiliki alamat yang sama di kedua skema. Sebagai contoh,
alamat doubleword dengan nilai heksadesimal 2122232425262728 adalah 08.
• Dalam setiap diberikan nilai skalar multibyte, urutan byte di littleendian yang
Struktur adalah kebalikan dari yang untuk struktur besar-endian.
• Endianness tidak mempengaruhi urutan item data dalam struktur. Demikian,
kata empat karakter c pameran byte reversal, tapi byte tujuh karakter
Array d tidak. Oleh karena itu, alamat setiap elemen individu d adalah
sama di kedua struktur.
Pengaruh endianness yang mungkin lebih jelas ditunjukkan ketika kita melihat
memori sebagai array vertikal byte, seperti yang ditunjukkan pada Gambar 12.14.
Tidak ada konsensus umum untuk yang gaya unggul endianness.4
Poin-poin berikut mendukung gaya big-endian:
• Karakter-string menyortir: Sebuah prosesor big-endian lebih cepat di bandingkan integeraligned
karakter string; integer ALU dapat membandingkan beberapa byte secara paralel.
• Decimal / IRA kesedihan: Semua nilai dapat dicetak kiri ke kanan tanpa menyebabkan
kebingungan.
• Agar Konsisten: prosesor Big-endian menyimpan bilangan bulat dan karakter mereka
string dalam urutan yang sama (paling signifikan byte yang lebih dulu).
Poin-poin berikut mendukung gaya little-endian:
• Sebuah prosesor big-endian harus melakukan penambahan ketika mengkonversi integer 32-bit
alamat ke alamat bilangan bulat 16-bit, untuk menggunakan byte paling signifikan.
• Lebih mudah untuk melakukan yang lebih tinggi-presisi aritmatika dengan gaya little-endian;
Anda tidak perlu menemukan byte paling signifikan dan bergerak mundur.
Perbedaan yang kecil dan pilihan gaya endian sering lebih suatu hal menampung mesin sebelumnya dari apa pun.
PowerPC adalah prosesor bi-endian yang mendukung baik besar-endian dan
mode little-endian. Arsitektur bi-endian memungkinkan pengembang perangkat lunak untuk
memilih mode baik ketika melakukan migrasi sistem operasi dan aplikasi dari lainnya
mesin. Sistem operasi menetapkan modus endian di mana proses menjalankan. Setelah modus yang dipilih, semua beban memori berikutnya dan toko ditentukan dengan model memori-menangani mode itu. Untuk mendukung perangkat ini fitur, 2 bit diselenggarakan dalam keadaan mesin register (MSR) dikelola oleh sistem operasi sebagai bagian dari negara proses. Satu bit menentukan modus endian di mana kernel berjalan; yang lain menentukan modus operasi prosesor saat ini.
Dengan demikian, modus dapat diubah pada basis per-proses.
bit Pemesanan Dalam memesan bit dalam byte, kita langsung dihadapkan pada dua pertanyaan:
1. Apakah Anda menghitung bit pertama sebagai bit nol atau sebagai bit satu?
2. Apakah Anda menetapkan jumlah bit terendah untuk bit paling signifikan byte ini (sedikit
endian) atau byte bit paling signifikan (big endian)?
Pertanyaan-pertanyaan ini tidak dijawab dengan cara yang sama pada semua mesin. Memang, pada
beberapa mesin, jawaban yang berbeda dalam situasi yang berbeda. Selanjutnya, pilihan besar- atau little-endian bit memesan dalam byte tidak selalu konsisten dengan memesan besar- atau little-endian byte dalam skalar multibyte. programmer perlu peduli dengan isu-isu ini ketika memanipulasi bit individual. Bidang lain yang menjadi perhatian adalah ketika data yang ditransmisikan melalui jalur bit-serial. Ketika sebuah byte individu ditransmisikan, apakah sistem mengirimkan paling signifikan bit pertama atau bit paling signifikan pertama? perancang harus memastikan bahwa bit masuk akan ditangani dengan baik. Untuk pembahasan tentang masalah ini, lihat [JAME90].
Tidak ada komentar:
Posting Komentar