Sisteme numerice, etichete de asamblare, traducere de numere

Sistemele numerice binare, octale, zecimale, hexazecimale sunt pozitive. Sistemul numărului de poziții este unul în care valoarea unei cifre depinde de poziția sa în număr, pozițiile cifrelor din număr sunt numite ordine sau cifre. Baza sistemului de numere poziționale este numărătoarea, pe care se completează ordinea următoare a numărului. În caz contrar, baza sistemului numeric este egală cu numărul de cifre, inclusiv zero, prin care sunt scrise numerele din acest sistem.







Assembler permite utilizarea numerelor într-un sistem binar, octal, zecimal sau hexazecimal. În mod implicit, asamblatorul consideră că toate numerele care apar în program sunt zecimale. Puteți indica în mod explicit partea de jos a unui număr folosind etichete (pentru versiunea MASM32 11): b sau y - pentru numere binare; o sau q pentru octal; d sau t pentru numere zecimale; h - pentru numerele hexazecimale. Eticheta este scrisă la sfârșitul numărului, îmbinată cu numărul. Dacă numărul utilizează caractere alfabetice (numere hexazecimale), la început scrie zero - în conformitate cu regulile de asamblare, numerele trebuie să înceapă cu o cifră. De exemplu:

date var1 byte 00001111b; 15 în reprezentarea binară var2 byte 00001111y; 15 în reprezentarea binară var3 byte 17o; 15 în reprezentarea octuală var4 byte 17q; 15 în reprezentarea octal var5 byte 15d; 15 în reprezentarea zecimală var6 octet 15t; 15 în reprezentarea zecimală var7 byte 0Fh; 15 în reprezentare hexazecimală

Puteți specifica tipul de numere din secțiunea de directive din secțiunea de instrucțiuni a formularului

în care baza numărului este indicată printr-un număr zecimal. De exemplu, conform instrucțiunilor

Assembler va presupune că toate numerele fără etichete din program sunt hexazecimale.

Existența a două opțiuni de etichete pentru numere binare și zecimale din motive de compatibilitate MASM32 versiunile anterioare, în care capacitatea de a înregistra numere în format hexazecimal nu a fost, cu versiunile ulterioare. Pentru numerele hexazecimale, cifrele arabe nu sunt suficiente, astfel încât intervalul numeric este completat cu literele:

0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F







Este ușor de observat că etichetele din versiunile anterioare MASM32 - b și d - la fel ca și cifre hexazecimale, ceea ce le face imposibil de utilizat în Directiva .RADIX 16. tag-ul tag-ul q o numit, din cauza asemănării cu primul zero. Din aceste motive, etichetele y sunt preferate. q. T.

Pe un computer, toate numerele sunt stocate ca secvențe de zerouri și una. Când vom scrie textul programului orice număr, traducerea sa în reprezentare poate fi citită automat asigură de asamblare, și fișierul executabil care numărul vor fi înregistrate în forma corectă (binar). Dar pentru a organiza ieșirea de la numărul de program este deja într-un format clar pentru utilizator trebuie să facem, atunci, dacă doriți să arate utilizatorului numărul, atunci avem nevoie pentru a face programul după cum urmează: a) pentru a transfera un număr de la binar în zecimal - de la reprezentarea mașinii a omului; b) să înlocuiască numărul zecimal rezultat un simbol, care este, corespunzător numărului de imagine, deoarece monitorul afișează exact imaginea, mai degrabă decât numărul.

Traducerea numărului de mașină într-un sistem de numere dat este realizată prin împărțirea succesivă a acestui număr și rezultatul rezultat prin baza sistemului de numere dorit. Restul diviziunii este introdus în ordine scăzută, coeficientul este din nou împărțit în baza numărului de sistem, restul este introdus în următoarea cifră - și astfel până la rezultatul divizării de zero. Să presupunem că doriți să convertiți numărul zecimal 250 într-o reprezentare hexazecimală:
250/16 = 15. Restul = A (10),
15/16 = 0, restul = F (15),
astfel, 250 (zecimal) = FA (hexazecimal).

Numărul maxim care poate fi scris în octeți este 255. În cazul în care rezultatele programului au nevoie pentru a afișa numărul în format zecimal al variabilei-un octet, acest număr ar trebui să fie împărțit la 10 nu este mai mare de trei ori - în 255 cu trei ordine de zecimale. Cuvântul variabilă de tip (doi octeți), valoarea maximă a 65 535 în cuvântul dublu tip variabil (patru octeți) - 4294967 295. Prin urmare, numărul de transferuri de cuvânt divide zecimală de 10 nu este mai mult de cinci ori, cuvânt dublu -sa nu mai mult de zece ori.

Codurile de caractere-numere sunt: ​​"0" - 48; "1" - 49; "2" - 50; "3" - 51; "4" - 52; "5" - 53; "6" - 54; "7" - 55; "8" - 56; "9" - 57. Evident, pentru a traduce valoarea unei cifre într-o formă simbolică, este suficient să adăugăm 48.

Un fragment al programului care traduce variabila octet într-o formă simbolică zecimal:

divider de date 10; divider buffer_dec octet 3 dup (?) parametr byte 255. start cod. ; obținem valorile parametrului byte în forma simbol zecimal mov AH, 0; zero AH mov AL, parametru; copiați variabila byte în separatorul AL DIV; divizați AX cu 10 mov_dec [2], AH; copia restul de divizare în buffer_dec [2] mov AH, 0; zero divizor AH DIV; împărți AX cu 10 mov_dec [1], AH; copia restul diviziei în buffer_dec [1] mov buffer_dec [0], AL; copiați privat în buffer_dec [0] ADD buffer_dec [0], 48; adăugați 48 - obțineți caracterul "2" ADD buffer_dec [1], 48; adăugați 48 - obțineți caracterul numeric "5" ADD buffer_dec [2], 48; adaugă 48 - ia caracterul "5"







Articole similare

Trimiteți-le prietenilor: