Sunday, March 27, 2016

Little Endian Và Big Endian

Giới thiệu

Cũng như con người, máy tính cũng "nói" các ngôn ngữ khác nhau. Một số “đọc” và “ghi” từ trái sang phải, trong khi một số khác thì ngược lại. Một bộ máy có thể đọc và xử lý dữ liệu được tạo ra bởi nó một cách bình thường. Vấn đề xảy ra khi một bộ máy “khác loại” cố gắng đọc dữ liệu đó. Thuật ngữ “big endian” và “little endian” diễn tả sự khác nhau về cách đọc và ghi dữ liệu giữa các nền tảng máy tính. Bài viết sẽ cung cấp cho các bạn một số kiến thức về big và little endian.

Đối tượng hướng đến

Bài viết nói về cách lưu trữ bên dưới của máy tính, do đó nó dành cho các lập trình viên LOW LEVEL, nếu bạn có định hướng là lập trình viên ở mức HIGH LEVELvui lòng đọc ở mức độ xem như tham khảo.

Tổng quan

Endian là cách tổ chức dữ liệu trên một nền tảng máy tính. Bộ nhớ máy tính có thể được xem như một mảng có kích thước lớn, chia làm nhiều ô, mỗi ô có kích thước 1 byte. Nếu dữ liệu của bạn có thể được gói gọn trong 1 byte, nghĩa là mỗi lần bạn chỉ xử lý 1 byte thì không có gì khác biệt.
Vấn đề xảy ra khi dữ liệu của bạn vượt quá 1 byte, ví dụ như bạn cần lưu trữ một số nguyên. Khi đó 4 byte của biến số nguyên đó sẽ được lưu vào bộ nhớ máy tính theo thứ tự nào?

Big Endian

Đối với các nền tảng dùng big endian, Least Significant bit (LSB) luôn được lưu ở ô nhớ có địa chỉ lớn nhất còn Most Significant Bit (MSB) được lưu ở ô nhớ có địa chỉ nhỏ nhất trong vùng lưu trữ của biến. Trong đó, LSB là bit có trọng số nhỏ nhất, nằm ở ngoài cùng bên phải; MSB là bit có trọng số lớn nhất, nằm ở ngoài cùng bên trái của một biến.

Big Endian
Lưu trữ số nguyên 7411 vào bộ nhớ máy trên nền tảng dùng big endian. Ta cùng xét ví dụ sau:
Số 7411 được viết dưới dạng nhị phân như sau:
1 1100 1111 0011
Minh họa việc lưu số 7411 vào bộ nhớ máy tính như sau:
Big Endian

Note: Viết như thế nào thì nó thể hiện trong Big Endian như thế đó, với trình tự bit cao tới bit thấp là từ trái qua phải và địa chỉ cũng tăng theo chiều đó.

Giới thiệu

Cũng như con người, máy tính cũng "nói" các ngôn ngữ khác nhau. Một số “đọc” và “ghi” từ trái sang phải, trong khi một số khác thì ngược lại. Một bộ máy có thể đọc và xử lý dữ liệu được tạo ra bởi nó một cách bình thường. Vấn đề xảy ra khi một bộ máy “khác loại” cố gắng đọc dữ liệu đó. Thuật ngữ “big endian” và “little endian” diễn tả sự khác nhau về cách đọc và ghi dữ liệu giữa các nền tảng máy tính. Bài viết sẽ cung cấp cho các bạn một số kiến thức về big và little endian.

Tiền đề bài viết

Trong quá trình nghiên cứu, tôi đã bắt gặp hai thuật ngữ này và đã có sự đầu tư tìm hiểu. Được anh Kevin La :: www.stdio.vn/users/index/1/kevin-la động viên, tôi đã tổng hợp lại kiến thức và chia sẻ với các bạn trong bài viết này.

Đối tượng hướng đến

Bài viết nói về cách lưu trữ bên dưới của máy tính, do đó nó dành cho các lập trình viên LOW LEVEL, nếu bạn có định hướng là lập trình viên ở mức HIGH LEVELvui lòng đọc ở mức độ xem như tham khảo.

Tổng quan

Endian là cách tổ chức dữ liệu trên một nền tảng máy tính. Bộ nhớ máy tính có thể được xem như một mảng có kích thước lớn, chia làm nhiều ô, mỗi ô có kích thước 1 byte. Nếu dữ liệu của bạn có thể được gói gọn trong 1 byte, nghĩa là mỗi lần bạn chỉ xử lý 1 byte thì không có gì khác biệt.
Vấn đề xảy ra khi dữ liệu của bạn vượt quá 1 byte, ví dụ như bạn cần lưu trữ một số nguyên. Khi đó 4 byte của biến số nguyên đó sẽ được lưu vào bộ nhớ máy tính theo thứ tự nào?

Big Endian

Đối với các nền tảng dùng big endian, Least Significant bit (LSB) luôn được lưu ở ô nhớ có địa chỉ lớn nhất còn Most Significant Bit (MSB) được lưu ở ô nhớ có địa chỉ nhỏ nhất trong vùng lưu trữ của biến. Trong đó, LSB là bit có trọng số nhỏ nhất, nằm ở ngoài cùng bên phải; MSB là bit có trọng số lớn nhất, nằm ở ngoài cùng bên trái của một biến.

Big Endian
Lưu trữ số nguyên 7411 vào bộ nhớ máy trên nền tảng dùng big endian. Ta cùng xét ví dụ sau:
Số 7411 được viết dưới dạng nhị phân như sau:
1 1100 1111 0011
Minh họa việc lưu số 7411 vào bộ nhớ máy tính như sau:
Big Endian

Các nền tảng sử dụng Big Endian

IBM zSeries, iSeries, AIX, NonStop Kernel, Motorola 68K…

Little Endian

Ngược lại với các nền tảng sử dụng big endian, ở các nền tảng sử dụng little endian, LSB luôn được lưu ở ô nhớ có địa chỉ nhỏ nhất còn MSB được lưu ở ô nhớ có địa chỉ lớn nhất trong vùng lưu trữ của biến.
Xét lại ví dụ trên, việc lưu trữ số nguyên 7411 vào bộ nhớ máy tính được minh họa như sau:

cứ bốc 8 bit như trên và bỏ vào theo như bên dưới, ngược lại với cách viết thông thường. nó đi từ phải quá trái với giá trị thấp tại bit có trọng số cao trước.

Little

Các nền tảng sử dụng Little Endian

Hầu hết các hệ thống sử dụng vi xử lý của Intel.
























0 comments :

Post a Comment