Tôi đã đọc trong hướng dẫn lập trình lắp ráp này rằng 8 bit được sử dụng cho dữ liệu trong khi 1 bit là tương đương, sau đó được sử dụng để phát hiện lỗi chẵn lẻ (do lỗi phần cứng hoặc nhiễu điện).
Điều này có đúng không?
Tôi đã đọc trong hướng dẫn lập trình lắp ráp này rằng 8 bit được sử dụng cho dữ liệu trong khi 1 bit là tương đương, sau đó được sử dụng để phát hiện lỗi chẵn lẻ (do lỗi phần cứng hoặc nhiễu điện).
Điều này có đúng không?
Câu trả lời:
Một byte dữ liệu là tám bit, có thể có nhiều bit hơn trên mỗi byte dữ liệu được sử dụng ở HĐH hoặc thậm chí mức phần cứng để kiểm tra lỗi (bit chẵn lẻ hoặc thậm chí là sơ đồ phát hiện lỗi nâng cao hơn), nhưng dữ liệu là tám bit và bất kỳ bit chẵn lẻ nào thường vô hình với phần mềm. Một byte đã được chuẩn hóa có nghĩa là 'tám bit dữ liệu'. Văn bản không sai khi nói rằng có thể có nhiều bit dành riêng cho việc lưu trữ một byte dữ liệu hơn tám bit dữ liệu, nhưng chúng không được coi là một phần của byte mỗi se, chính văn bản chỉ ra thực tế này.
Bạn có thể thấy điều này trong phần sau của hướng dẫn:
Doubleword: a 4-byte (32 bit) data item
4 * 8 = 32, nó thực sự có thể chiếm 36 bit trên hệ thống nhưng đối với mục đích và mục đích của bạn, nó chỉ có 32 bit.
char
trong C (đó là nội dung của liên kết) chính xác là đơn vị bộ nhớ có thể định địa chỉ nhỏ nhất. Nó chỉ được gọi là char , nhưng C Standard làm cho nó đồng nghĩa với byte .
Theo truyền thống, một byte có thể là bất kỳ kích thước nào, và chỉ là đơn vị bộ nhớ có địa chỉ nhỏ nhất. Ngày nay, các byte 8 bit đã được chuẩn hóa khá nhiều cho phần mềm. Như JustAntherSoul đã nói, phần cứng có thể lưu trữ nhiều bit hơn 8 bit dữ liệu.
Nếu bạn đang làm việc trên các thiết bị logic có thể lập trình, như FPGA, bạn có thể thấy rằng bộ nhớ trong của chúng thường có địa chỉ là các khối 9 bit và là tác giả HDL, bạn có thể sử dụng bit thứ 9 đó để kiểm tra lỗi hoặc chỉ để lưu trữ số lượng lớn hơn dữ liệu trên mỗi "byte". Khi mua chip bộ nhớ cho phần cứng tùy chỉnh, bạn thường có lựa chọn đơn vị địa chỉ 8 hoặc 9 bit (hoặc 16/18, 32/4, v.v.), và tùy thuộc vào việc bạn có "byte" 9 bit hay không bạn làm với bit thứ 9 đó nếu bạn chọn có nó.
Văn bản đó là từ rất kém. Ông gần như chắc chắn đang nói về RAM ECC (mã sửa lỗi) .
Ram ECC thường sẽ lưu trữ thông tin có giá trị 8 bit bằng cách sử dụng 9 bit. Bit-per-byte thêm được sử dụng để lưu trữ mã sửa lỗi.
(Trong cả hai trường hợp, mỗi byte được trải đều trên mọi chip. Hình ảnh lịch sự của Hệ thống Puget )
Đây là tất cả hoàn toàn vô hình cho người dùng phần cứng. Trong cả hai trường hợp, phần mềm sử dụng RAM này thấy 8 bit mỗi byte.
Bên cạnh đó: các mã sửa lỗi trong RAM thường không thực sự là 1 bit trên mỗi byte; chúng thay vì 8 bit trên 8 byte. Điều này có cùng không gian trên không, nhưng có một số lợi thế bổ sung. Xem BÍ MẬT để biết thêm.
Nói chung, câu trả lời ngắn gọn là một byte là 8 bit. Điều này đơn giản hóa vấn đề (đôi khi đến mức không chính xác), nhưng là định nghĩa mà hầu hết mọi người (bao gồm một số lượng lớn lập trình viên) đều quen thuộc và định nghĩa gần như mọi người mặc định (bất kể họ có bao nhiêu byte có kích thước khác nhau ' đã phải làm việc với).
Cụ thể hơn, một byte là đơn vị bộ nhớ có địa chỉ nhỏ nhất cho kiến trúc đã cho và thường đủ lớn để chứa một ký tự văn bản. Trên hầu hết các kiến trúc hiện đại, một byte được định nghĩa là 8 bit; ISO / IEC 80000-13 cũng chỉ định rằng một byte là 8 bit, cũng như sự đồng thuận phổ biến (có nghĩa là nếu bạn đang nói về, các byte 9 bit, bạn sẽ gặp nhiều rắc rối trừ khi bạn rõ ràng gặp rắc rối nói rằng bạn không có nghĩa là byte bình thường).
Tuy nhiên, có những trường hợp ngoại lệ cho quy tắc này. Ví dụ:
sizeof(char)
, trong khi cũng gián tiếp nói rằng char
phải có tối thiểu 8 bit, mỗi byte phải có một địa chỉ duy nhất và không được có bất kỳ khoảng cách nào giữa các byte liền kề trong trí nhớ. Điều này là để làm cho các ngôn ngữ dễ mang theo hơn các ngôn ngữ nếu chúng yêu cầu rõ ràng các byte 8 bit. [Số lượng bit trong một byte được chỉ định là CHAR_BIT
, "giới hạn" limits.h
trong thư viện C ( trong C, climits
trong C ++).]
Vì vậy, trong hầu hết các trường hợp, một byte thường sẽ là 8 bit. Nếu không, nó có thể là 9 bit và có thể hoặc không phải là một phần của từ 36 bit.
Lưu ý rằng thuật ngữ byte không được xác định rõ nếu không có ngữ cảnh. Theo như kiến trúc máy tính có liên quan, bạn có thể giả sử rằng một byte là 8 bit, ít nhất là đối với các kiến trúc hiện đại. Điều này phần lớn được chuẩn hóa bởi các ngôn ngữ lập trình như C, yêu cầu các byte phải có ít nhất 8 bit nhưng không cung cấp bất kỳ đảm bảo nào cho các byte lớn hơn, làm cho 8 bit trên mỗi byte là giả định an toàn duy nhất.
Có những máy tính có đơn vị địa chỉ lớn hơn 8 bit (thường là 16 hoặc 32), nhưng những đơn vị đó thường được gọi là từ máy, không phải byte. Ví dụ: DSP với các từ RAM 32K 32 bit sẽ được quảng cáo là có 128 KB hoặc RAM, không phải 32 KB.
Mọi thứ không được xác định rõ khi nói đến các tiêu chuẩn truyền thông. ASCII vẫn được sử dụng rộng rãi và nó có byte 7 bit (rất phù hợp với byte 8 bit trên máy tính). Bộ thu phát UART vẫn được sản xuất để có kích thước byte có thể định cấu hình (thông thường, bạn có thể chọn ít nhất từ 6, 7 đến 8 bit cho mỗi byte, nhưng 5 và 9 không phải là chưa từng thấy).
Một byte thường được định nghĩa là đơn vị không gian địa chỉ bộ nhớ riêng nhỏ nhất. Nó có thể là bất kỳ kích thước. Đã có kiến trúc với kích thước byte ở bất cứ đâu trong khoảng từ 6 đến 9 bit, thậm chí có thể lớn hơn. Ngoài ra còn có các kiến trúc trong đó đơn vị địa chỉ duy nhất là kích thước của xe buýt, trên các kiến trúc như vậy chúng ta có thể nói rằng chúng chỉ đơn giản là không có byte hoặc byte có cùng kích thước với từ (trong một trường hợp cụ thể mà tôi biết là sẽ được 32 bit); dù bằng cách nào, nó chắc chắn không phải là 8 bit. Tương tự như vậy, có các kiến trúc có thể định địa chỉ bit, trên các kiến trúc đó, một lần nữa chúng ta có thể lập luận rằng các byte đơn giản là không tồn tại hoặc chúng ta có thể lập luận rằng các byte là 1 bit; một trong hai cách là một định nghĩa hợp lý, nhưng 8 bit chắc chắn là sai.
Trên nhiều kiến trúc mục đích chung chính, một byte chứa 8 bit. Tuy nhiên, điều đó không được đảm bảo. Càng đi xa khỏi CPU chính và / hoặc từ các CPU có mục đích chung, bạn càng có khả năng gặp phải các byte không phải là 8 bit. Điều này đi xa đến mức một số phần mềm có tính di động cao thậm chí còn làm cho kích thước có thể cấu hình được. Ví dụ, các phiên bản cũ hơn của GCC chứa một macro được gọi là BITS_PER_BYTE
(hoặc một cái gì đó tương tự), cấu hình kích thước của một byte cho một kiến trúc cụ thể. Tôi tin rằng một số phiên bản cũ hơn của NetBSD có thể được tạo để chạy trên các kiến trúc không phải là 8 bit trên mỗi byte.
Nếu bạn thực sự muốn nhấn mạnh rằng bạn đang nói về một lượng chính xác 8 bit thay vì dung lượng bộ nhớ có thể định địa chỉ nhỏ nhất, tuy nhiên có thể lớn, bạn có thể sử dụng thuật ngữ octet , ví dụ được sử dụng trong nhiều RfC mới hơn.
CHAR_BIT
(tìm thấy trong limits.h
), tôi không biếtBITS_PER_BYTE
Khi tôi bắt đầu lập trình vào năm 1960, chúng tôi có các từ 48 bit với 6 bit byte - chúng không được gọi tên đó sau đó, chúng được gọi là các ký tự. Sau đó, tôi làm việc trên máy tính Golem với các từ 75 bit và 15 bit byte. Sau đó, 6 byte là chuẩn, cho đến khi IBM ra mắt với 360 và ngày nay, một byte thường tương đương với một octet, tức là 8 bit dữ liệu. Một số phần cứng có các bit bổ sung để phát hiện lỗi và có thể sửa lỗi, nhưng phần mềm này không thể truy cập được.
Một byte là 8 bit.
Trong quá khứ xa xôi, có nhiều định nghĩa khác nhau về từ nhớ và byte. Gợi ý rằng sự mơ hồ này là phổ biến hoặc phổ biến trong cuộc sống ngày nay là sai.
Kể từ ít nhất là cuối những năm 1970, một byte đã được 8 bit. Dân số đông đảo của máy tính gia đình và PC đều sử dụng một cách rõ ràng một byte làm giá trị 8 bit trong tài liệu của họ, cũng như tất cả các bảng dữ liệu và tài liệu cho ổ đĩa mềm, ổ đĩa cứng và PROM / EPROM / EEPROM / Flash EPROM / Bộ nhớ chip SRAM / SDRAM mà tôi đã đọc trong khoảng thời gian đó. (Và cá nhân tôi đã đọc rất nhiều trong số chúng ngay trong khoảng thời gian đó.) Ethernet và một vài giao thức truyền thông khác nổi bật với tôi như bất thường khi nói về octet.
Sự mơ hồ của thuật ngữ byte tự nó là một điều hiếm gặp và tối nghĩa. Rất, rất ít dân số lập trình viên, kỹ sư thiết kế, kỹ sư kiểm tra, nhân viên bán hàng, kỹ sư dịch vụ hoặc người đánh bạc trung bình trong 30 năm trở lên sẽ nghĩ nó có ý nghĩa gì đó ngoài giá trị 8 bit, nếu họ nhận ra từ này .
Khi một byte được xử lý bởi phần cứng, chẳng hạn như khi được lưu trữ trong chip bộ nhớ hoặc được truyền thông dọc theo dây, phần cứng có thể thêm dữ liệu dư thừa vào byte. Điều này sau đó có thể hỗ trợ trong việc phát hiện lỗi phần cứng để có thể nhận ra và loại bỏ dữ liệu không đáng tin cậy (ví dụ: chẵn lẻ, tổng kiểm tra, CRC). Hoặc nó có thể cho phép sửa lỗi dữ liệu và dữ liệu được phục hồi (ví dụ ECC). Dù bằng cách nào, dữ liệu dư thừa sẽ bị loại bỏ khi byte được lấy hoặc nhận để xử lý thêm. Byte vẫn là giá trị trung tâm 8 bit và dữ liệu dự phòng vẫn là dữ liệu dự phòng.
Đầu tiên, hướng dẫn mà bạn đang tham khảo dường như khá lỗi thời và dường như được hướng đến các phiên bản lỗi của bộ xử lý x86, mà không nêu rõ, vì vậy rất nhiều điều bạn đọc ở đó sẽ không được người khác hiểu (ví dụ: nếu bạn tuyên bố rằng một WORD là 2 byte, mọi người sẽ không biết bạn đang nói về cái gì, hoặc họ sẽ biết rằng bạn đã được dạy dựa trên các bộ xử lý x86 rất lỗi thời và sẽ biết những gì sẽ xảy ra).
Một byte là bất cứ số bit nào mà ai đó quyết định. Nó có thể là 8 bit, hoặc 9 bit, hoặc 16 bit, bất cứ thứ gì. Trong năm 2016, trong hầu hết các trường hợp, một byte sẽ là tám bit. Để an toàn, bạn có thể sử dụng thuật ngữ octet - một octet luôn luôn, luôn luôn, tám bit.
Sự nhầm lẫn thực sự ở đây là hai câu hỏi khó hiểu: 1. Số bit trong một byte là bao nhiêu? 2. Nếu tôi muốn chuyển một byte từ nơi này sang nơi khác hoặc nếu tôi muốn lưu trữ một byte, sử dụng các phương tiện vật lý thực tế, tôi sẽ làm thế nào? Câu hỏi thứ hai thường ít được bạn quan tâm, trừ khi bạn làm việc tại một công ty sản xuất modem, hoặc ổ cứng hoặc ổ SSD. Trong thực tế, bạn quan tâm đến câu hỏi đầu tiên, và đối với câu hỏi thứ hai, bạn chỉ cần nói "tốt, ai đó sẽ chăm sóc nó".
Bit chẵn lẻ được đề cập là một cơ chế nguyên thủy giúp phát hiện rằng khi một byte được lưu trữ trong bộ nhớ và sau đó byte được đọc, bộ nhớ đã bị thay đổi do một số sự cố. Điều đó không tốt lắm, vì nó sẽ không phát hiện ra rằng hai bit đã bị thay đổi nên một sự thay đổi có thể không bị phát hiện và nó không thể phục hồi từ vấn đề vì không có cách nào để tìm ra 8 bit nào đã thay đổi hoặc thậm chí nếu bit chẵn lẻ đã thay đổi.
Các bit chẵn lẻ thực tế không được sử dụng ở dạng nguyên thủy đó. Dữ liệu được lưu trữ vĩnh viễn thường được bảo vệ theo những cách phức tạp hơn, ví dụ bằng cách thêm tổng kiểm tra 32 bit hoặc dài hơn vào một khối 1024 byte - chiếm ít không gian hơn (ví dụ 0,4% thay vì 12,5%) và nhiều hơn ít có khả năng không phát hiện ra khi có điều gì đó không ổn.
WORD
, điều này ... chứng tỏ quan điểm của bạn, vì rất nhiều tên loại WinAPI đã lỗi thời nhưng được giữ để tương thích ngược. xP
Mặc dù các câu trả lời thực sự xuất sắc được đưa ra ở đây, tôi ngạc nhiên rằng không ai chỉ ra rằng các bit chẵn lẻ hoặc bit sửa lỗi là theo định nghĩa 'siêu dữ liệu' và do đó không phải là một phần của byte.
Một byte có 8 bit !
Trong sử dụng hiện đại, một byte là 8 bit, theo chu kỳ (mặc dù trong lịch sử nó có các định nghĩa khác). Mặt khác, một từ dữ liệu là bất cứ phần cứng nào trong câu hỏi xử lý như một đơn vị nguyên tử - có thể là 8 bit, 9 bit, 10 bit, 12 bit, 16 bit, 20 bit, 24 bit, 32 bit, v.v. hệ thống trong những năm qua đã có tất cả các loại kích cỡ từ khác nhau.
Để thực hiện một hệ thống bộ nhớ hoặc giao thức truyền, có ích khi thêm phát hiện / sửa lỗi liên quan đến các bit bổ sung. Họ không tạo ra một byte 9 bit bởi vì, như đã nêu ở trên, một byte là 8 bit.
Đề án khác nhau thêm phát hiện lỗi và / hoặc sửa chữa theo nhiều cách khác nhau.
Việc sử dụng chẵn lẻ điển hình là thêm một bit bổ sung vào từ truyền để người nhận có thể phát hiện một lỗi đơn lẻ.
Một sơ đồ có thể cung cấp sửa lỗi một bit liên quan đến việc thêm 4 bit ECC cho mỗi từ dữ liệu 32 bit. Điều này chỉ xảy ra tương đương với 1 bit trên mỗi byte, nhưng nó không thể / không hoạt động theo cách đó. Một từ dữ liệu 36 bit có thể mang đủ thông tin để phục hồi từ một lỗi một bit cho không gian dữ liệu 32 bit.
8 bit. Bên trong cpu và bàn phím, nó là 9 và 11 bit. Dữ liệu người dùng được thể hiện trong 8 bit mặc dù. Các phím trên bàn phím gửi các bài hát được chia thành 11 bit. 1 bit bắt đầu, 1 bit kết thúc, 1 bit chẵn lẻ và 8 bit đại diện cho một phím được nhấn.