Showing posts with label ASSEMBLER. Show all posts
Showing posts with label ASSEMBLER. Show all posts

Saturday, January 6, 2018

Programatorul de înaltă clasă

Și atunci, ca și acum, există o mare diversitate de programatori, dar cel mai bun lucru este să reușim să identificăm exact pe programatorul de care avem nevoie să ne rezolve în condițiile cele mai bune problema pe care vrem s-o rulăm pe calculator.
În acele vremuri nu oricine dorea chiar devenea programator pentru că:
- lipsea Internetul ca sursă de documentare;
- un calculator presupunea cunoștințe tehnice numeroase;
- limbajele de programare erau extrem de restrictive;
- centrele de calcul aveau criterii de angajare stricte;
- cărțile de programare nu erau laândemâna oricui;
- se formase deja o castă închisă a programatorilor;
- depanarea programelor era piatra dură de încercare.
Îți dădeai seama de programatorii foarte buni după cum le arătau fie imprimantele cu programe, fie foile de programare, căci un programator foarte bun scria un program, de asemenea, foarte bun, cu părți foarte clar structurate, cu includerea de secvențe elaborate și cu folosirea de chestiuni speciale care arătau că el știe meserie. Programatorul foarte bun realiza acel echilibru absolut necesar între cantitate și calitate și se vedea de la o poștă că programul său este precedat de nenumărate calcule din care a rezultat că secvențele incluse sunt dintre cele mai bune.
Și azi este tot așa. Mie nu trebuie să-mi arate cineva mii de programe scrise de el, ci un program. Acum când se lucrează online, oricare dintre programatori trebuie să se prezinte printr-o aplicație și după cum arată interfața, cât de șmecheră este aceasta și mai ales, dacă nu te lasă cu ochii-n soare, înseamnă că am în față un programator bun. Dacă programul se termină subit, aiurea cu un mesaj al sistemului de operare taman când eu vreau să mai rezolv și o altă problemă, înseamnă că respectiva hardughie este făcută după ureche și nu s-a ținut seama de cerințele unei aplicații online.
În vremurile de demult, programatorii de înaltă clasă aveau programe care:
- erau incluse în biblioteci renumite;
- rezolvau clase de probleme;
- admiteau probleme de dimensiuni nelimitate;
- gestionau numărul de iterații și precizia;
- aveau nenumărate validări care să asigure rezultate corecte și complete;
- erau înzestrate cu facilități de customizare;
- stocau seturi de date de intrare pe care le actualizau.
Am avut posibilitatea să cunosc pe unii dintre autorii acestor programe și să lucrez cu acele programe, pentru că la disciplina Programe aplicative care era predată studenților de la Facultatea de Cibernetică erau folosite astfel de produse program, multe dintre ele fiind făcute de firme străine, dar câteva precum VERONICA, CROCODIL, EMI, produsul de alocare și nivelare a resurselor, erau reaslizate de programatori din Centrul de Calcul al ASE. Duță Doru Lucian, Csaba Fabia, Ciobanu Gheorghe și Ruxanda Gheorghe sunt numai câțiva din marii programatori cu ale căror produse program am avut onoarea să lucrez la seminarii cu studenții ciberneticieni de-a lungul vremii. Despre Catona Ioan și Popescu Cristian voi scrie separat că ei au realizat implementarea la Danubiana a unor componente esențiale de calcul de necesar și de planificare a producției din sistemul BOMP al IBM. Erau și alți programatori eficienți care elaborau programe de bună calitate, căci nimeni nu rezista în branșă fără să aibă un nivel ridicat de performanță. 
În programare ori ești bun și oferi beneficiarului programe care să-i rezolve problemele, ori nu ești bun și tot timpul spui că ești cu programul ba în compilare, ba în editare de legături, ba în testare, până beneficiarul se plictisește și caută pe altul care să-i rezolve problema.
La un moment dat am ajuns să identific programatorii de înaltă clasă și pe cei pe cale de a deveni programatori foarte buni prin câteva semne pe care le-am considerat esențiale, precum:
- modestia;
- tăcerea;
- munca;
- ordinea;
- perseverența;
- concentrarea;
- disciplina.
Imediat ce o persoană îmi înșirea ceea ce știe el să facă și lista era mult prea bogată, o includeam în grupul celor care zic că se pricep la multe, dar de fapt nu știu să facă prea multe. Imediat ce vedeam niște for de programare cu ștersături și împrăștiate, se clarificau multe dintre minusurile celui care se credea a fi bun programator. Imediat de programtorul vorbea despre bogata sa e.xperiență dar nu avea cel puțin un program pe care să-l văd la treabă, îmi dădeam seama că respectivul doar se laudă. Imediat ce într-o discuție apăreau schimbări prea dese de variante de soluții, îmi dădeau seama că respectivul nu prea are capacitatea de a porni ceva și de a soluționa, căci el intervine și tot timpul modifică, fără să finalizeze vreun program.
În programare este esențială identificarea programatorilor de înaltă clasă căci lor trebuie să li se dea să facă programe mari și grele pe care ei au capacitatea de a le duce la bun sfârșit. Este deja o tragedie când se acordă un cec în alb unui programator lăudăros, fără rezultate, dându-i-se să facă un program greu, căci respectivul nu-l va face, va încurca lucrurile. Dacă ceea ce respectivul a făcut este dat unui programator foarte bun să continue, cu siguranță că programatorul foarte bun va arunca la coșul de gunoi acel program fără valoare și va lua el de la zero realizarea programului. Eroarea de management are riscuri mari în ceea ce privește depășirea de termene de predare a lucrărilor.



(06 ianuarie 2018)

Wednesday, December 13, 2017

Optimizarea alocării de memorie la definirea operanzilor

În limbajul de asamblare operanzii care se definesc folosesc descriptorii care au următoarele lungimi și restricții de aliniere:
dt - operandul are lungime de 10 bytes și adresa trebuie să fie un număr divizibil prin 2;
dq - operandul are lungime de 8 bytes și adresa trebuie să fie un număr divizibil prin 8;
dd - operandul are lungime de 4 bytes și adresa trebuie să fie un număr divizibil prin 4;
dw - operandul are lungime de 2 bytes și adresa trebuie să fie un număr divizibil prin 2;
db- operandul are lungime de 1 byte și adresa trebuie să fie un număr divizibil prin 1.
Dacă într-un program ASM se scriu primii operanzii definiți cu descriptorul dq apoi cei cu descriptorul dd, apoi cei cu descriptorul dt și  dw, iar numai în final toți operanzii cu descriptorul db contotul de locații va efectua amplasări compacte, pentru că sunt respectate cerințele de divizibilitate.
În secvența:

a              dq      15
b              dq      31
c              dq      100
x1            dw     40
x2            dw     110
x3            dw     564
y1            dt       4000
y2            dt       8000
z1            db       11
z2            db       3
z3            db       111
z4            db       1
se alocă 3*8+3*4+2*10+4*1 = 60 de bytes.
Dacă se construiește secvența:
a              dq      15
z1            db       11
b              dq      31
z2            db       3
c              dq      100
x1            dw     40
z3            db       111
x2            dw     110
x3            dw     564
y1            dt       4000
z4            db       1
y2            dt       8000
rezultatul este absolut nefavorabil pentru că necesarul de zonă de memorie va impune alinieri și deci bytes neutilizați. În cazul operanzilor care nu sunt aliniați se vor executa operațiile dar forțarea necesită cicluri suplimentare.
Lungimea se calculează după expresia:
L = 8+1+7+8+1+7+8+2+1+1+2+2+10+10= 75 bytes.
Cei 15 bytes apar pentru a fi respectată cerința de aliniere, adică divizibilitatea cerută de descriptori. În acest caz este vorba de un supliment de memorie care se evită prin regruparea tipurilor de operanzi. dacă însă un operand este definit la o adresă impară, el va fi referit cu un număr mai mare de cicluri mașină, ceea ce scade eficiența prelucrării.
Optimizarea alocării de memorie la definirea operanzilor este un mod de a face economie de memorie și de a reduce numărul de cicluri mașină, știindu-se că în assembler se face orice, cu orice. Totul depinde de programator.






(13 decembrie 2017)

Sunday, November 12, 2017

Structurarea pe blocuri

Limbajele de programare permit implementări care asigură încărcarea echilibrată a membrilor unei echipe de programatori, ceea ce înseamnă că aceștia au posibilitatea de a lucra cu unități de program numite fie module, fie blocuri, fiecare dintre ele având reguli proprii de asamblare a părților în întreg.
Sunt limbaje în care se lucrează cu blocuri delimitate prin acolade, {,  }.
Sunt limbaje care permit lucru cu subprograme care se constituie în entități independente.
Sunt limbaje care sunt structurate pe secvențe delimitate prin etichete.
Indiferent cum stau lucrurile, trebuie definite variabile pe diferite niveluri și gestionat conținutul acestora astfel încât să nu apară rezultate imprevizibile. Limbajele PASCAL și C operează cu variabile locale în raport cu blocul definit prin acolade, fiind considerate variabile locale, întrucât alocarea lor se realizaeză la intrarea în bloc și care se dealocă la ieșirea din bloc.


În lucru acum
(13 noiembrie 2017)

Alcătuirea bibliotecilor standard

Limbajele de programare au biblioteci standard care sunt asociate programelor prin comanda include.
Limbajul PASCAL conține biblioteci pentru:
- conversii;
- calcule matematice abs(), odd(), sqr(), sqrt(), sin(), cos(), ln(), exp();
- alocare dinamică a memoriei new, dispose, ;
- șiruri de caractere StrConcat(), StrDelete(), StrInsert(), StrLen(), StrScan(), StrSize(),
  SubStr(),Delete(), Insert(), Copy(), Length(), Str();
- lucru cu pointeri address(), Ofs(), Addr(), RawPointer(), peek(), poke(), Move(), Seg();
- generare numere pseudoaleatoare initrandom(), random();
- funcții pe mulțimi succ(), pred();
Limbajul  are biblioteci pentru:
- funcții matematice care se inserează în programe cu <math.h>;
- funcții de manipulare șiruri care se inserează în programe cu<string.h>;
- funcții matematice cu numere complexe se inserează în programe cu <complex.h>;
- funcții de gestiune a timpului din calculator care se inserează în programe cu <time.h>.
Limbajul C conține cu mult mai multe biblioteci precum <stdio.h>, <limits.h>, <stddef.h> și multe altele. Este necesar după ce programatorul se familiarizează cu limbajul să treacă la studierea acestor biblioteci și cu mare atenție să vadp ce parametri au funcțiile, dar mai elas ce returnează ele, căci el are posibilitatea de a exploata acele rezultate returnate, precum se întâmplă la instrucțiunile de citire scriere dar și la cele de deschidere, repsectiv de închidere de fișiere unde numărul returnat dă informații prețioase pe care programatorul le introduce inteligent în expresii condiționale și după aceea în secvențe compuse în care apare if(), neinițiații mirându-se siderați.



În lucru acum
(13 noiembrie 2017)

Sintaxa limbajului

Înainte de orice, programatorul trebuie să citească cu atenție regulile de sintaxă ale limbajului pentru a ști:
- ce să ceară limbajului;
- ce are voie să scrie în programe;
- care este lista de cuvinte cheie;
- care este setul de caractere utilizat;
- ce nu are voie să construiască;
- cum se termină o instrucțiune;
- ce rol alre spațiul între cuvinte;
- care este diferența între - și _;
- cum se scriu comentariile;
- ce este obligatoriu și ce nu.
Sunt definite complet folosind diferite modalități toate limbajele de programare. Cel mai frecvent este folosită pentru a descrie sintaxa unui limbaj BNF - Backus-Naur Form.
Pentru expresiile unare din limbajul C se propune definirea:
<unary-expression> ::= <postfix-expression>
                     | ++ <unary-expression>
                     | -- <unary-expression>
                     | <unary-operator> <cast-expression>
                     | sizeof <unary-expression>
                     | sizeof <type-name>
Toate celelalte definiri sunt date la adresa, unde construcțiile se realizează din aproape în aproape. Intrând pe Internet se găsesc definirile BNF pentru toate limbajele de programare. Este esențial să se citească și elementele cantitative referitoare la lungimi, complexități și niveluri de indirectare.
În FORTRAN numărul maxim de dimensiuni este 7 pentru masive.
În limbajul C numărul maxim al nivelurilor de indirectare este 3.
În COBOL lungimea etichetelor nu depășește 31 de caractere.


În lucru acum
(13 noiembrie 2017)

Implementarea structurilor fundamentale de control


Structurile fundamentale sunt:

  • structura liniară în care instrucțiunile se execută una după cealaltă;
  • structura alternativă în care se produce o selecție funcție de care se execută una sau alta dintre instrucțiuni, după care se revine la execuție în secvență:
  • structura repetitivă în care o anumită secvență de instrucțiuni se execută de mai multe ori, fie că numărul de repetări este cunoscut, fie până când o condiție este îndeplinită și numărul de repetări nu este cunoscut de dinainte;
  • structura alternativă multiplă care presupune selectarea dintre mai multe secvențe de instrucțiuni a uneia care se execută la un moment dat, după care se revine la execuția în secvență a altor instrucțiuni.

De la limbaj la limbaj există diferite implementări ale acestor structuri de control și am mari dubii că sunt prea multe limbajele în care să nu existe instrucțiunea IF() THEN....ELSE.
Limbajul de asamblare conține tot felul de implementări și încă libere ale structurilor de control. Dacă în FORTRAN nu sunt permise intersecțiile de domenii în secvențele de program scrise în limbaj de asamblare așa ceva este permis. În limbajele de asamblare însă se construiesc secvențele pas cu pas, prin evaluări de expresii, comparări și salturi necondiționate cât îi poftește inima programatorului. Chiar dacă există instrucțiunea LOOP programatorul o gestionează chiar cum vrea el sau o ignoră construind repetitivitatea după pofta inimii cu evaluări, comparări și salturi condiționate combinate cu salturi necondiționate.
Limbajul FORTRAN implementează structurile fundamentale de control destul de ușor și simplu. Pentru structura alternativă implementarea este  prin:
IF(expresie) eticheta1,eticheta2,eticheta3
unde:
eticheta1 - dirijează execuția spre o secvență dacă expreia evaluată este mai mică decât  zero;
eticheta2 - dirijează execuția spre o secvență dacă expreia evaluată este egală cu zero;
eticheta3 - dirijează execuția spre o secvență dacă expreia evaluată este mai mare ca zero.
Structura repetitivă este implementată cu construcția:
                 DO eticheta  variabila_control = valoare_inițială, valoare_finală, rație
                 ......................
eticheta    ultima_instrucțiune_repetată
unde:
eticheta  - delimitează sfârșitul secvenței de repetat care începe după instrucțiunea DO;
variabila_control  - variabila cu care se gestionează numărul repetărilor, căci nivelul este între valoarea inițială și valoarea finală;
valoare_inițială - valoarea de start a variabilei de control;
valoare_finală - este valoarea limită superioară care nu este depășită de variabila de control; în caz de depășire repetarea este întrerultă;
rație - este o constantă sau o variabilă care arată cu cât se modifică variabila de control la iterația următoare.
Astructura alternativă multiplă este implementată în acest limbaj cu ceea ce se numea GO TO calculat, o construcție de forma:
GO TO (eticheta1, eticheta2, eticheta3,...., etichetan), variabilă_control
în care:
etichetai  -  arata la ce instrucțiune se face saltul dacă variabila_control este egală cu i:
variabila_control - este variavila care are valori cuprinse între 1 și n.
Acest limbaj nu are structura repetitivă condiționată anterior DO-WHILE și nici pe dea condiționată posterior, DO-UNTIL. Acestea se simulează folosind IF() și o întrețesere de instrucțiuni GO TO, ceea ce programarea structurată implementată forțat pentru FORTRAN IV se străduia să facă greoi, aproape imposibil de acceptat.
Limbajul C dispune de tot tacâmul de construcții pentru a implementa toate structurile de control fără mari probleme și tocmai de aceea a fost acceptat ca fiind un limbaj complet, ușor și prietenos.
Structura liniară este implementată folosind expresii aritmetice, expresii de atribuire dar și apeluri de funcții.
Structura alternativă este implementată folosind construcția:
if (expresie) {
                      secventa1;
                     }
                      else
                     {
                      secventa2;
                      }
dacă după evaluarea expresiei se obține că este adevărată se execută secventa1, În caz contrar se execută secventa2. Se observă că lipsește then pentru a selecta secventa1, lucru nenecesar, ci presupus, că nu tot ceea ce este în vorbirea curentă trebuie preluat în limbaj.
        

În lucru acum
(13 noiembrie 2017)

Modul de implementare a recursivității

Limbajul FORTRAN nu are implementată recursibitatea.
Limbajul COBOL nu are implementată recursibitatea.
Limbajul ALGOL nu are implementată recursibitatea.
Limbajul PASCAL are implementată recursibitatea chiar la nivel de definire de variabile.
Limbajul C are implementată recursibitatea chiar la nivel de definire de variabile.
Limbajele de  asamblare implementează recursibitatea prin gestionarea stivelor de către programator.



În lucru acum
(13 noiembrie 2017)

Modul în care se scriu comentariile

Cei ce au făcut mentenanță în programe FORTRAN și COBOL știu pe pielea lor de programatori care au fost binefacerile introducerii de comentarii în programe care au lămurit:
- semnificația datelor definite;
- semnificația secvențelor de prelucrare;
- localizarea sursei unde se află formulele de calcul;
- legislația care a stat la baza unor blocuri decizionale;
- numele programatorilor care au realizat textele;
- semnificația unor constante folosite pentru diferite stări;
- semnificația codurilor utilizate;
- restricții privind pentru definirile  parametrilor.
În limbajul FORTRAN comentariile sunt date de litera C pe prima coloană a formularului de programare.
În limbajul C pentru comentarii există două modalități de a le introduce:
- dacă se dorește mai multe linii de comentarii succesive se folosesc /* pentru debut și */ pentru final;
- dacă se dorește comentariu pentru o linie sursă se scrie un text oarecare după //.
În limbajul PASCAL comentariile se introduc prin (* texte oarecare *) sau  {*text oarecare *}, iar dacă se dorește pe linia unei instrucțiuni să se introducă un text se scrie // text oarecare.
În limbajele de asamblare comentariile diferă de la calculator la calculator.În limbajul ASSEMBLER al IBM comentariile încep cu un asterisc pe prima coloană. În limbajul ASSIRIS comentariul este și el la loc de cinste. În limbajul ASM cel folosit acum de toate PC-urile comentariile au în fața textului punct și virgulă, adică ; permițând scrierea în acest fel de texte pe o line dar și după fiecare instrucțiune pentru a lămuri semnificația acesteia.



În lucru acum
(13 noiembrie 2017)

Regula de evaluare a expresiilor

Limbajele de programare au operanzi și operatori cu care construiesc expresii mai complexe sau mai puțin complexe. Există o singură regulă de evaluare a expresiilor, indiferent care sunt acestea și această regulă vizează:
- prioritatea operatorilor;
- sensul de parcurgere în procesul de evaluare.
Pentru limbajul C există tabelul:
PrioritateaOperatorDescriereaAsociativitatea
1++ --Post incrementare, respectiv decrementare 
Stânga la dreapta
()Apel funcție
[]Definire în masiv
.Referire membru în articol
->accesare pointeri în structuri
(type){list}Compunere literali
2++ --Pre Incrementare și pre decrementareDreapta la stânga
+ -Operatori unari
! ~negarea logică NOT și complement pe biți NOT
(type)Tipul
*Referirea lui
&Adrea lui
sizeofLungimea lui
_AlignofAliniere impusă
3* / %Înmulțire, împărțire și împărțire cu restStânga la dreapta 
4+ - Adunare și scădere
5<< >>Deplasare pe biți
6< <=Operatorul relațional  <  și ≤
> >=Operatorul relațional  >  și ≥ 
7== !=Operatorul relațional =  și  ≠ 
8&Operatorul și pe bițiAND
9^Operatorul logic sau exclusiv  XOR (exclusive or)
10|Operatorul logic sau iclusiv OR 
11&&Operatorul logic AND
12||Operatorul logic OR
13?:Operatorul ternarDreapta la stânga
14=Simple assignment
+= -=Assignment by sum and difference
*= /= %=Atribuire cu operații aritmetice
<<= >>=Atribuirea cu deplasare biți spre stânga, dreapta
&= ^= |=Atribuirea cu operații pe biți AND, XOR, and OR
15,VirgulaStânga la dreapta
Expresiile din parantezele rotunde se evaluează primele.
Expresia *alfa++ se evaluează *(alfa++) pentru că postincrementarea are prioritatea 1, iar operatorul de referire are prioritatea 2.
Expresia  a=3, b=5, c=7;
se evaluează de la stânga spre dreapta căci operatorul virgulă așa cere.  Se evaluează mai întâi atribuirea a=3, apoi se inițializează  b și la urmă se evaluează expresia c=7.
Expresia:
e = a < d ? a++ : a = d
se evaluează astfel:
e = ( ((a < d) ? (a++) : a) = d )
Operatorul = are prioritatea 14 și presupune evaluare de la stânga la dreapta.
Operatorul < are prioritatea 6.
Operatorul  de postincrementare ++ are prioritatea 1.
Operatorul ?: are prioritatea 13.
Se evaluează expresia a<d.
Dacă rezultatul evaluării este adevărat are loc postincrementarea și apoi e=a.
Dacă rezultatul evaluării nu este adevărat are loc atribuirea e=d.

În lucru acum
(13 noiembrie 2017)

Lista de operatori și rangurile lor

Un limbaj diferă de altul prin lista de operatori, listă care dă puterea unui limbaj. Operatorii sunt cei care spun de fapt ce se întâmplă cu zonele de memorie, până unde se merge , adică la ce nivel:
- bit;
- byte;
- șir de biți;
- cuvânt;
- dublu cuvânt;
- caracter;
- șir de caractere.
Limbajele mai slabe merg la nivel de byte și la nivel de cuvânt sau dublu cuvânt și șir de caractere. Limbajele mai sofisticate merg și în interiorul byte sau a cuvântului.
Lista operatorilor în limbajele de asamblare este dată de lista de instrucțiuni, căci fiecare cod de operație înseamnă un operator de fapt. Conchid că limbajul de asamblare are cea mai complexă listă de operatori și că în limbajul de asamblare se face orice cu orice. SE găsesc instrucțiuni pentru:
- operatorii aritmetici;
- operatorii de comparare;
- operatorii logici;
- operatorii pe șiruri de biți;
- operatori atribuire;
- operatori de inițializare;
- operatori incrementare/decrementare;
- operatorii pe șiruti de caractere.
Lista operatorilor în limbajul COBOL este  formată din:
- operatorii aritmetici + - * / **, add, subtract, multiply, divide;
- operatorii de comparare = < > <= >= <> less than, greater thac, equal to ;
- operatorii logici and, or, not ;
- operatorii pe șiruri de biți b-and, b-or, b-xor, b-not, b-left, b-right;
- operatori atribuire move, set, compute;
- operatori de inițializare move;
- operatorii pe șiruti de caractere move .
Lista operatorilor în limbajul C este  formată din:
- operatorii aritmetici +, -, *, /, %;
- operatorii de comparare == != ;
- operatorii logici !, &&, ||, or, not, ;
- operatorii pe șiruri de biți ~, &, |, ^,<<, >>  ;
- operatori atribuire compu;i +=,-=, *=,/=,%=,  |=, ^=, &=,<<=, >>= ;
- operatori de inițializare;
- operatori incrementare/decrementare ++, --;<, <=, !<, >,>=, !>
- operatori pentru membrii unei structuri agregate de date . și -> ;
- operatori cu pointeri & și *;
- operatorii pe șiruri de caractere definiți ca funcții  în biblioteca string.h.
În limbajul C virgula este operator. Există operatorul ternar ?:, dar și mulți alți operatori care sunt de fapt funcții implementate în limbaj precum sizeof(), new, delete, type și mulți alții.
Lista operatorilor în limbajul PASCAL este  formată din:
- operatori arithmetici +, -, *, /, %;
- operatori relationali =, <, <=, >, >=, <> ;
- operatori booleeni and, and  then, or, or else, not;
- operatori pe biți &, |, !, ~, <<, >> ;
- operatori pe mulțimi +, -, *, ><, <=, include, exclude, in;
- operatori pe șiruri de caractere sub forma unor funcții de bibliotecă.
Comparând listele operatorilor, se vede că limbajul C este cel mai puternic, dar după oricare alt limbaj de asamblare, deși limbajul PASCAL permite operare elegantă pe mulțimi.

În lucru acum
(13 noiembrie 2017)

Flexibilitatea de a defini tipuri și structuri de date





În lucru acum
(13 noiembrie 2017)

Setul de caractere

Fiecare limbaj are setul său de caractere.
Limbajul C are setul de caractere format din:
- literele mari de la A la Z, literele mici de la a la z;
- cifrele 0, 1, 2, 3, 4, 5, 6, 7, 8, 9;
- caracterele speciale  ~, %, |, @, +, <, _, -, >, ^, #, =, &, $, /, (, *, \, ), ′, :, [, ", ;, ], !, ,, {, ?, ., };
- caracterele denumite spații albe \b, \t, \v,  \r, \f, \n, \\, \’, \", \?, \0, \a, \x, \o.
Limbajul FORTRAN are setul de caractere format din:
- literele mari de la A la Z;
- cifrele 0, 1, 2, 3, 4, 5, 6, 7, 8, 9;
- caractere speciale ., , (, ), =, +, -, /, *, **, $, blanc.
Limbajul COBOL are setul de caractere format din:
- literele mari de la A la Z;
- cifrele 0, 1, 2, 3, 4, 5, 6, 7, 8, 9;
- caractere speciale ., , (, ), =, +, -, /, *, **,  blanc.
Limbajul PASCAL are setul de caractere format din:
- literele mari de la A la Z;
- literele mici de la a la z;
- cifrele 0, 1, 2, 3, 4, 5, 6, 7, 8, 9;
- caractere speciale ., , (, ), =, +, -, /, *, **,  blanc, {, }, [, ], ;, :, =, <. >, ~, %, $, #, !.
Semnificația caracterelor trebuie studiată cu mare atenție căci nu este obligatoriu ca un simbol să aibă aceeași semnificație la toate limbajele de programare. Se învață un limbaj cunoscând diferențele față de limbajul anterior în care a lucrat programatorul, dar acele diiferențe trebuie nu identificate, ci învățate și trebuie ținut seama de ele.
În lucru acum

(13 noiembrie 2017)

Thursday, November 9, 2017

Lucrul cu registre în programe ASSEMBLER

În limbajul de asamblare sunt instrucțiuni de tip RR, adică ambii operanzi sunt în registre. Calculatorul are 16 registre numerotate cu 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 dar este dificil de a le fiferenția de constantele  întregi 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15, drept care este rezonabil ca în programe să se scrise secvența:
R0        EQU   0
R1        EQU   1
R2        EQU   2
R3        EQU   3
R4        EQU   4
R5        EQU   5
R6        EQU   6
R7        EQU   7
R8        EQU   8
R9        EQU   9
R10      EQU   10
R11      EQU   11
R12      EQU   12
R13      EQU   13
R14      EQU   14
R15      EQU   15
și în loc de a scrie secvența de instrucțiunile
AR       1,2          adună la conținutul registrului 1 conținutul registrului 2
SR        7,5          scade din valoarea din registrului 7 valoarea din registrul 5
LR        11,15      inițializează registrul 11 cu valoarea din registrul 15
se va scrie secvența
AR       R1,R2          adună la conținutul registrului R1 conținutul registrului R2
SR        R7,R5          scade din valoarea din registrului R7 valoarea din registrul R5
LR        R11,R15      inițializează registrul R11 cu valoarea din registrul R15
care este ușor de urmărit.
Unii programatori sunt și mai clari în textele lor utilizând recvența:
REG0       EQU   0
REG1       EQU   1
REG2       EQU   2
REG3       EQU   3
REG4       EQU   4
REG5       EQU   5
REG6       EQU   6
REG7       EQU   7
REG8       EQU   8
REG9       EQU   9
REG10      EQU   10
REG11      EQU   11
REG12      EQU   12
REG13      EQU   13
REG14      EQU   14
REG15      EQU   15
și în loc de a scrie secvența de instrucțiunile
AR       1,2          adună la conținutul registrului 1 conținutul registrului 2
SR        7,5          scade din valoarea din registrului 7 valoarea din registrul 5
LR        11,15      inițializează registrul 11 cu valoarea din registrul 15
se va scrie secvența
AR       REG1,REG2          adună la conținutul registrului REG1 conținutul registrului REG2
SR        REG7,REG5          scade din valoarea din registrului REG7 valoarea din registrul REG5
LR        REG11,REG15      inițializează registrul REG11 cu valoarea din registrul REG15
care este cu mult mai ușor de urmărit, căci REG este prescurtare de la cuvântul REGISTRU.
Lucrul cu registre în programe ASSEMBLER trebuie să devină ușor și sugestiv, altfel lucrurile devin foarte greoaie în procesul de mentenanță care de regulă nu este făcut de cel care a scris programele inițiale.



(09 noiembrie 2017)

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)

Monday, October 30, 2017

Profesorul Ion Gh. ROȘCA

Despre profesorul Ion Gh. ROȘCA am de scris nu un roman, ci o mie de romane, căci ne cunoșteam din anul universitar 1967 - 1968 pe când locuiam la căminul C1 din Agronomie, eu fiind student în anul al III-lea la Mecanizare cum se spunea secției de Mecanizare și automatizare a calculului economic de la Facultatea de Calcul economic și cibernetică economică din ASE. El era student în anul întâi tot la Mecanizare. Ne-am cunoscut la un telefon public. El a intrat în vorbă cu mine. Pe atunci era un tânăr înalt, slăbuț, cu mustață, cu o pălărie cu borul foarte mare și cu un raglan larg și lung, legat cu cordon în jurul mijlocului. De atunci am rămas într-o excelentă relație de colegialitate, până în 29 octombrie 2011.
Ion Gh. ROȘCA a terminat facultatea șef de promoție în anul 1972.
Ion Gh. ROȘCA a devenit asistent universitar stagiar în toamna anului 1972.
Ion Gh. ROȘCA a fost promovat prin concurs lector universitar în anul 1979.
Ion Gh. ROȘCA a devenit conferențiar universitar în anul 1990.
Ion Gh. ROȘCA a ocupat prin concurs funcția de profesor universitar în 1994.
Ion Gh. ROȘCA a coordonat doctorate începând cu anul ..............
Ion Gh. ROȘCA a fost primul șef al Catedrei de Informatică Economică începând cu anul 1990.
Ion Gh. ROȘCA a ocupat funcția de rector al ASE în intervalul 2004 -2012.
Ion Gh. ROȘCA a primit premiul Academiei RSR pentru cartea Informatica în 1987.
Ion Gh. ROȘCA a primit premiul Academiei Române Petru S. AURELIAN în 2006.
Profesorul Ion Gh. ROȘCA este coautor a numeroase articole și cărți. Dintre cărți enumăr:

  • Ion Gh. ROȘCA (coordonator), Constantin APOSTOL, Bogdan GHILIC-MICU, V. ROȘCA - Prelucrarea fişierelor în PASCAL, Editura Tehnică, Bucureşti, 1994, 228 pag.
  • Ion Gh. ROȘCA (coordonator), Constantin APOSTOL, Bogdan GHILIC-MICU, V. ROȘCA,, Adriana IONESCU, Ileana VREJBA - COBOL complet pentru calculatoare profesionale, Editura ALL, Bucureşti, 1994, 343 pag.
  • Ion Gh. ROȘCA, Constantin APOSTOL (coordonatori), Bogdan GHILIC-MICU, V. TEODOR, Manole VELICANU – Tehnica programării COBOL pentru calculatoare IBM PC, Editura ALL, Bucureşti, 1992, 315 pag.
  • Ion Gh. ROȘCA, Ion LUNGU, Nely MUȘAT. – Baze de date relaţionale. Utilizarea limbajului SQL PLUS, Editura ALL, Bucureşti,, 1992, 179 pag.
  • Ion Gh. ROȘCA, Gheorghe DODESCU ş.a. – Sistemele de operare MIX şi programarea în limbajul MACRO, volumul II, Editura, Tehnică, Bucureşti, 1991, 367 pag.
  • Ion Gh. ROȘCA, Gheorghe DODESCU ş.a. – Informatica, Editura Ştiinţifică şi Enciclopedică, Bucureşti, 1987, 602 pag. 
Mai sunt multe, chiar foarte multe de scris, dar voi încheia cu ceea ce mi se pare mie extraordinar, adică despre grupul de lucru format din tinerii din acele vremuri de demult Valer ROȘCA, Ion Gh. ROȘCA, Constantin APOSTOL și Ion IVAN, adică subsemnatul, care munceam din greu la disciplina de Limbaje de programare și care ne zbuciumam să scriem cărți precum:

  • Valer ROSCA, Constantin APOSTOL, Ion IVAN, Ion Gh. ROSCA - Limbaje de programare. Limbajul de programare ASSIRIS, Lito ASE, Bucuresti, 1977, 516 pg.
  • Valer ROSCA, Constantin APOSTOL, Ion IVAN, Ion Gh. ROSCA - Memorator pentru limbajul de programare ASSIRIS, Lito ASE, Bucuresti, 1977, 167 pg.
  • Valer ROSCA, Constantin APOSTOL, Ion IVAN, Ion Gh. ROSCA - Limbaje de programare - Limbajul FORTRAN si FORTRAN conversational, LITO ASE, Bucuresti, 1980, 224 pg.
  • Valer ROSCA, Constantin APOSTOL, Ion Gh. ROSCA, Pavel NASTASE, Ion IVAN - Indrumar pentru elaborarea proiectelor la disciplina Limbaje de programare a calculatoarelor electronice, LITO ASE, Bucuresti, 1982, 138 pg.
  • Valer ROSCA,Constantin APOSTOL, Ion IVAN, Sergiu COMAN, Ion Gh. ROSCA - LIMBAJE DE PROGRAMARE, metoda programatorului sef. Studiu de caz, Editura ASE, Bucuresti, 1979, 115 pg

A mai fost un moment pe care nu vreau să-l ratez: ondeva la mijlocul anilor '80 la o sesiune de examen s-a produs un fenomen neașteptat în sensul că au promovat la disciplina Limbaje de programare sub 25% dintre studenții. Cursuri susțineau la acea disciplină lectorii doctori Valer ROSCA, Constantin APOSTOL, Ion IVAN, Ion Gh. ROSCA. Am fost chemați la un prorector împreună cu decanul, șeful de catedră și secretarul de partid. După ce ne-a porcăit cum a știut el mai bine, respectivul a comandat un panou pe care erau numele noastre, ale celor patru, procentele de promovabilitate în dreptul fiecăruia și o serie de întrebări dure adresate nouă. Efectul a fost pe dos, căci colegii cu care ne întâlneam ne felicitau pentru curajul de a arăta adevărata stare a ceea ce se întâmpla într-un învățământ superior politizat la maximum. Numai intervenția marelui profesor Alexandru GHEORGHIU la recotor a făcut să dispară acel panou mârșav. Peste ani, prin 2011 respectivul a primit din mâna lui Ion Gh. ROȘCA o importantă distincție. Atunci i-am zis colegului meu că victima își premiază călăul. 
Au mai fost și alte momente, dar deocamdată, atât.




(30 octombrie 2017)

Saturday, October 21, 2017

Producția de tehnică de calcul

România a fost până în 1989 un producător important de tehnică de calcul, incluzând aici calculatoare dar și periferice și consumabilele aferente. Cum în mintea tulbure a unora industria noastră era o grămadă de fiare vechi, mulți au pus umărul la a distruge tot ce exista chiar și bun, iar acum la 30 de ani de la tragicele evenimente din decembrie 1989 ne prezentăm fără o industrie de tehnică de calcul, ci pur și simplu, suntem noi, cei în costume tradiționale care credem că vom face agricultură bio, fără autostrăzi și plini de corupție, de se uită toată lumea la noi cum ne zvârcolim în neputința de a face lucruri bune și de a merge înainte, chiar dacă avem creștere economică de 5,7%.
Prin producție de calculatoare eu înțeleg, ca acestea să fie realizate:
- câțiva ani consecutiv;
- în câteva zeci de bucăți sau chiar sute sau mii;
- pe baza unui flux bine definit;
- într-o entitate stabilită clar, secție, fabrică;
- cu destinație de utilizare curentă;
- având un nivel de performanță ridicat și comparabil;
- cu contribuții majpre de la noi.
În acest context se vorbește de producție  de calculatoare pentru:
CIFA         - Calculatorul Institutului de Fizică Atomică în 1954 - 1963;
MECIPT   - Mașina Electronică de Calcul a Institutului Politehnic Timișoara în 1968 - 1974;
DACICC  - Dispozitiv Automat de Calcul al Institutului de Calcul din Cluj în 1963 - 1968;
FELIX C  - realizat de ICE în variantele Felix C-256, Felix C-32, Felix C-512, Felix C-515, 
                   Felix C-1024, Felix C-5000, Felix C-8000, Felix C-8010, produs între 1970 - 1978; 
I-100        - INDEPENDENT 100, minicalculator ITC Timișoara, produs intre 1978 - 1989;
Felix PC   - realizat cu procesoare Procesor Intel 8080 sau Intel 8086/8088 si 8087, 
                   de ICE în perioada 1985 - 1990;
JuniorXT  - realizat de IIRUC înainte de Revoluția din decembrie 1989;
Felix M    - realizat la ICE între 1975-1984, cu procesoare Intel 8080 sau Intel 8086 
                   în variantele Felix M18, Felix M18B, Felix M118GS, Felix M-216.
Au mai fost probabil și alte calculatoare. Totuși, prin tehnică de calcul se înțeleg și aritmpometrele și riglele de calcul și abacurile, numai că toată lumea le trece în planul al treilea, știut fiind faptul că lucrurile mai noi sunt și mai interesante, în timp ce mijloacele mecanice, căzute în desuetitudine, sunt apoape uitate, deși cu ele ar trebui să se înceapă totul. În mediul virtual se găsesc acum multe informații, unele suficient de riguroase și de la ele trebuie pornit pentru a avea o imagine cât mai clară și cât mai completă despre cum au stat lucrurile cu producția de tehnică de calcul de la noi. Din bucăți disparate, puse cap la cap există șansa reală de a se constitui imaginea a ceea ce ne interesează pe toți, adică o istorie cât mai puțin distorsionată a ceea ce a însemnat informatica românească de la începuturi și până în zilele noastre, când multe informații se perd sub ochii noștri exigenți.


(21 octombrie 2017)

Tuesday, September 26, 2017

Cărți de programare în limbaje de asamblare

În opinia mea, cine dorește să stăpânească cu adevărat tainele programării calculatoarelor, este absolut necesar să lucreze în limbaj de asamblare, pentru a avea acces la cele mai fine aspecte ale programării calculatoarelor.
Orice caarte de limbaje de programare se structurează pornind de la instrucțiunile limbajelor de programare, căci de aici fiecare programator își dă seama de puterea limbajului în care lucrează după cum acel limbaj permite:
- accesul ma byte și la bit;
- operatori cât mai variați;
- stăpânirea indicatorilor de condiție;
- implementarea tuturor structurilor de control;
- dezvoltarea de mecanisme proprii de referire;
- lucru pe orice zionă de memorie, oricum.
Am apreciat foarte mult limbajele de asamblare pentru că ele fac să se înțeleagă tot ce este de înțeles din zona erorilor de programare, mai ales când apar mesaje și trebuie trecut la o depanare logică și mai ales eficientă, bazată pe parcurgerea drumului invers de la efect către cauză. În continuare voi reda câteva din titlurile de lucrări legate de limbajele de asamblare.
  • Gabriel DIACONESCU, Ion LUNGU - Limbajul de programare ASSEMBLER, Editura ASE, București, 1975, 219 pg. 
  • Dan SOMNEA, Teodor VLĂDUȚ - Programarea ăn ASSEMBLER, Editura Tehnică, 1992, 328 pg.  
  • Al. TEODORESCU, I. CATONA, C. POPESCU - Sistemul Felix C-256. Limbajul ASSIRIS, Editura Tehnica, Bucuresti, 1974, 447pg. 
  • Gheorghe MUSCĂ - Programare în limbaj de asamblare, Editura Teora, București, 1997, 322 pg. 
  • Emil MUNTEANU, Viorel COSTEA, Mircu MITROV - Programarea în limbaje de asamblare ASSIRIS, Editura Tehnică, București, 1976, 336 pg. 
  • T. ILIN, A. SOCENEANȚU, G. GAVRILESCU - Limbaje de asamblare pentru calculatoarele electronice numerice : Asamblare, Editura Facla, Timișoara, 1975, 196 pg. 
  • Florin DRAGOMIR, Otilia DRAGOMIR - Programarea în limbaj de asamblare a microcontrolerelor, Editura, Matrix Rom, București, 2013, 186 pg. 
  • Vasile LUNGU, Gheorghe PETRESCU, Zoe RACOVIȚĂ -Programare în limbaj de asamblare : Îndrumar de laborator; Probleme, Editura UPB, București, 1998, 110 pg. 
  • Vasile LUNGU - Procesoare Intel : Programare în Limbaj de asamblare, Editura Teora, București, 2001, 304 pg. 
  • Valer ROSCA, Constantin APOSTOL, Ion IVAN, Ion Gh. ROSCA - Limbaje de programare. Limbajul de programare ASSIRIS, Lito ASE, Bucuresti, 1977, 516 pg.
  • Valer ROSCA, Constantin APOSTOL, Ion IVAN, Ion Gh. ROSCA - Memorator pentru limbajul de programare ASSIRIS, Lito ASE, Bucuresti, 1977, 167 pg. 
  • Adrian DAVIDOVICIU (coordonator) - Mix şi Macro, vol1 și 2,  Editura Tehnică, Bucureşti, 1991. 
  • Adrian DAVIDOVICIU (coordonator) - MIX şi MACRO : Tehnici de programare în limbajul MACRO, Vol. 3, Editura Tehnică, București, 1991, 324 pg.
  • Dan ȘERBĂNAȚI, Valentin CRISTEA, Claudiu POPESCU - LLimbajul MACRO-11, Îndrumar de laborator, Editura UPB, București, 1985.
  • Gheorghe DODESCU, Constantin APOSTOL, Florin PILAT, Ion Gh ROȘCA - Limbajul MACRO-11, tehnici de realizare a programelor, Editura ASE, București, 1990.
  • Mihai JITARU, Alexandru TEODORESCU - Limbaje de programare - ASSIRIS, manual pentru licee de matematică și fizică, clasa a XII-a,  Editura didactică și pedagogică, București, 1978.
Mi-am adus aminte de ceea ce se spune în legătură cu roboții și anume că aceștia nu vor fi niciodată în stare să creeze roboți cu o complexitate mai mare decât complexitatea lor. Așa stau lucrurile și în cazul dezvoltării de limbaje de programare și de instrumente pentru dezvoltarea software. În momentul când se va dori dezvoltarea de noi proprietăți ale datelor, de noi mecanisme care să opereze la nivelul zonelor de memorie, dar după o altă filosofie, atunci cei ce vor dori să implementeze noile moduri de abordare vor redescoperi limbajele de asamblare ca singura modalitate de a oferi soluții concrete, căci limbajele evoluate nu permit abordări pentru a obține generații noi, superioare de alte limbaje de programare, lucru absolut necesar în contextul eliberării totale de constrângerile impuse cândva de orie și de viteza de prelucrării.
Cărțile de programare în limbaje de asamblare sunt mai puțin spectaculoase decât cele pentru limbajele C++ sau C# pentru că ele presupun un alt nivel de detaliere și de gestionare a resurselor unui calculator, în ideia că programatrorul trebuie să facă totul. Nu se subânțelege nimic.



(26 septembrie 2017)