Pasul 6 - ce sunt registrele

Registrele sunt celule de memorie speciale. Acesta este cel mai important lucru. Toate farmecul lor este că accesul la registre se face mult mai repede decât la memoria RAM a PC-ului. Din acest motiv, registrele sunt utilizate pentru instrucțiunile procesorului. De acolo, procesorul este convenabil și primește rapid informații. Dacă vorbim despre PC cu tipul de procesoare 286. Și suntem doar un astfel de procesor și considerăm că dimensiunea registrului este de 16 biți. Fiecare registru are un nume și un scop. Ele vin în următoarele tipuri.







registrele de uz general AX, BX, CX, DX, BP, SI, DI, SPcgment reglează CS, DS, SS,

Fiecare nume de registru are un anumit sens

O date D date Contor contor BP indicatorul de bază cadru de bază baterie de acumulator B C indicele sursă Indicator de bază SI Index sursă DI receptor indicele de destinație SP stivă indicator indicele indicator stiva CS segment segment de cod comenzi segmentul DS date segment de segmentul de date SS stivă segment de stivă ES segment suplimentar segmentul suplimentar de comandă a comenzii IP a segmentului de instrucțiuni

Registrele AX, BX, CX și DX ne permit să accesăm nu la registru, ci la octetul înalt și scăzut

AX AH, ALBX BH, DLDX DH, DLCX CX, CL

În acest moment am folosit registrul AX în pasul "Pasul 3 - programul HelloWord". Pentru a seta funcția de întrerupere.

mov ah, 40h 21h mov ah, 04Ch int 21h

În acest sens, doar o parte din registru a fost utilizată, sau mai precis, octetul înalt:

H înalt senior L scăzut junior

De ce nu am folosit celulele de memorie? Da, deoarece există reguli în care trebuie stocate atunci când este apelată întreruperea. Mai precis, în ce registru ar trebui să fie localizat. Regulile, acestea sunt descrise în documentație. Ei bine, de exemplu, ultima noastră funcție este descrisă astfel

Int 21H Funcție 4CHAH = 4CH AL = cod retur Nici o întoarcere.

Termină procesul și returnează codul de returnare în sistemul de operare.

În acest moment trebuie să înțelegeți că pentru majoritatea operațiunilor sunt utilizate registrele și pentru întreruperi există specificații specifice în care este scris ce și în ce registru ar trebui să fie localizat.







De asemenea, la pasul "Pasul 7 - Comanda MOV". Ne-am întâlnit de mai multe ori cu echipa MOV. Iată o felie:

mov bx, 1 mov cx, 21 mov dx, offset Hellostr mov ah, 40h

Semnificația echipei MOV într-o cameră de la un loc la altul:

Destinatar MOV, consumator

mov bx, 1; 1 plasat în bx mov cx, 21; 21, plasată în cx mov dx, ofset Hellostr, pus în deplasare dx linia mov ah, 40h; ah pus în număr 40h

Să luăm un cod pas „Pasul 3 - HelloWord Programul“ și cunoașterea etapelor „Pasul 6 - Ce este registrul“ despre funcția 04Ch acum știm că în cuvântul scăzut de registru AX (AL), puteți reveni codul programului. Să încercăm:

MODEL TINYSTACK 256 DATASEG Hellostr DB 'Hello Primul pas de site' CODESEG începe: mov ax, @ mov date ds, ax mov bx, 1 mov cx, 21 mov dx, compensate Hellostr mov ah, 40h int 21h mov ah, 04Ch mov al, 1h int 21hend start

Nimic nu a schimbat programul, deoarece a fost lansat și lansat. Codul de returnare a programului poate fi procesat în fișiere BAT. Scrie run.bat:

@echo off7.exeif errorlevel 1 Gata de eroare endecho: sfârșitul endecho

Eroarea cuvintelor nu va fi afișată, deoarece este scrisă, dacă codul de returnare este 1, apoi treceți la sfârșit. În general, această practică este încă larg răspândită. Exemplu de fișier bat din directorul Windows (Windows 98):

alegere / c: ynif errorlevel 2 goto FORMAT_CANCELif eroare de nivel 1 a ajuns FORMAT: FORMAT_CANCEL.

Pentru a specifica segmentul de date, se utilizează registrul DS. Adică, acest registru ar trebui să indice începutul datelor din programul nostru sau din segmentul DATASEG. Am făcut următoarele la pasul "Pasul 3 - Programul HelloWord":

mov ax, @ date mov ds, ax

În primul rând, ceea ce @data - DATASEG acest identificator pentru a compila și de a construi aplicarea în locul cuvântului vor fi livrate la deplasarea reală a segmentului în care sunt stocate datele. La urma urmei, înainte de asamblarea programului, nu știm acest lucru. Deoarece în acest model de magazine de memorie de date de la sfârșitul codului de program, chiar și adăugarea unei echipe pentru a schimba locația sa. Și într-adevăr acest număr va fi cunoscut numai atunci când se asamblează.

Și de ce am pus mai întâi în registrul AX. Același lucru are doar o regulă - nu puteți schimba direct conținutul registrelor CS, DS, SS. Aceasta este, nu putem scrie astfel:

Putem schimba acest registru numai cu ajutorul altor registre. Deci, uitați-vă toți împreună:

mov ax, @ date; în registrul AX offset pentru date mov ds, ax; Stabiliți un registru DS egal cu AX, iar acum există un offset.

Aici. Voi aduce o fereastră de la debugger, despre care voi vorbi mai târziu:

Pasul 6 - ce sunt registrele

Uite, acesta este codul nostru în comenzile procesorului după executarea comenzii mov ds, axul nostru registrul DS va fi egal cu registrul AX, în acest caz de la 1343.

Avem un registru DS. în care nu putem accesa direct, ci doar folosind alte registre. Acest registru indică date.







Articole similare

Trimiteți-le prietenilor: