Procesorul Everest - modul de măsurare a timpului de la pornirea dispozitivului

În articolul precedent, am vorbit despre noua extindere a sistemului de echipe Everest. Acum hai să vorbim despre modul în care am implementat această extensie în limba descrierii hardware-ului. Mai jos rezultatul celui de-al șaselea element de meniu - tipărirea numărului de măsuri din momentul inițializării dispozitivului:







Procesorul Everest - modul de măsurare a timpului de la pornirea dispozitivului

Algoritmul de funcționare este destul de simplu - când apăsați tasta "numărul șase", terminalul afișează timpul obținut prin conversia datelor de pe contorul de ceasuri. Pentru a rezolva această problemă, au fost utilizate cele mai recente extensii ale sistemului de comandă.

Apoi, folosim un număr de măsuri pentru a afișa informațiile despre starea sa în două cuvinte pe 32 de biți:

Pentru a nu complica codul, citim contorul de numărare din nou. Traduceți imediat datele metrului în câteva secunde și salvați-le în variabila locală seconds_count_lo.







În acest loc, vă puteți relaxa și afișa un mesaj fără să vă faceți griji cu privire la salvarea suplimentară a registrelor:

Următorul este magia traducerii secundelor în zile, ore, minute și ... secunde. De fapt, nu există magie aici - un simplu reziduu "sortier" din diviziune:

În acest moment, după executarea fragmentului de cod de mai sus, registrul R0 conține numărul de zile care au trecut de la pornirea firmware-ului. Orele, minutele și secundele sunt stocate în memorie ca variabile locale aflate pe stivă.

Urmează rezultatul rezultatelor. Rețineți că instrucțiunea de citire a memoriei cu verificarea pavilionului este utilizată pentru a exclude minutele și orele goale de la ieșire. De fapt, aceasta este extensia testată a sistemului de comandă:

Da, acest cod nu poate fi numit exemplar și puteți petrece mult timp pentru a-l îmbunătăți, dar și-a îndeplinit sarcina de două ori - a ajutat la depanarea unor noi caracteristici și a servit drept material pentru acest articol. Mărimea fișierului binar generat a fost de 660 octeți din care 272 octeți a fost codul de mai sus și 388 de octeți bibliotecă funcții - diviziune și de lucru cu terminalul.

Dacă înainte de a citi acest articol ați scris pe un asamblor, atunci, cel mai probabil, acum știți încă un asamblor. Dacă doriți să verificați sau să corectați în mod independent acest exemplu, puteți utiliza noul firmware al dispozitivului nostru pentru cardul Mars rover2 - în arhiva următoare veți găsi firmware-ul, macroasemblerul, mai multe funcții de bibliotecă și programe de probă.

Articole similare







Trimiteți-le prietenilor: