Scăderea numerelor binare semnate este oarecum mai dificilă. Ultimul exemplu a arătat că procesorul nu are nevoie de două dispozitive - adunarea și scăderea. Este suficient să aveți un singur dispozitiv - plus. Dar pentru scăderea prin adăugarea de numere semnate, în codul suplimentar trebuie să fie reprezentate atât operanții (atât decrementați, cât și dedați). Rezultatul ar trebui să fie, de asemenea, considerat o valoare în codul adițional. Dar aici sunt dificultăți. În primul rând, ele sunt legate de faptul că cel mai semnificativ bit al operandului este considerat ca semnat. Luați în considerare exemplul scăderii 45 - (-127).
Prima variantă a scăderii numerelor cu un semn:
Judecând după categoria semnelor, rezultatul a fost negativ, ceea ce, la rândul său, indică faptul că numărul ar trebui considerat ca o adăugare egală cu -44. Rezultatul corect ar trebui să fie 172. Aici, ca și în cazul adăugării de semne, am întâlnit un exces de mantisă, când cifra semnificativă a numărului a schimbat semnul semnat al operandului. Puteți urmări această situație prin conținutul pavilionului de depășire OF. Setarea lui la 1 indică faptul că rezultatul depășește domeniul de reprezentare a numerelor semnate (adică cel mai semnificativ bit sa schimbat) pentru un operand de această dimensiune și programatorul ar trebui să furnizeze acțiuni pentru corectarea rezultatului.
Următoarea scădere a numerelor cu un semn este executată prin metoda de adăugare:
-45 - 45 - -45 + (-45) = -90.
Aici totul este normal, flagul de depășire OF este resetat la 0, iar 1 în semnul indică faptul că valoarea rezultatului este un număr în codul suplimentar.
Extragerea și adăugarea operanților de dimensiuni mari.
Dacă observați, comenzile de adăugare și scădere funcționează cu operanzi cu lungime fixă: 8, 16, 32 de biți. Și dacă trebuie să adăugați numere
o dimensiune mai mare, de exemplu 48 de biți, folosind operanzi pe 16 biți?
Principiul de scădere a numerelor cu o gamă de reprezentare care depășește biții standard ai operanzilor este același ca atunci când se adaugă, adică se utilizează stegulețul de transfer CF. Unul trebuie să ne imaginăm doar procesul de scădere într-o coloană și se combină în mod corect instrucțiuni CPU cu comanda V. SB Pentru a scrie un program foarte interesant, care simulează acest proces, este necesar să îi aducă modele limbaj de asamblare, pe care noi nu au fost încă discutate. Printre fișierele atașate la cartea din directorul acestui capitol sunt textele sursă ale subprogramelor care implementează patru operații aritmetice de bază pentru operanții binari de dimensiuni arbitrare. Nu fi leneș să le studiați cu atenție, deoarece ele reprezintă o bună ilustrare a materialului studiat în acest capitol și în capitolele ulterioare. Aceste exemple pot fi abordate pe deplin după ce au fost studiate mecanismele procedurilor și macrocomenzile (capitolele 14 și 15). În plus, în [8] probleme de programare operațiuni aritmetice întreg sunt discutate, dar într-un context extins.
La sfârșitul discuției de adunare și scădere echipa a remarcat că, în plus față de CF și pavilioanelor în EFLAGS înregistrați, există mai multe steaguri, care pot fi utilizate cu instrucțiuni aritmetice binare. Acestea sunt steagurile:
ZF - flag zero, care este setat la 1 dacă rezultatul operației este 0 și la 0 dacă rezultatul nu este 0;
SF - pavilion semn a cărui valoare după operații aritmetice (și nu numai) coincide cu valoarea rezultatului MSB, adică 7,15 sau 31 biți (deci, acest indicator poate fi utilizat pentru operații cu numere întregi semnate).