Kodėl EBCDIC raidžių nėra iš eilės?

ASCII standartas buvo priimtas 1963 m., o dabar beveik niekas nenaudoja kodavimo, kurio pirmieji 128 simboliai skiriasi nuo ASCII. Tačiau iki praėjusio šimtmečio pabaigos buvo aktyviai naudojamas EBCDIC – standartinis IBM didžiųjų kompiuterių ir jų sovietinių klonų EC kompiuterių kodavimas. EBCDIC išlieka pagrindine kodavimu z/OS, standartinėje šiuolaikinių IBM Z pagrindinių kompiuterių operacinėje sistemoje.

Žiūrint į EBCDIC iš karto akį krenta tai, kad raidės nėra iš eilės: tarp I и J ir tarp R и S buvo nepanaudotų pozicijų (ES kompiuteryje šiems intervalams platinami kirilicos rašmenys). Kas būtų pagalvojęs užkoduoti raides su nelygiais tarpais tarp gretimų raidžių?

Kodėl EBCDIC raidžių nėra iš eilės?

Pats pavadinimas EBCDIC („Extended BCDIC“) sufleruoja, kad šis kodavimas, skirtingai nei ASCII, buvo sukurtas ne nuo nulio, o pagrįstas šešių bitų BCDIC kodavimu, kuris buvo naudojamas nuo tada. IBM 704 (1954):

Kodėl EBCDIC raidžių nėra iš eilės?

Nėra tiesioginio atgalinio suderinamumo: patogi BCDIC savybė, kuri buvo prarasta pereinant prie EBCDIC, buvo ta, kad 0-9 atitinka kodus 0-9. Tačiau tarp jų yra septynių kodų tarpai I и J ir aštuoniais kodais tarp R и S jau buvo BCDIC. Iš kur jie atsirado?

(E)BCDIC istorija prasideda kartu su IBM istorija – gerokai anksčiau nei elektroniniai kompiuteriai. IBM susikūrė susijungus keturioms įmonėms, iš kurių technologiškai pažangiausia buvo Tabulating Machine Company, kurią 1896 m. įkūrė išradėjas Hermanas Hollerithas. tabuliatorius. Pirmieji tabulatoriai tiesiog suskaičiavo perforuotų kortelių, permuštų konkrečioje vietoje, skaičių; tačiau 1905 metais Hollerith pradėjo gaminti dešimtainis tabuliatoriai. Kiekvieną dešimtainio tabulatoriaus kortelę sudarė savavališko ilgio laukeliai, o šiuose laukuose įrašyti skaičiai įprasta dešimtaine forma buvo sumuojami per visą kaladę. Žemėlapio suskirstymas į laukus buvo nustatytas sujungus laidus tabulatoriaus pataisų skydelyje. Pavyzdžiui, šioje Hollerith perfokortoje saugomi Kongreso bibliotekoje numeris 23456789012345678 yra aiškiai antspauduotas, nežinomas kaip suskirstytas į laukus:

Kodėl EBCDIC raidžių nėra iš eilės?

Dėmesingiausi galbūt pastebėjo, kad Hollerito žemėlapyje skylėms skirta 12 eilučių, nors skaičiams užtenka ir dešimties; o BCDIC kiekvienai reikšmingiausių dviejų bitų reikšmei naudojama tik 12 kodų iš 16 galimų.

Žinoma, tai nėra atsitiktinumas. Iš pradžių Hollerithas numatė papildomas eilutes „specialiesiems ženklams“, kurios nebuvo sumuojamos, o tiesiog skaičiuojamos – kaip ir pačiuose pirmuosiuose tabulatoriuose. (Šiandien juos vadintume „bitų laukeliais“.) Be to, tarp „specialiųjų ženklų“ buvo galima nustatyti ir grupinius rodiklius: jei lentelės sudarymui reikalingos ne tik galutinės sumos, bet ir tarpinės, tada tabulatorius sustodavo, kai jis aptiko bet kurio grupės rodiklio pasikeitimą, o operatorius turėjo perrašyti tarpines sumas iš skaitmeninių lentų ant popieriaus, iš naujo nustatyti lentą ir tęsti lentelių sudarymą. Pavyzdžiui, skaičiuojant apskaitos likučius, kortelių grupė gali atitikti vieną datą arba vieną sandorio šalį.

Iki 1920 m., kai Hollerithas jau buvo išėjęs į pensiją, buvo pradėti naudoti „spausdinimo tabulatoriai“, kurie buvo prijungti prie teletaipo ir galėjo patys spausdinti tarpines sumas, nereikalaujant operatoriaus įsikišimo. Dabar buvo sunku nustatyti, ką reiškia kiekvienas išspausdintas skaičius. 1931 m. IBM nusprendė raidėms žymėti naudoti „specialius ženklus“: ženklas 12-oje eilutėje nurodė raidę iš A į I, 11-oje – nuo J į R, ties nuliu - nuo S į Z. Naujasis „abėcėlės tabulatorius“ galėtų atspausdinti kiekvienos kortelių grupės pavadinimą kartu su tarpinėmis sumomis; šiuo atveju nepertraukiamas stulpelis virto tarpu tarp simbolių. Prašau Pasižymėk tai S žymimas skylių deriniu 0+2, o 0+1 derinys iš pradžių nebuvo naudojamas, nes baiminamasi, kad dvi viena šalia kitos esančios skylės tame pačiame stulpelyje sukels mechaninių skaitytuvo problemų.

Kodėl EBCDIC raidžių nėra iš eilės?

Dabar galite pažvelgti į BCDIC lentelę šiek tiek kitu kampu:

Kodėl EBCDIC raidžių nėra iš eilės?

Išskyrus tai, kad 0 ir tarpas yra atvirkščiai, reikšmingiausi du bitai apibrėžia "specialų ženklą", kuris buvo perforuotas atitinkamo simbolio perfokortelėje nuo 1931 m.; o mažiausiai reikšmingi keturi bitai nustato skaitmenį, įmuštą į pagrindinę kortelės dalį. Simbolių palaikymas & - / ketvirtajame dešimtmetyje buvo įtrauktas į IBM tabulatorius, o šių simbolių BCDIC kodavimas atitinka jiems išmuštus skylių derinius. Kai prireikė dar didesnio simbolių skaičiaus, 1930 eilutė buvo perforuota kaip papildomas „specialus ženklas“ – taigi viename stulpelyje galėjo būti iki trijų skylių. Toks perfokortelių formatas išliko beveik nepakitęs iki amžiaus pabaigos. SSRS jie paliko IBM lotynišką ir skyrybos kodavimą, o kirilicos raidėms 8, 12, 11 eilutėse iš karto išmušė kelis „specialius ženklus“, neapsiribojant trimis skylutėmis viename stulpelyje.

Kurdami kompiuterį IBM 704, jie ilgai negalvojo apie jo simbolių kodavimą: paėmė perfokortose tuo metu jau naudotą kodavimą ir tik „padėjo į savo vietą“. 0 m., pereinant nuo BCDIC prie EBCDIC, kiekvieno simbolio žemos eilės keturi bitai buvo palikti nepakeisti, nors aukščiausios eilės bitai buvo šiek tiek sumaišyti. Taigi praėjusio amžiaus pradžioje Hollerith pasirinktas perfokortelių formatas turėjo įtakos visų IBM kompiuterių architektūrai, iki IBM Z imtinai.

Šaltinis: www.habr.com

Добавить комментарий