Imul înmulțirii numerelor cu programare semn, lecții și exemple

Aplicație. Sistem de comandă procesor Intel

IMUL Înmulțirea numerelor întregi cu un semn

comandă IMUL realizează multiplicarea unui număr întreg cu semn, este în registrul AL (în caz de multiplicare pe octet) sau AX (în cazul înmulțirii prin cuvântul) de către operandul sursă (număr întreg). Dimensiunea produsului este de două ori mai mare decât factorii.






Pentru operațiile cu un singur octet, unul dintre factori este plasat în registrul AL; După efectuarea operației, produsul este scris în registrul AX.
Pentru operațiile cu două octeți, unul dintre factori este plasat în registrul AX; După efectuarea operației, produsul este scris în registrele DX: AX (în DX - partea superioară, în AX - cea mai tânără).
Ca factor de operand al comenzii imul, puteti specifica un registru (cu exceptia unui segment) sau o locatie de memorie; nu este permis să se înmulțească prin valoarea imediată. Comanda acționează asupra steagurilor OF și FC. Dacă AN DX sau sunt pur și simplu semn extensie AH sau AL, respectiv (adică, cu semnul rezultatului înmulțirii este adevărat), OF și CF sunt setate la 0; altfel (rezultatul cu semnul nu se încadrează în AX sau DX: AX) OF și CF sunt setate la 1.


mov AL, 5; primul factor
mov BL, 3. Al doilea factor
imul BL; AX = 000Fh (produs)


mov AX, 256; primul multiplicator
mov BX, 256; al doilea multiplicator
imul BX; DX = 0001h; AX = 0000h
(numărul 65536)








mov AL, -5; AL = FBh
mov BL, 3; BL = 03h
imul BL; AX-'FFF1h (-15)


Pentru imul cu un operand, al doilea factor trebuie să fie AL, AX sau EAX. Procesorul selectează dimensiunea celui de-al doilea factor, pornind de la dimensiunea primei, specificată ca operand. Un rezultat semnat de 16, 32 sau 64 de biți este plasat în registrele AX, DX: AX sau EDX: EAX, respectiv. Dacă după multiplicare un conținut, DX sau EDX este doar extinderea semn al AL, AH sau EAX, respectiv, CF și pavilioanelor sunt resetate la 0. În caz contrar, acesta este setat la 1.
Pentru comanda imul cu doi operanzi, produsul lor este scris la primul operand; al doilea operand nu se schimba. Primul operand poate fi registre de 16 biți sau 32 biți; ca un al doilea operand, registre de 16 biți sau 32 biți, celule de memorie de 16 biți sau 32 biți sau o valoare imediată. Ambii operanzi trebuie să aibă aceeași dimensiune. Dacă rezultatul multiplicării este plasat în primul operand, simbolurile CF și OF sunt reinițializate la 0. În caz contrar, ele sunt setate la 1.
Pentru comanda imul cu trei operanzi, produsul celui de-al doilea și al treilea operand este scris la primul operand. Primul operand poate fi registre de 16 biți sau 32 biți; ca un al doilea operand, registre de 16 biți sau 32 de biți de uz general sau celule de memorie de 16 sau 32 biți; ca operand al treilea, doar valoarea imediata. Primele două operanzi trebuie să aibă aceeași dimensiune. Dacă rezultatul multiplicării este plasat în primul operand, simbolurile CF și OF sunt reinițializate la 0. În caz contrar, ele sunt setate la 1.


mov EAX, -1; primul factor
mov ESI, 100000000; Al doilea factor
imul ESI, EDX = FFFFFFFFh,
; EAX = FA0AlF00h
; Rezultat = -100000000


; În câmpurile de date
or2 dd 100h; primul factor
; În segmentul de software
mov EAX, 400000h; al doilea multiplicator
imul EAX, op2; EAX = 40000000h
Exemplul 3
mov BX, 300h
imul AX, BX, 4; AX = 300h * 4 = 0C00h







Trimiteți-le prietenilor: