Hvorfor står ikke bokstavene på rad i EBCDIC?

ASCII-standarden ble tatt i bruk i 1963, og nå bruker knapt noen en koding hvis første 128 tegn skiller seg fra ASCII. Men frem til slutten av forrige århundre ble EBCDIC aktivt brukt - standardkodingen for IBM stormaskiner og deres sovjetiske kloner EC-datamaskiner. EBCDIC er fortsatt den primære kodingen i z/OS, standardoperativsystemet for moderne IBM Z stormaskiner.

Det som umiddelbart fanger oppmerksomheten når du ser på EBCDIC er at bokstavene ikke står på rekke og rad: mellom I и J og mellom R и S det var ubrukte posisjoner (på ES-datamaskinen for disse intervallene distribuert kyrilliske tegn). Hvem ville ha tenkt å kode bokstaver med ulik mellomrom mellom tilstøtende bokstaver?

Hvorfor står ikke bokstavene på rad i EBCDIC?

Selve navnet EBCDIC ("Extended BCDIC") antyder at denne kodingen - i motsetning til ASCII - ikke ble opprettet fra bunnen av, men basert på seks-bits BCDIC-kodingen, som har blitt brukt siden IBM 704 (1954)

Hvorfor står ikke bokstavene på rad i EBCDIC?

Det er ingen umiddelbar bakoverkompatibilitet: en praktisk funksjon ved BCDIC som gikk tapt i overgangen til EBCDIC var at tallene 0-9 tilsvarer kodene 0-9. Imidlertid er det hull på syv koder mellom I и J og i åtte koder mellom R и S har allerede vært på BCDIC. Hvor kom de fra?

Historien til (E)BCDIC begynner samtidig med historien til IBM – lenge før elektroniske datamaskiner. IBM ble dannet som et resultat av sammenslåingen av fire selskaper, hvorav det mest teknologisk avanserte var Tabulating Machine Company, grunnlagt i 1896 av Herman Hollerith, oppfinneren tabulator. De første tabulatorene talte ganske enkelt antall hullkort som ble stanset på et bestemt sted; men i 1905 begynte Hollerith produksjonen desimal tabulatorer. Hvert kort for desimaltabulatoren besto av felt med vilkårlig lengde, og tallene skrevet i disse feltene i vanlig desimalform ble summert over hele kortstokken. Oppdelingen av kartet i felt ble bestemt ved å koble ledningene på tabulatorens patchpanel. For eksempel, på dette Hollerith-hullkortet, lagret i Library of Congress er nummeret 23456789012345678 tydelig stemplet, ukjent som delt inn i felt:

Hvorfor står ikke bokstavene på rad i EBCDIC?

De mest oppmerksomme har kanskje lagt merke til at på Hollerith-kartet er det 12 rader for hull, selv om ti er nok for tall; og i BCDIC, for hver verdi av de mest signifikante to bitene, brukes bare 12 koder av 16 mulige.

Dette er selvsagt ikke en tilfeldighet. Opprinnelig hadde Hollerith til hensikt flere rader for "spesielle merker" som ikke ble lagt sammen, men bare regnet - som i de aller første tabulatorene. (I dag vil vi kalle dem "bitfelt".) I tillegg, blant "spesialmerkene" var det mulig å sette gruppeindikatorer: hvis tabuleringen ikke bare krevde sluttsummene, men også mellomliggende summer, ville tabulatoren stoppe når den oppdaget en endring i noen av gruppeindikatorene, og operatøren måtte skrive om delsummene fra de digitale tavlene til papir, tilbakestille tavlen og gjenoppta tabulering. For eksempel, ved beregning av regnskapssaldo, kan en gruppe kort tilsvare én dato eller én motpart.

I 1920, da Hollerith allerede hadde trukket seg tilbake, kom "skrivetabulatorer" i bruk, som var koblet til en teletype og kunne skrive ut subtotaler selv uten å kreve operatørintervensjon. Vanskeligheten nå var å finne ut hva hvert av de trykte tallene refererte til. I 1931 bestemte IBM seg for å bruke "spesialmerker" for å indikere bokstaver: et merke i 12. rad indikerte bokstaven fra A til I, i den 11. - fra J til R, på null - fra S til Z. Den nye "alfabettabulatoren" kunne skrive ut navnet på hver gruppe kort sammen med subtotaler; i dette tilfellet ble den uavbruttede kolonnen til et mellomrom mellom tegnene. Vær oppmerksom på at S er betegnet med hullkombinasjonen 0+2, og 0+1-kombinasjonen ble opprinnelig ikke brukt av frykt for at to hull ved siden av hverandre i samme kolonne ville forårsake mekaniske problemer hos leseren.

Hvorfor står ikke bokstavene på rad i EBCDIC?

Nå kan du se på BCDIC-tabellen fra en litt annen vinkel:

Hvorfor står ikke bokstavene på rad i EBCDIC?

Bortsett fra at 0 og mellomrom er reversert, definerer de mest signifikante to bitene "spesialmerket" som har blitt slått inn i hullkortet for det tilsvarende tegnet siden 1931; og de minst signifikante fire bitene bestemmer sifferet som er slått inn i hoveddelen av kortet. Symbolstøtte & - / ble lagt til IBM-tabulatorer på 1930-tallet, og BCDIC-kodingen av disse tegnene tilsvarer hullkombinasjonene som ble slått for dem. Når støtte for et enda større antall tegn var nødvendig, ble rad 8 stanset som et ekstra "spesialmerke" - dermed kunne det være opptil tre hull i en kolonne. Dette formatet med hullkort forble praktisk talt uendret til slutten av århundret. I USSR forlot de IBMs latinske og tegnsettingskoder, og for kyrilliske bokstaver slo de flere "spesialmerker" samtidig i radene 12, 11, 0 - ikke begrenset til tre hull i en kolonne.

Da IBM 704-datamaskinen ble opprettet, tenkte de ikke lenge på tegnkodingen for den: de tok kodingen som allerede ble brukt i hullkort på den tiden, og bare "satte den på plass." I 0, under overgangen fra BCDIC til EBCDIC, ble lavordens fire biter av hvert symbol stående uendret, selv om høyordensbitene ble blandet litt. Dermed påvirket hullkortformatet valgt av Hollerith på begynnelsen av forrige århundre arkitekturen til alle IBM-datamaskiner, til og med IBM Z.

Kilde: www.habr.com

Legg til en kommentar