După afișarea listei de dispozitive, programul trebuie să implementeze o întârziere, apoi să revină la meniu.
Dacă selectați "Test de memorie", programul trebuie să efectueze un test de cel puțin 640Kb. memorie. În cazul în care memoria este OK, mesajul "test passed" este afișat pe ecran, altfel "testul nu este trecut". De asemenea, este necesară implementarea unei întârzieri și revenirea la meniu.
Dacă selectați opțiunea "Ieșire", trebuie să implementați controlul de închidere și de transfer al programului în sistemul de operare DOS.
1.3. Cerințe hardware și software
Programul este realizat în procesor 8086 de limbaj de asamblare,
necesită un calculator IBM PC compatibil cu un procesor nu mai mic de 8086, iar programul poate fi rulat și pe computere cu procesoare mai vechi (de exemplu: 80286 sau 80386), deoarece o caracteristică a arhitecturii 80x86 este continuitatea la nivelul instrucțiunilor mașinii: programele scrise pentru modelele mai tinere de procesoare, fără modificări pot fi efectuate pe modele mai vechi.
Codul compilat al programului durează doar 2 KB - acest lucru se datorează lipsei de cod redundant, care este foarte ridicat atunci când se utilizează limbi de nivel înalt. În acest sens, programul se poate potrivi cu ușurință pe o dischetă de 360 KB.
Programul funcționează în modul text și nu utilizează culori, deci este suficient pentru un monitor CGA. În plus, poate funcționa fără modificări pe monitorii mai vechi, cum ar fi EGA, VGA și SVGA.
Deoarece programul testează 640 KB de memorie RAM, acest volum este minim.
1.3.1. Justificarea alegerii limbajului de programare
Pentru a scrie acest program, a fost aleasă limba de asamblare. În legătură cu faptul că este cel mai potrivit pentru realizarea unor astfel de sarcini, adică unde trebuie să accesați porturile, să efectuați întreruperi speciale, să accesați zona de memorie BIOS și așa mai departe.
Pentru orice computer, puteți veni cu diferite limbi de asamblare, doar pentru că puteți desemna diferit operațiunile mașinii. În frecvență și pentru PC, au fost dezvoltate mai multe astfel de limbi (ASM-86, MASM, TASM). Pentru a pune în aplicare această sarcină, limba a fost aleasă, care a fost creată de Borland și al cărei nume complet este un turboassembler, abreviat TASM. Trebuie remarcat faptul că această limbă este cea mai des utilizată pe un PC.
2.1. Formularea problemei
Elaborați un program pentru a testa memoria RAM și a colecta informații despre PC.
Implementați un meniu în care utilizatorul are posibilitatea de a alege între trei elemente:
1 - colectarea de informații despre sistem;
Colectarea de informații ar trebui să fie sub forma unei liste de dispozitive cu starea actuală. Starea numelui dispozitivului trebuie să fie separată printr-un colon. Pentru o listă de dispozitive și posibilele lor stări, vezi Tabelul 1.
Elementul "test de memorie" ar trebui să verifice celulele de memorie pentru operabilitate. Există două tipuri de locații de memorie de avarie:
Tipul de eșec al "zerourilor constante" este după cum urmează: să presupunem că bitul 4 în octetul prezentat în Fig. 1 - defect. În acest moment, un zero este scris în octeți (opt zerouri în sistemul binar), dacă citiți conținutul acestui octet, atunci ieșirea este zero - se pare că funcționează.
7 6 5 4 3 2 1 0
Tipul de eșec "unități permanente" este similar cu forma "zerouri constante". Singura diferență este că, sub forma unor "zerouri constante", biții defecți sunt întotdeauna în stare zero și sub forma unor "unități constante" în unitate.
În acest sens, este necesar să se efectueze verificarea celulelor de memorie pentru două tipuri de defecte: "zerouri constante" și "unități permanente".
2.2. Descrierea structurii programului
Programul a fost implementat folosind mai multe proceduri de utilizator și macrocomenzi (a se vedea tabelul 2).
Destul de des în programe, în special cele mari, trebuie să rezolvați aceleași submăsuri de mai multe ori și, prin urmare, trebuie să scrieți același grup de comenzi care rezolvă această sub-sarcină. Pentru a evita re-scrierea grupului de comenzi, de obicei este descărcată o dată, și să întocmească în mod corespunzător, și apoi în locurile potrivite ale programului, pur și simplu transferă controlul la comenzile care au funcționat, returnează controlul înapoi. Un astfel de grup de comenzi, care rezolvă o anumită sub-sarcină și care este organizat în acest fel, se numește o procedură.
Este adesea utilă pre-traducerea textului programului (înainte de difuzare). De exemplu, poate fi necesar ca un fragment de program să fie duplicat de mai multe ori sau că, în funcție de anumite condiții, textul programului păstrează anumite fragmente și le șterge pe celelalte. O posibilitate similară este oferită de așa-numitele mijloace macro. Extinderea limbii de asamblare datorată acestor mijloace este denumită de obicei o limbă de macro.
Programul, scris într-o limbă macro, este difuzat în două etape. În primul rând, se traduce, ca să spunem așa, limbajul pur al asamblorului, adică este transformat într-o formă în care nu există mijloace macro. Această etapă se numește generație macro, este implementată de un traducător special - un generator de macro-uri. În a doua etapă, programul primit este tradus în limba mașinii. Aceasta este etapa de asamblare, este asamblor.
Tabel de proceduri și macrocomenzi
În cazul în care programul afișează un rezumat, utilizatorul familiarizat cu programul, faceți clic pe orice buton, iar meniul afișează pe ecran (folosind procedura ShowQuestion), în care utilizatorul poate alege interesul său pentru meniu:
colectarea de informații despre PC;
Dacă este selectat primul element, procedura de ShowSved este executată. În cadrul acestei proceduri, ecranul este șters cu ajutorul macrocomenzii ClrScr, precum și diagnosticarea hardware și întârzierea implementată utilizând macrocomanda de tipărire. După finalizarea acestei proceduri, programul merge la început, adică din meniu.
Dacă selectați al doilea element, se efectuează procedura TestMem, care testează memoria RAM a calculatorului. De asemenea, în interiorul acestei proceduri sunt implementate curățarea ecranului și întârzierea înainte de a părăsi meniul.
Dacă este selectat cel de-al treilea element, programul, fără a șterge ecranul, transferă controlul către sistemul de operare DOS.
2.3. Descrierea algoritmului pentru rezolvarea problemei
În acest sens, volumul maxim al segmentului este de 64 K, iar minimul este de 16 octeți.
2.4. Depistarea și testarea
Testarea a fost făcută folosind debuggerul Borland's Turbo Debugger. Întregul program a fost urmărit. Urmărirea este procesul de execuție pas cu pas a comenzilor cu listarea stărilor tuturor registrelor, semnelor, segmentului de date în momentul executării fiecărei comenzi.
În timpul urmăririi au fost detectate următoarele erori:
definirea incorectă a stării coprocesorului matematic - masca de curățare specificată incorect, așa-numitul cuvânt "listă de ecuație", obținut prin utilizarea întreruperii 11h;
"Așteptați" atunci când apelați procedura TestMem - eroare în implementarea algoritmului de testare a memoriei - eticheta de jump specificată incorect în buclă imbricată.
În plus, au fost găsite o mulțime de erori în sintaxa de comenzi.
Având în vedere că programul a fost scris pe același computer, verificați-l pentru a determina configurația corectă a PC-ului nu este posibil, prin urmare, după finalizarea programului, ea a realizat pe PC-uri diferite, cu configurații diferite: în cursul acestui test de detectare a erorilor nu a fost - toate hardware-ul este recunoscut în mod corespunzător.
A fost, de asemenea, nu este posibil pentru a testa programul pe un test de memorie corect în practică, pentru că a fost făcută pe toate PC-urile cu o memorie de lucru, și încearcă să găsească un PC cu un cunoscut RAM defect nu a reușit. Cu toate acestea, teoretic, testul ar trebui să funcționeze corect.
2.5. Instrucțiuni pentru utilizatori
Pentru a rula programul, rulați fișierul numit "kurs.com". Atenția ta este dată unui abstract - citiți-l cu atenție, apoi apăsați orice tastă de pe tastatură (de exemplu, introduceți). Apoi, meniul prezentat în Fig. 3.