Sự khác biệt giữa một từ và byte là gì?


93

Tôi đã thực hiện một số nghiên cứu. Một byte là 8 bit và một từ là đơn vị nhỏ nhất có thể được định địa chỉ trên bộ nhớ. Độ dài chính xác của một từ khác nhau. Điều tôi không hiểu là mục đích của việc có một byte là gì? Tại sao không nói 8 bit?

Tôi đã hỏi một chuyên gia câu hỏi này và anh ấy nói rằng hầu hết các máy ngày nay đều có thể định địa chỉ theo byte, nhưng điều đó sẽ tạo ra một từ gì?


12
Tốt nhất là tránh thuật ngữ "từ" vì sự mơ hồ của nó. Hoặc làm cho nó chính xác bằng cách nói từ 16-bit, 32-bit từ, ...
starblue

2
Có lợi thế khi có một từ lớn hơn hoặc nhỏ hơn?

2
@ quest4knoledge một từ lớn hơn cho phép con trỏ lớn hơn (hay còn gọi là nhiều RAM hơn) và cho phép xử lý nhanh các số lớn hơn. Nó cũng có thể cho phép một số hoạt động như memset nhanh hơn, bằng cách làm việc trong các khối lớn hơn. Tuy nhiên, bộ xử lý có từ lớn hơn yêu cầu nhiều bóng bán dẫn hơn trong bộ xử lý và có thể tiêu tốn nhiều năng lượng hơn một chút.
VoidStar

@VoidStar và một từ lớn hơn có nghĩa là không gian địa chỉ nhỏ hơn, hay tôi nhầm lẫn?

1
Để trả lời câu hỏi "có một byte là gì" - đó là lịch sử. CPU đã không bắt đầu có thể xử lý bất cứ thứ gì lớn hơn một "byte" (các bộ xử lý trước đó chỉ xử lý nybbles (4 bit) nhưng thuật ngữ này không bao giờ thực sự được chú ý). CPU đầu tiên của bất kỳ ghi chú nào là Intel 8086/8088. Nó được thiết kế để đối phó với các lệnh được xây dựng xung quanh "byte", đây cũng là lý do tại sao chúng ta vẫn đề cập đến bộ nhớ dưới dạng xBytes, ví dụ GigaBytes vì ​​đơn vị cơ bản của bộ nhớ địa chỉ là byte. 'K là một tham chiếu đến KiloBytes trong đó PC đầu tiên có 16, có thể mở rộng lên 64 - woo hoo!
Fred

Câu trả lời:


169

Byte : Ngày nay, một byte hầu như luôn luôn là 8 bit. Tuy nhiên, điều đó không phải lúc nào cũng vậy và không có "tiêu chuẩn" hay thứ gì đó quy định điều này. Vì 8 bit là một con số thuận tiện để làm việc với nó đã trở thành tiêu chuẩn trên thực tế.

Word : Kích thước tự nhiên mà bộ xử lý đang xử lý dữ liệu (kích thước thanh ghi). Các kích thước từ phổ biến nhất gặp phải ngày nay là 8, 16, 32 và 64 bit, nhưng có thể có các kích thước khác. Ví dụ, có một vài máy 36 bit , hoặc thậm chí 12 bit .

Các byte là đơn vị nhỏ nhất địa chỉ cho một CPU. Nếu bạn muốn thiết lập / xóa các bit đơn, trước tiên bạn cần lấy byte tương ứng từ bộ nhớ, xáo trộn các bit và sau đó ghi byte trở lại bộ nhớ.

Các chữ ngược là đoạn lớn nhất của các bit mà một bộ xử lý có thể làm chế biến (như cộng và trừ) tại một thời điểm. Định nghĩa đó hơi mờ, vì một số bộ xử lý có thể có các kích thước từ khác nhau cho các tác vụ khác nhau (ví dụ: xử lý số nguyên so với xử lý dấu phẩy động). Kích thước từ là những gì mà phần lớn các hoạt động làm việc với.

Cũng có một số bộ xử lý có kích thước con trỏ khác nhau : ví dụ: 8086 là bộ xử lý 16 bit có nghĩa là các thanh ghi của nó rộng 16 bit. Nhưng các con trỏ (địa chỉ) của nó rộng 20 bit và được tính bằng cách kết hợp hai thanh ghi 16 bit theo một cách nhất định.


9
Câu trả lời xuất sắc. Tôi chỉ phân minh với " [t] ngược lại, từ đó là đoạn bit lớn nhất mà bộ xử lý có thể thực hiện xử lý ... tại một thời điểm ". Trên thực tế, nó là đoạn bit phổ biến nhất, v.v ... Rất nhiều kiến ​​trúc đã phát triển theo thời gian có kích thước từ không phải là rộng nhất, nhưng chúng thường bị giới hạn trong những gì chúng có thể làm với các giá trị rộng nhất của chúng.
Ross Patterson

11
Đối với tín dụng bổ sung, "nibble" là một thuật ngữ phổ biến cho nửa byte. Nó xuất hiện trong thời kỳ đầu của CPU máy tính vi mô ( ví dụ: Intel 8080), và luôn được hiểu là 4 bit, vì lúc đó byte đã giảm xuống còn 8 bit.
Ross Patterson

6
Ngày nay byte 8 bit là một tiêu chuẩn; xem IEC 80000-13: 2008.
user2431763

1
@DebanjanDhar: Vâng, chúng không liên quan. Mối quan hệ duy nhất là một trang là (AFAIK) luôn là bội số của kích thước từ.
DarkDust

4
x86 (như thường lệ) làm cho mọi thứ trở nên phức tạp: Theo thuật ngữ của Intel, a wordlà 16 bit, ngay cả trên các CPU x86 hiện đại, nơi kích thước toán hạng mặc định là 32 bit (dword) và chiều rộng thanh ghi số nguyên là 64 bit (qword). Và thanh ghi xmm có chiều rộng 128 bit ( movdqadi chuyển gấp đôi phần tư). Bus bộ nhớ có chiều rộng ít nhất là 64 bit (và truyền theo cụm 64 byte = một dòng bộ nhớ cache) và đơn vị thực thi đến đường dẫn bộ đệm có chiều rộng ít nhất là 128 bit, hoặc rộng 256 hoặc thậm chí 512 bit. Dù kích thước từ máy gốc của x86 hiện đại là gì, nó không phải là 16 bit, nhưng x86 hiện đại vẫn sử dụng thuật ngữ 8086.
Peter Cordes

16

Điều tôi không hiểu là mục đích của việc có một byte là gì? Tại sao không nói 8 bit?

Ngoài quan điểm kỹ thuật rằng một byte không nhất thiết phải 8 bit, lý do để có một thuật ngữ là bản chất con người đơn giản:

  • nền kinh tế của nỗ lực (hay còn gọi là sự lười biếng) - nói "byte" dễ dàng hơn là "tám bit"

  • chủ nghĩa bộ lạc - các nhóm người thích sử dụng biệt ngữ / một ngôn ngữ riêng để khiến họ khác biệt với những người khác.

Chỉ cần đi với dòng chảy. Bạn sẽ không thay đổi hơn 50 năm thuật ngữ CNTT và hành trang văn hóa tích lũy bằng cách phàn nàn về nó.


FWIW - thuật ngữ chính xác để sử dụng khi bạn có nghĩa là "8 bit độc lập với kiến ​​trúc phần cứng" là "octet".


tôi nghĩ octet chỉ là bản dịch tiếng Pháp của byte, cảm ơn bạn;)
Abdelouahab Pp

8

BYTE

Tôi đang cố gắng trả lời câu hỏi này từ góc độ C ++.

Tiêu chuẩn C ++ định nghĩa 'byte' là "Đơn vị dữ liệu có thể định địa chỉ đủ lớn để chứa bất kỳ thành viên nào của bộ ký tự cơ bản của môi trường thực thi."

Điều này có nghĩa là byte bao gồm ít nhất đủ các bit liền kề để chứa bộ ký tự cơ bản cho việc triển khai. Có nghĩa là, số lượng giá trị có thể có phải bằng hoặc vượt quá số ký tự phân biệt. Tại Hoa Kỳ, các bộ ký tự cơ bản thường là bộ ASCII và EBCDIC, mỗi bộ có thể chứa 8 bit. Do đó, nó được đảm bảo rằng một byte sẽ có ít nhất 8 bit.

Nói cách khác, byte là dung lượng bộ nhớ cần thiết để lưu một ký tự.

Nếu bạn muốn xác minh 'số bit' trong quá trình triển khai C ++ của mình, hãy kiểm tra tệp 'giới hạn.h'. Nó sẽ có một mục như dưới đây.

#define CHAR_BIT      8         /* number of bits in a char */

WORD

Word được định nghĩa là số lượng bit cụ thể có thể được xử lý cùng nhau (tức là trong một lần thử) bởi máy / hệ thống. Ngoài ra, chúng ta có thể nói rằng Word xác định lượng dữ liệu có thể được truyền giữa CPU và RAM trong một thao tác duy nhất.

Thanh ghi phần cứng trong máy tính có kích thước từ. Kích thước Word cũng xác định địa chỉ bộ nhớ lớn nhất có thể (mỗi địa chỉ bộ nhớ trỏ đến một bộ nhớ có kích thước byte).

Lưu ý - Trong các chương trình C ++, địa chỉ bộ nhớ trỏ tới một byte bộ nhớ chứ không phải một từ.


6

Tại sao không nói 8 bit?

Vì không phải máy nào cũng có byte 8 bit. Vì bạn đã gắn thẻ cái này C, hãy tìm CHAR_BITtrong limits.h.


6

Một từ là kích thước của các thanh ghi trong bộ xử lý. Điều này có nghĩa là các hướng dẫn của bộ xử lý như, add, mul, v.v. nằm trên các đầu vào có kích thước từ.

Nhưng hầu hết các kiến ​​trúc hiện đại đều có bộ nhớ có thể định địa chỉ ở dạng khối 8 bit, vì vậy rất tiện lợi khi sử dụng từ "byte".


Vì vậy, theo một nghĩa nào đó, thuật ngữ "byte" chỉ được sử dụng cho thuận tiện?

Có, "byte" đặc biệt thuận tiện khi thuật ngữ này được phát minh. Giống như nhiều quy ước, một khi họ đã thiết lập, họ vẫn tồn tại. Tôi không chắc liệu thuật ngữ dựa trên byte có thực sự làm cho máy tính dễ hiểu hơn trong bức tranh lớn hay không, nhưng đó là quy ước thống trị và không muốn sớm thay đổi.
VoidStar

Byte là thuật ngữ được sử dụng cho một đơn vị được sử dụng như một ký tự trong văn bản. Trong lịch sử có byte với kích thước từ 6 đến 9 bit.
starblue 13/10/11

@starblue làm thế nào có thể một ký tự chiếm ít chỗ hơn một từ?

1
@ quest4knoledge: vì bộ nhớ được lưu trữ trong các phần nhỏ hơn mà các từ đó. Một từ là 32bits (hoặc 64bits trên các máy mới hơn). Trong thuật toán xử lý từng ký tự riêng lẻ, chúng chỉ chiếm toàn bộ từ khi ở bên trong CPU và khi được đặt trở lại RAM, chúng sẽ được đóng gói chặt chẽ hơn.
VoidStar

5

Trong ngữ cảnh này, một từ là đơn vị mà máy sử dụng khi làm việc với bộ nhớ. Ví dụ, trên máy 32 bit, từ dài 32 bit và trên máy 64 bit là 64 bit. Kích thước từ xác định không gian địa chỉ.

Trong lập trình (C / C ++), từ thường được biểu diễn bằng int_ptrkiểu, có cùng độ dài như một con trỏ, theo cách này sẽ trừu tượng hóa các chi tiết này.

Tuy nhiên, một số API có thể khiến bạn nhầm lẫn, chẳng hạn như API Win32, vì nó có các loại như WORD(16 bit) và DWORD(32 bit). Lý do là ban đầu API nhắm mục tiêu đến các máy 16 bit, sau đó được chuyển sang các máy 32 bit, sau đó là các máy 64 bit. Để lưu trữ một con trỏ, bạn có thể sử dụng INT_PTR. Thêm chi tiết ở đâyở đây .


4

Có vẻ như tất cả các câu trả lời đều giả định các ngôn ngữ cấp cao và chủ yếu là C / C ++.

Nhưng câu hỏi được gắn thẻ "assembly" và trong tất cả các trình lắp ráp mà tôi biết (đối với CPU 8bit, 16bit, 32bit và 64bit), các định nghĩa rõ ràng hơn nhiều:

byte  = 8 bits 
word  = 2 bytes
dword = 4 bytes = 2Words (dword means "double word")
qword = 8 bytes = 2Dwords = 4Words ("quadruple word")

3
Không, những kích thước này chỉ hợp lệ trên máy 16 bit. Có thể bạn đã quen với việc lập trình Windows vẫn sử dụng các macro này vì nó là di sản từ những ngày 16 bit và MS đã không bận tâm đến việc sửa lỗi này.
DarkDust

2
BTW, bởi vì kích thước của một từ (và thực sự thậm chí là một byte) có thể khác nhau, ISO-C có các loại int<X>_tuint<X>_t(cộng thêm nữa) nên được sử dụng nếu bạn muốn một biến / tham số có kích thước bit cụ thể.
DarkDust

@DarkDust chúng ta đang nói về hợp ngữ ở đây. Tiêu chuẩn C không liên quan. BTW, tôi đang lập trình lắp ráp từ năm 1980 và những cái tên tương tự đã được sử dụng. (tốt, có thể ngoại trừ qword)
johnfound

Tuy nhiên, tôi đã tìm thấy một ngoại lệ: trong GNU như, .wordcó thể là 32 bit (ví dụ cho Sparc ).
DarkDust

Xin lỗi, AS không phải là một trình lắp ráp. Nó là một dị nhân xấu xí, què quặt, khốn khổ, được tạo ra với mục tiêu duy nhất là trở thành back end cho các trình biên dịch HLL.
johnfound

3

Độ dài chính xác của một từ khác nhau. Điều tôi không hiểu là mục đích của việc có một byte là gì? Tại sao không nói 8 bit?

Mặc dù độ dài của một từ khác nhau, trên tất cả các máy hiện đại và thậm chí tất cả các kiến ​​trúc cũ hơn mà tôi quen thuộc, kích thước từ vẫn là bội số của kích thước byte. Vì vậy, không có nhược điểm cụ thể nào khi sử dụng "byte" trên "8 bit" liên quan đến kích thước từ thay đổi.

Ngoài ra, đây là một số lý do để sử dụng byte (hoặc octet 1 ) trên "8 bit":

  1. Các đơn vị lớn hơn chỉ thuận tiện để tránh các số rất lớn hoặc rất nhỏ: bạn cũng có thể hỏi "tại sao lại nói 3 nano giây trong khi bạn có thể nói 0,000000003 giây" hoặc "tại sao lại nói 1 kg trong khi bạn có thể nói 1.000 gam", v.v.
  2. Ngoài sự tiện lợi, đơn vị của byte bằng cách nào đó cũng cơ bản như 1 bit vì nhiều hoạt động thường hoạt động không ở mức byte, mà ở mức byte: định địa chỉ bộ nhớ, phân bổ bộ nhớ động, đọc từ tệp hoặc ổ cắm, v.v.
  3. Ngay cả khi bạn đã sử dụng "8 bit" như một loại đơn vị, vì vậy bạn có thể nói "hai 8 bit" thay vì "hai byte", sẽ rất khó hiểu khi đơn vị mới của bạn bắt đầu bằng một số. Ví dụ, nếu ai đó nói "một trăm 8-bit" thì nó có thể dễ dàng được hiểu là 108 bit, thay vì 100 bit.

1 Mặc dù tôi sẽ coi một byte là 8 bit cho câu trả lời này, nhưng điều này không hoàn toàn đúng: trên các máy cũ hơn, một byte có thể có kích thước khác (chẳng hạn như 6 bit . Octet luôn có nghĩa là 8 bit, bất kể máy nào ( vì vậy thuật ngữ này thường được sử dụng trong việc xác định các giao thức mạng). Trong cách sử dụng hiện đại, byte được sử dụng nhiều như đồng nghĩa với 8 bit.


2

Bất kể thuật ngữ nào có trong biểu dữ liệu và trình biên dịch, 'Byte' là tám bit. Chúng ta đừng cố nhầm lẫn các câu hỏi và tổng quát với các ngoại lệ khó hiểu hơn, đặc biệt khi từ 'Byte' xuất phát từ cụm từ "By Eight". Tôi đã làm việc trong ngành công nghiệp bán dẫn / điện tử hơn ba mươi năm và chưa một lần được biết đến từ 'Byte' được sử dụng để biểu đạt bất cứ thứ gì nhiều hơn tám bit.


Có bất thường (chúng tôi biết điều đó. Một ví dụ là, Công cụ texas c54x Công cụ texas của Google c54x byte. Ti.com/lit/ug/spru393/spru393.pdf "Các lệnh 'C55x là độ dài byte thay đổi có kích thước từ 8 bit đến 48 bit ". stackoverflow.com/questions/2098149/...
barlop

1
Nó hoàn toàn không đến từ đó. Thuật ngữ này thực sự được đặt ra bởi W. Buchholtz tại IBM vào cuối những năm 1950. Nguồn: bobbemer.com/BYTE.HTM . Theo Bob Bemer, cách viết "byte" được ưu tiên chọn thành "cắn" để tránh nhầm lẫn (với "bit") do lỗi chính tả. Anh ấy sẽ biết. Anh ấy đã ở đó!
Stephen C

(? Chỉ 30 năm Bạn là một chỉ Whipper-snapper tôi đã học đến chương trình trên hệ thống mà tự nhiên "byte" kích thước không phải là 8 bit :-).)
Stephen C

1

Tham khảo: https://www.os-book.com/OS9/slide-dir/PPT-dir/ch1.ppt

Đơn vị cơ bản của lưu trữ máy tính là bit. Một bit có thể chứa một trong hai giá trị, 0 và 1. Tất cả các bộ lưu trữ khác trong máy tính đều dựa trên tập hợp các bit. Với số bit đủ lớn, thật đáng kinh ngạc là máy tính có thể biểu diễn bao nhiêu thứ: số, chữ cái, hình ảnh, phim, âm thanh, tài liệu và chương trình, cho đến một vài thứ. Một byte là 8 bit, và trên hầu hết các máy tính, nó là phần lưu trữ thuận tiện nhỏ nhất. Ví dụ, hầu hết các máy tính không có lệnh để di chuyển một bit nhưng có một lệnh để di chuyển một byte. Một thuật ngữ ít phổ biến hơn là từ, là đơn vị dữ liệu gốc của kiến ​​trúc máy tính nhất định. Một từ được tạo thành từ một hoặc nhiều byte. Ví dụ, một máy tính có thanh ghi 64 bit và địa chỉ bộ nhớ 64 bit thường có các từ 64 bit (8 byte). Một máy tính thực hiện nhiều hoạt động trong kích thước từ gốc của nó thay vì một byte tại một thời điểm. Bộ nhớ máy tính, cùng với hầu hết thông lượng máy tính, thường được đo lường và xử lý theo byte và tập hợp các byte. Một kilobyte, hoặc KB, là 1,024 byte một megabyte, hoặc MB, là 1,024 2 byte một gigabyte, hoặc GB, là 1,024 3 byte một terabyte, hoặc TB, là 1,024 4 byte một petabyte, hoặc PB, là 1,024 5 byte Máy tính các nhà sản xuất thường làm tròn những con số này và nói rằng một megabyte là 1 triệu byte và gigabyte là 1 tỷ byte. Các phép đo mạng là một ngoại lệ đối với quy tắc chung này; chúng được cung cấp theo từng bit (vì mạng di chuyển dữ liệu từng bit một) 024 5 byte Các nhà sản xuất máy tính thường làm tròn những con số này và nói rằng một megabyte là 1 triệu byte và gigabyte là 1 tỷ byte. Các phép đo mạng là một ngoại lệ đối với quy tắc chung này; chúng được cung cấp theo từng bit (vì mạng di chuyển dữ liệu từng bit một) 024 5 byte Các nhà sản xuất máy tính thường làm tròn những con số này và nói rằng một megabyte là 1 triệu byte và gigabyte là 1 tỷ byte. Các phép đo mạng là một ngoại lệ đối với quy tắc chung này; chúng được cung cấp theo từng bit (vì mạng di chuyển dữ liệu từng bit một)


-1

Nếu một máy có thể định địa chỉ theo byte và một từ là đơn vị nhỏ nhất có thể được định địa chỉ trên bộ nhớ thì tôi đoán một từ sẽ là byte!


Vâng. Đơn vị bộ nhớ có thể định địa chỉ tối thiểu trên TMS320C54xx (một trong những DSP của Texas Instruments) dài 16 bit, đây cũng là kích thước nhỏ nhất trong số các thanh ghi đa năng của nó. Và trình biên dịch TI C định nghĩa char = short = int = 16 bit trên đó.
Alexey Frunze 13/10/11

Không, hầu hết các máy RISC đều có các từ 32 bit, nhưng có thể giải quyết các byte đơn lẻ. Ví dụ trên MIPS, word chắc chắn có nghĩa là 32 bit, nhưng có một lệnh lb(byte tải) tải 8 bit.
Peter Cordes

-1

Một nhóm 8 bit được gọi là byte (trừ trường hợp không phải vậy :) cho một số kiến ​​trúc nhất định)

Một từ là một nhóm bit có kích thước cố định được xử lý như một đơn vị bởi tập lệnh và / hoặc phần cứng của bộ xử lý. Điều đó có nghĩa là kích thước của một thanh ghi mục đích chung (thường nhiều hơn một byte) là một từ

Trong C, một từ thường được gọi là số nguyên =>int


7
Một nhóm 8 bit được gọi là octet.
cnicutar 13/10/11

2
đúng: Thuật ngữ octetđược định nghĩa để biểu thị rõ ràng một chuỗi 8 bit vì sự không rõ ràng liên quan đến thuật ngữ byte . Nhưng tôi như tiếng bytetốt hơn :)
tolitius

2
@tolitius: +1 cho "Nhưng tôi như tiếng bytetốt hơn": Tôi mạnh mẽ nghi ngờ bạn không cô đơn trong này và an toàn cho một vài hệ thống thích hợp, những "nhầm lẫn" của một byte có thể trở thành một kích thước khác hơn 8-bit không còn phù hợp trong những ngày này.
Joachim Sauer

-1

Các điều khoản của BYTE và WORD có liên quan đến kích thước của bộ xử lý đang được tham chiếu. Các bộ xử lý phổ biến nhất là / là 8 bit, 16 bit, 32 bit hoặc 64 bit. Đây là độ dài WORD của bộ xử lý. Trên thực tế, một nửa WORD là BYTE, bất kể độ dài số là bao nhiêu. Sẵn sàng cho việc này, một nửa BYTE là NIBBLE.


Không, trong các CPU có từ 32 bit và byte 8 bit (ví dụ: MIPS hoặc ARM), nửa từ là 2 byte.
Peter Cordes

-3

Trên thực tế, trong cách sử dụng phổ biến, từ đã trở thành đồng nghĩa với 16 bit, giống như byte có 8 bit. Có thể hơi khó hiểu vì "kích thước từ" trên CPU 32-bit là 32-bit, nhưng khi nói về một từ dữ liệu, người ta có nghĩa là 16-bit. Các bộ vi điều khiển có kích thước từ 32 bit đã sử dụng cách gọi hướng dẫn của chúng là "longs" (được cho là để thử và tránh nhầm lẫn từ / từ kép).


1
Điều đó hoàn toàn phụ thuộc vào loại CPU. Như bạn đã chỉ ra, trên các máy 32-bit không phải IA32, một "từ" thường là 32 bit.
Ross Patterson

2
@RossPatterson Điều đó hoàn toàn phụ thuộc vào việc bạn đang phát triển phần mềm hay đang ăn tối.
Kỹ sư

ARM / MIPS / các kiến ​​trúc RISC chính thống khác có các từ 32-bit. Đó là chiều rộng thanh ghi (trên phiên bản 32-bit của các ISA đó) và chiều rộng lệnh. 16 bit là một nửa từ, do đó các lệnh ARM muốnldrh tải 16 bit và không mở rộng nó vào thanh ghi 32 bit. Hoặc ldrshđể tải và ký mở rộng 16 bit.
Peter Cordes
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.