Wednesday, November 8, 2017

Istoria românească a limbajelor de asamblare


Dacă am afirmat că sunt o arheologie în ale programării mă bazez pe faptul că a scris oarece programe în ASSEMBLER pentru calculatorul IBM 360, în ASSIRIS pentru calculatorul FELIX C-256 și în ASM căci așa s-a numit anonimul, nebotezatul limbaj al PC-urilor IBM-compatibile. Uitam să scriu, dar am programat în anul al III-lea de studenție în perioadas de practică de vară și în COPCODER, limbajul calculatorului NEAC 1240.
Cine programează într-un limbaj de asamblare numai prima dată este greu. După aceea, dacă trece la altul și la altul, învață prin comparație, dar trebuie să rețină diferențele, nu altceva.
Cine vrea să înțeleagă evoluția calculatoarelor electronice trebuie să-și asume să intre în detalii tehnice extrem de dure, căci altfel totul este o construcție fără fundație, dar cu 100 de etaje, care se va nărui sub propria-i greutate.
Până găsesc eu detaliile pe care le-am folosit cândva dar pe care le-am uitat despre limbajul cod mașină al calcilatorului CIFA 101 Economist, voi scrie despre limbajul ASSEMBLER al calculatorului IBM 360 unde îmi aduc bine aminte niște chestii dar există și o literatură bogată, căci imoo care nu uită și nici nu pierd, știu să-și conserve trecutul cu sfințenie.
Se știe că limbajului de asamblare care are sub 256 de instrucțiuni i se structurează codul asociat fiecărei operații pe un byte, ceea ce duce la ideia că acele coduri se reprezintă în hexazecimal ca având valorile de la 00 până la FF.
Există moduri de adresare din care enumăr:
- modul de adresare cu operanzi în registri RR;
- modul de adresare imediat I;
- modul cu adresă calculată a unui operand RX;
- modul de adresare cu ambii operanzi în memorie MM.
Existând numai aceste 4 combinații ne gândim că pentru codificarea lor sunt necesari 2 biți, adică se asociază biții 00 pentru operațiile RR, biții 01 pentru operațiile imediate, biții 10 pentru operațiile registru cu adresă calculată și, respectiv, 11 pentru operațiile cu ambii operanzi definiți ca zone de memorie. Concluzia este simplă: o operație are mai multe coduri din moment ce diferă natura operanzilor. Pentru adunare vor exista mnemonicele:
 A -Add
AH-Add Half  cu codul 4A ceea ce arată că este de tip 10.
AL-Add Logical cu codul 5E ceea ce arată că este de tip 01.
ALR-Add Logical Register  cu codul 1E ceea ce arată că este de tip 01.
AR-Add Register cu codul 1A ceea ce arată că este de tip 01.
Instrucțiunea MVC-MoVe Character are codul D2 ceea ce arată că este de tip 11. Dacă se știe codul operației în hexazecimal se stabilește cu ușurință tipul prin expandarea acestuia în binar. Deci D2 este în binar 1101 0010, primele două poziții din stânga  sunt 11 adică modul MM. E normal să fie așa căci pentru a copia un șir de caractere este necesar să se stie adresa emițătorului și adresa receptorului darși lungimile lor. Emițătorul și receptorul fiind zone de memorie, desigur.
Cine lucrează în ASSEMBLER trebuie să-și gestioneze singur regiștri căci operațiile nu se fac oricum. Rezultatul înmulțirii se obține într-un registru dublu. La împărțire deîmpărțitul se încarcă într-un registru dublu ca restul să se obțină în registrul din dreapta, iar câtul în cel din stânga, registre care concatenate dau registrul dublu. Frumos, nu?
La calculatorul IBM 360 pentru limbajul de asamblare este interesant să se știe cum:
- se fac definirile și inițializările variabilelor;
- se apelează procedurile;
- se gestionează listele de parametri;
- se revine în programul apelator;
- se testează indicatorii de condiție;
- se implementează structra alternativă;
- se implementează structurile repetitive;
- se fac multe alte ghidușii absolut necesare unei programări de top.
Voi dezvolta treptat aceste lucruri, dar este esențial ca programatorul șă aibă capacitatea de a citi cod susrsă în general și cod mașină în special, că nu mai există nimeni în spatele lui care să-l ajute.
Știu că au venit specialiști de la IBM prin 1969 în ASE și i-au învățat pe mulți să programeze în ASSEMBLER, dar când a fost să se dea testul cei care s-au prezentat și au susținut acel test au fost Margareta PENCEA și Cristian POPESCU, estul corifeilor s-au dat loviți pentru a nu-și ciobi din blazon, dar după aceea nu-și mai încăpeau în piele. Numai cu absența aceea li se dădea peste nas.
Când în anul 1969 a fost cumpărat acel calculator IBM 360, firma a adus și documentație completă pentru ASSEMBLER, pe care am văzut-o ți unele volume chiar le aveam în biblioteca de la sala 2314 și acestea erau din câte îmi aminesc setul complet, regăsit de mine pe Internet sub titulatirule și codurile:
System/360 Assembler Language, Cod SR29-0231
System/360 Assembler Language, Cod SR29-0232
System/360 Assembler Language, Cod SR29-0233
System/360 Assembler Language, Cod SR29-0234
System/360 Assembler Language, Cod SR29-0235.
Știu sigur că era așa de clar prezentat totul, simplu, complet și direct că oricine care dorea învăța la un nivel foarte înalt să programeze în ASSEMBLER. Torul era să fie citte lucrurile cu atenție și să fie reținute detalii, mai ales constante legate de poziționări indicatori de condiție și mod efectiv de reaslizare a operațiilor bit cu bit. Limbajul de asamblare este neiertător cu abordările superficiale. De aceea nici nu a prins la noi, drept care literatura și mai ales produsele software realizate folosind ASSEMBLER sunt firave, ca să nu spun puțin semnificative. Am scris ceva proceduri în ASSEMBLER căci nici în COBOL și nici în FORTRAN nu aveam acces la anumiți biți, iar artificiile cu utilizarea de mățti în acele limbaje duceau la niște construcții de-a dreptul vulgare.
Istoria utilizării limbajului ASSEMBLER trebuie să consemneze că în 1971 la studenții de anil al V-lea Gabriel DIACONESCI cercetător din Centrul de Calcul al ASE preda un curs de ASSEMBLER și că în 1975 Gabriel DIACONESCU și Ion LUNGU au publicat în Lito ASE lucrarea Limbajul de programare ASSEMBLER de vreo 220 de pagini cu  bibliografia pur tehnică de mai jos:


În acel an am condus și eu niște seminarii la grupa din care făcea parte Octavian ȘĂRBAN, cel care a terminat Mecanizarea pe poziția de șef de promoție.
Voi fi foarte încântat să știu despre alte preocupări de ASSEMBLER, iar dacă se vor găsi și pagini de imprimantă cu programe de pe acele timpuri, deja s-ar continua ca istorie, modul în care a penetrat ASSEMBLER-ul în activitatea programatorilor de la noi.
M-a ajutat ASSEMBLER-ul și ASSIRIS-ul la apelarea procefurii RANDU din FORTRAN de la IBM în programe de pe FELIX C-256, căci diferențele de definire a constantelor ridicat probleme. Făcând tot felul de calcule am reușit să identific constanta cu care înmulțeam rezultatul final pentru a face corecția ca numerele pseudoaleatoare generate să fie exact aceleași rulate și pe IBM și pe FELIX C-256.
Limbajul MACRO-11 a avut o viașă scurtă căci nici calculatorul I-100 n-a fost produs decât undeva la 12 sau 13 ani.
Limbajul ASSIRIS a fost cu mult mai mult răspândit pentru că:
- numărul de calculatoare în uz la noi a fost de câteva sute de bucăți;
- numărul programatorilor era foarte mare;
- cei curioși să intre mai în măruntaiele programării a crescut vertiginos;
- au apărut cărți din care cea a lui Emil MUNTEANU era celebră;
- limbajul prin nenumăratele sale asperități era incitant;
- diferențierea depanatorilor o făcea cât de bine știau ei ASSIRIS.
M-am ocupat mai mult din rutină de limbajul ASSIRIS, dar am făcut o pasiune din ASM, limbajul de asamblare al microprocesoarelor Intel care au invadat lumea, limbaf care a beneficiat de tot ce se câștigase în teoria limbajelor de asamblare. Am predat așa ceva din 1990 până prin 2005 când s-a produs unirea acestul limbaj cu ingineria porgramării. Cum două săbii nu încap niciodată într-o teacă, m-am dat laoparte căci acolo nu mai aveam ce face, eu aveam drumul meu și făcusem tot ce-am vrut, cât am vrut, cum am vrut, cu cine-am vrut și mai ales am făcut lucrurile pas cu pas și  bine.
Detalii tehnici voi da separat căci nu vreau nici să plictisesc, nici să enervez și nici să se creadă că am memorie de elefant, deși recitind cărți și documentații îmi aduc aminte cu nostalgie de unele vremuri care au trecut ca vântul și ca gândul, iar timpul le-a măturat de nu mai există nici mărturii, nici calculatoare în funcțiune și nici preocupările de a digitiza, salvând  ceea ce încă nu a fost distrus.

(07 noiembrie 2017)

No comments:

Post a Comment