Quy ước $ cho các ký tự thập lục phân bắt nguồn từ khi nào và ở đâu?

Aug 16 2020

Tôi thấy câu hỏi này hỏi về nguồn gốc của 0xđể biểu thị hệ thập lục phân là thú vị.

Tuy nhiên, khi tôi lập trình răng trên các hệ thống 8-bit 65xx vào đầu những năm 80, mọi thứ tôi thấy đều sử dụng a $để biểu thị các chữ số thập lục phân (trình lắp ráp, màn hình, sách, tạp chí, v.v.). Cho đến khi tôi có được Amiga 1000 đầu tiên và bắt đầu học C, tôi mới biết 0xtiền tố là một thứ.

Nếu 0xtiền tố rõ ràng có trước cuộc cách mạng 8 bit , thì (1) tại sao lại được $chấp nhận rộng rãi như vậy? Và ngược lại, (2) đã trở nên phổ biến đối với cả thế hệ lập trình viên 8 bit, tại sao nó đột ngột bị loại bỏ? (Điều đó không quan trọng, nhưng tôi vẫn sử dụng $khi viết mã bình luận hoặc viết nguệch ngoạc về những cây chết.)

Trả lời

21 Raffzahn Aug 16 2020 at 12:59

Câu trả lời ngắn:

Motorola đã sử dụng nó cho 6800 của họ và MOS (6500) kế thừa nó từ Motorola. Rốt cuộc, 6500 thành viên trong nhóm đã ra khỏi dự án 6800 nên họ đã quen với nó.


Câu trả lời dài:

Nếu tiền tố 0x rõ ràng có trước cuộc cách mạng 8 bit,

Nó không, thực sự. Motorola đã sử dụng $tiền tố đã có với 6800 năm 1974. Unix chỉ mới được viết lại gần đây (năm 1973) bằng chữ C, bổ sung 0xquy ước vào khoảng thời gian đó và được hiển thị bên ngoài AT&T.

thì (1) tại sao $ lại được chấp nhận rộng rãi như vậy?

Vì dòng 6800/02/09 của Motorola cũng như dòng MOS '6500 được sử dụng trong nhiều máy tính siêu nhỏ (gia đình) cấp thấp hơn. Đáng chú ý nhất là Acorn, Apple, Atari và Commodore. Đương nhiên, mọi người viết phần mềm cho các máy / CPU này sẽ sử dụng ký hiệu của nó.

Sau đó, nó được thực thi bởi sự phổ biến của 68000 được sử dụng, ví dụ, với dòng máy Atari ST và Commodore Amiga.

Và ngược lại, (2) đã trở nên phổ biến đối với cả thế hệ lập trình viên 8 bit,

Bây giờ điều này phụ thuộc rất nhiều vào 'bong bóng bộ xử lý' của bạn, vì nó chỉ đúng với người dùng máy chạy trên 65xx / 68xx. Bất cứ ai lớn lên với máy x80 (8080, 8085, Z80) hoặc x86, như Altair (S100), Tandy TRS-80 và cả thế giới MSX, sẽ không đồng ý. Họ sẽ khá chắc chắn rằng Hhậu tố là cách hợp lệ duy nhất và mọi thứ khác khá kỳ lạ :))

tại sao nó đột ngột bị rớt xuống?

Nó không phải. Không có cơ quan cầm quyền trên toàn thế giới vượt trội nó. Rốt cuộc, việc sử dụng tiền tố (hoặc hậu tố) không phải vốn có đối với mã hex, mà được xác định bởi ngôn ngữ được sử dụng. Các nhà lắp ráp Motorola / MOS muốn một $tiền tố, Intel là một Hhậu tố, C là một 0xtiền tố và những người khác lại muốn một tiền tố giống toán học hơn là 16#(Ada) hoặc 16r(Smalltalk).

(Không có vấn đề gì, nhưng tôi vẫn sử dụng $ khi viết mã bình luận hoặc viết nguệch ngoạc về những cái cây chết.)

Và nhiều người khác cũng vậy (* 3).

Điểm mấu chốt: ngôn ngữ người ta sử dụng xác định ký hiệu - và như mọi khi, ngôn ngữ đầu tiên để lại ấn tượng sâu sắc nhất.


Lợi thế của Prefix so với Postfix

Toán học cổ điển sử dụng một ký hiệu hậu tố về việc có cơ số ở sau một số. Intel đã làm theo nnnnHký hiệu của họ . Đối với cách viết của trình biên dịch, điều này mang lại nhược điểm là toàn bộ từ (hằng số) phải được đọc trước, trước khi có thể quyết định cách diễn giải nó. Điều này có nghĩa là một bộ đệm là cần thiết để giữ toàn bộ chuỗi, vì nó chỉ có thể được chuyển đổi sau khi tiến cho đến khi có hậu tố.

Bằng cách sử dụng tiền tố, rõ ràng ngay từ đầu cách diễn giải các ký tự sau. Điều này không cần phải đệm (* 2). Điều này mang lại lợi thế trong thiết kế trình phân tích cú pháp và đơn giản hóa trình biên dịch rất nhiều. Điều này đặc biệt hữu ích cho việc tạo nhanh các công cụ trình biên dịch chéo ban đầu như là bootstrap đầu tiên.


Một số lịch sử

  • Ký hiệu hex là khá phổ biến trong những năm đầu. Thay vào đó, bát phân là thứ, vì hầu hết các máy được tạo thành bội số của 3 kích thước từ , cũng như các ký tự thường được xử lý dưới dạng 6 bit.

  • Trong số rất ít máy móc / hệ thống từ rất sớm đã cung cấp hệ hex, nhiều máy sử dụng các chữ cái / ký hiệu khác nhau, như số 6 cuối cùng trong bảng chữ cái UVWXYZ(* 2), thường thậm chí không liên tục.

  • IBM giới thiệu định dạng chuỗi có tiền tố ( X'nnnn') với / 360 vào năm 1965

  • Datapoint đã sử dụng bát phân với số 0 có tiền tố

  • 4004 của Intel đã sử dụng hex với hậu tố là h

  • 8008 của Intel đã sử dụng tất cả bát phân trong sách hướng dẫn và tài liệu, được viết dưới dạng nnnO

  • Đến năm 1973, cả hai nhà lắp ráp đều sử dụng các hậu tố B / O / H giống nhau.


* 1 - Ngày nay việc chăm sóc một vài byte bộ đệm có thể rất lạ, khi mà toàn bộ nguồn thường được tải vào bộ nhớ, nhưng RAM là một tài nguyên đáng sợ vào thời đó. Do đó, các thuật toán được ưu tiên sử dụng có thể đọc dữ liệu, như từ băng giấy và trực tiếp hoạt động trên mỗi ký hiệu được đọc mà không cần lưu vào bộ đệm.

Một trình hợp ngữ tối ưu cho phép đọc bất kỳ mục nào một ký tự tại một thời điểm và xử lý nó ngay lập tức mà không cần nhìn trước. Sử dụng tiền tố hỗ trợ điều này.

* 2 - Một quy ước thường dùng trong kỹ thuật khi cần ký hiệu.

* 3 - Ở đây trên RC.SE, tôi cố gắng sử dụng ký hiệu theo chủ đề, vì vậy $đối với 65/68, Hđối với Intel, v.v. và khi không có mối liên hệ rõ ràng, tôi sẽ quay lại ký hiệu / 370 x'nn', vì đó là thứ tôi sử dụng nhiều nhất, mặc dù đã sử dụng $trước.