Kapan dan di mana konvensi $ untuk literal heksadesimal berasal?

Aug 16 2020

Saya menemukan pertanyaan ini menanyakan tentang asal 0xuntuk menunjukkan heksadesimal menjadi menarik.

Namun, ketika saya memotong program gigi saya pada sistem 8-bit 65xx di awal 80-an, semua yang saya lihat menggunakan a $untuk menunjukkan digit heksadesimal (perakit, monitor, buku, majalah, dll). Baru setelah saya mendapatkan Amiga 1000 pertama saya dan mulai belajar C, saya bahkan tahu 0xawalannya adalah sesuatu.

Jika 0xawalan jelas mendahului revolusi 8-bit , lalu (1) mengapa $diadopsi begitu luas? Dan sebaliknya, (2) telah ada di mana-mana untuk seluruh generasi programmer 8 bit, mengapa itu tiba-tiba dijatuhkan? (Bukan itu penting, tapi saya masih menggunakan $saat mengomentari kode atau mencoret-coret pohon mati.)

Jawaban

21 Raffzahn Aug 16 2020 at 12:59

Jawaban singkat:

Motorola menggunakannya untuk 6800 dan MOS (6500) mewarisinya dari Motorola. Bagaimanapun, 6500 anggota tim keluar dari 6800 proyek sehingga mereka sudah terbiasa.


Jawaban panjang:

Jika awalan 0x jelas mendahului revolusi 8-bit,

Tidak, sungguh. Motorola sudah menggunakan $awalan dengan 6800 tahun 1974. Unix baru-baru ini (1973) telah ditulis ulang dalam C, yang menambahkan 0xkonvensi sekitar waktu itu, dan ditampilkan di luar AT&T.

lalu (1) mengapa $ diadopsi begitu luas?

Karena jajaran Motorola 6800/02/09 serta seri MOS '6500 digunakan di banyak komputer mikro (rumah) kelas bawah. Terutama oleh Acorn, Apple, Atari dan Commodore. Biasanya, setiap orang yang menulis perangkat lunak untuk mesin / CPU ini akan menggunakan notasinya.

Belakangan, itu diperkuat oleh popularitas 68000 yang digunakan, misalnya, dengan jajaran mesin Atari ST dan Commodore Amiga.

Dan sebaliknya, (2) telah ada di mana-mana untuk seluruh generasi programmer 8 bit,

Sekarang ini sangat bergantung pada 'gelembung prosesor' Anda, karena ini hanya berlaku untuk pengguna mesin berbasis 65xx / 68xx. Siapapun yang tumbuh dengan mesin berbasis x80 (8080, 8085, Z80) atau x86, seperti Altair (S100), Tandy TRS-80 dan seluruh dunia MSX, tidak akan setuju. Mereka akan cukup tegas karena Hsufiks adalah satu-satunya cara yang valid dan yang lainnya cukup eksotis :))

mengapa tiba-tiba dijatuhkan?

Tidak. Tidak ada badan hukum di seluruh dunia yang mengalahkannya. Lagipula, menggunakan awalan (atau sufiks) tidak melekat pada kode hex, tetapi ditentukan oleh bahasa yang digunakan. Perakit Motorola / MOS menginginkan $prefiks, Intel Hsufiks, C 0xprefiks dan lain-lain menginginkan prefiks yang lebih mirip matematika dari 16#(Ada) atau 16r(Smalltalk).

(Bukan itu penting, tapi saya masih menggunakan $ saat mengomentari kode atau menulis di pohon mati.)

Begitu pula banyak lainnya (* 3).

Intinya: bahasa yang digunakan mendefinisikan notasi - dan, seperti biasa, yang pertama meninggalkan kesan terdalam.


Keunggulan Prefix dibandingkan Postfix

Matematika klasik menggunakan notasi postfix yang memiliki akar di belakang angka. Yang diikuti Intel dengan nnnnHnotasi mereka . Untuk penulisan compiler, hal ini membawa kerugian bahwa seluruh kata (konstanta) harus dibaca terlebih dahulu, sebelum dapat diputuskan bagaimana menafsirkannya. Ini berarti buffer diperlukan untuk menahan seluruh string, karena hanya dapat diubah setelah maju hingga postfix.

Dengan menggunakan awalan, sudah jelas sejak awal bagaimana mengartikan karakter-karakter berikut ini. Ini tidak perlu buffer (* 2). Ini memberikan keuntungan dalam desain parser dan sangat menyederhanakan assembler. Ini sangat membantu untuk pembuatan cepat alat perakit silang awal sebagai bootstrap pertama.


Beberapa Sejarah

  • Notasi hex agak jarang di tahun-tahun awal. Sebaliknya, oktal adalah masalahnya, karena sebagian besar mesin dibangun dengan beberapa ukuran 3 kata , serta karakter biasanya ditangani sebagai 6 bit.

  • Dari sedikit mesin / sistem yang sangat awal menawarkan hex, banyak yang menggunakan berbagai huruf / simbol, seperti 6 terakhir dalam alfabet UVWXYZ(* 2), bahkan seringkali tidak kontinu.

  • IBM memperkenalkan format string yang diawali ( X'nnnn') dengan / 360 pada tahun 1965

  • Titik data menggunakan oktal dengan awalan Nol

  • Intel 4004 menggunakan hex dengan akhiran h

  • Intel 8008 menggunakan semua oktal dalam manual dan dokumentasi, ditulis sebagai nnnO

  • Pada tahun 1973, kedua assembler dibuat untuk menggunakan sufiks B / O / H yang sama.


* 1 - Merawat beberapa byte buffer mungkin terasa aneh saat ini, di mana seluruh sumber biasanya dimuat ke dalam memori, tetapi RAM adalah sumber daya yang menakutkan saat itu. Akibatnya, algoritma lebih disukai yang dapat membaca data, seperti dari pita kertas, dan langsung bekerja pada setiap simbol yang dibaca tanpa buffering.

Assembler yang optimal memungkinkan untuk membaca item apa pun karakter pada satu waktu dan memprosesnya langsung tanpa perlu melihat ke depan. Menggunakan awalan mendukung ini.

* 2 - Konvensi yang sering digunakan dalam bidang teknik saat membutuhkan simbol.

* 3 - Di RC.SE saya mencoba menggunakan notasi sesuai topik, jadi $untuk 65/68, Huntuk Intel, dan seterusnya ... dan jika tidak ada hubungan yang jelas, saya akan kembali ke notasi / 370 x'nn', karena itulah yang paling sering saya gunakan, meskipun telah digunakan $lebih dulu.