Aceste comenzi vor fi executate dacă condiția este adevărată. Toate condițiile diferite pentru executarea lor sunt prezentate în Tabelul 6. Codul mașinii pentru ambele comenzi este prezentat în Fig.
Ambele comenzi pentru efectuarea multiplicării întregului utilizează un algoritm bazat pe un lanț de operații de schimbare logică și adăugarea de operanzi pe 8 biți (algoritmul lui Booth).
Fig. 21. Comenzi de multiplicare
În comanda multiplică (MUL), se folosește următoarea formă de înregistrare: Rd: = Rm * Rs. Registrul Rn este ignorat și trebuie să fie zero pentru compatibilitatea cu eventuala extensie a sistemului de comandă în viitor.
În comenzile de acumulare multiplă (MLA) se folosește o altă formă de înregistrare: Rd: = Rm * Rs + Rn. Atunci când Rm = 1 sau Rs = 1, această comandă este echivalentă în acțiunile sale executării comenzii ADD.
Ambele comenzi permit operații numai cu operatori întregi, atât nesemnate, cât și semnate (în plus față de 2).
Rezultatele multiplicarea operanzi pe 32 de biți, cu un semn și un 32 de biți fără semn operanzii diferă doar în principal de 32 de biți și de cei 32 de biți din ambele rezultate - aceleași două tipuri de operanzi. Ca rezultat al instrucțiunii MUL și MLA numai pe 32 de biți (32 de biți superiori ai rezultatului sunt aruncate), atunci ieșirea acestor comenzi vor fi aceleași pentru ambele semnate operanzii ca unsigned.
De exemplu, comanda multiplică 0xFFFFFFF6 (operand A) la 0x00000014 (operandul B) va avea ca rezultat o valoare de 0xFFFFFF38.
Dacă operanzii sunt interpretați ca semnat
Fie operandul A = -10, iar operandul B = 20, rezultatul multiplicarii lor este numarul -200, care este corect scris ca: 0xFFFFFF38.
Dacă operanzii sunt fără semn
Fie A = 4294967286 operanzi și operanzi B = 20, rezultatul înmulțirii numărului 85899345720 este că corect scris ca: 0x13FFFFFF38, dar 32 de biți superiori ai rezultatul este aruncat, rezultatul înmulțirii numărului final va 0xFFFFFF38.
Nu este permisă utilizarea registrului de rezultate Rd în același timp cu registrul operand (Rm, Rn sau Rs). De asemenea, nu este permisă utilizarea registrului R15 ca registru de operandi sau registru de rezultate.
Toate celelalte combinații ale registrelor rămase vor da rezultatul corect și, dacă este necesar, același registru poate juca rolul Rd, Rn și Rs.
CPSR înregistrează steaguri
Posibilitatea de a influența steagurile din registrul CPSR este determinată de bitul S în câmpul de comandă corespunzător. Steaguri N (negativ) și Z (zero) sunt stabilite în conformitate cu rezultatul multiplicării: pavilion N devine egal cu 31-lea bit al rezultatului, iar steagul Z este setat numai dacă rezultatul - zero. Cârligul (transferul) C este setat la o stare necunoscută, iar pavilionul V (overflow) nu este utilizat.
Numărul de cicluri de mașină în execuție
comanda MUL este executata pentru 1S + mI de cicluri de mașină, și comanda MLA - pentru 1S + I (m + 1) cicluri de mașină, unde S și I depind de tipul de cicluri ale motorului, m - numărul de multiplicatori de 8 biți, necesare pentru a efectua multiplicarea și depinde de conținutul multiplicatorului operand-rs. Valorile posibile ale m sunt enumerate mai jos:
m = 1, dacă biții [31: 8] ai multiplicatorului sunt fie niște zerouri, fie toate. m = 2 dacă biții [31:16] ai multiplicatorului sunt fie toți zerouri, fie toate cele. m = 3, dacă biții [31:24] ai multiplicatorului sunt fie toți zerouri, fie toate celelalte. m = 4: în toate celelalte cazuri.
Sintaxă în asamblare
două mnemonice ale condiției de executare a comenzii (a se vedea tabelul 6).