MOV | Move Byte or Word | |||||
Użycie | MOV dest, src | |||||
Modyfikowane flagi | Brak | |||||
Kopiuje zawartość src do dest. Jeżeli dest=SS przerwania są wyłączane (za wyjątkiem wczesnych błędnych procesorów 808x). Niektóre procesory wyłączają przerwania, jeżeli dest jest którymkolwiek z rejestrów segmentowych. Przykład: | ||||||
Liczba cykli zegara | Rozmiar | |||||
Parametry | 808x | 286 | 386 | 486 | Pentium | Bajtów |
reg, reg | 2 | 2 | 2 | 1 | 1 UV | 2 |
mem, reg | 13+EA | 3 | 2 | 1 | 1 UV | 2 |
reg, mem | 12+EA | 5 | 4 | 1 | 1 UV | 2 |
mem, imm | 14+EA | 13 | 3 | 1 | 1 UV* | 2 |
reg, imm | 4 | 2 | 2 | 1 | 1 UV | 2 |
acc, mem | 14 | 5 | 4 | 1 | 1 UV | 3 |
mem, acc | 14 | 3 | 2 | 1 | 1 UV | 3 |
seg, r16 | 2 | 2 | 2 | 3 | 2-11 NP | 2 |
seg, m16 | 12+EA | 5 | 5 | 3 | 3-12 NP | 2 |
reg16, seg | 2 | 2 | 2 | 3 | 1 NP | 2 |
mem16, seg | 13+EA | 3 | 2 | 3 | 1 NP | 2 |
- jeżeli specjalne rejestry 386 są użwane to wszystkie operandy są 32-bitowe
- zestawienie nie uwzględnia operacji w trybie Protected oraz operacji na rejestrach specjalnych 386+ (control, debug, trap). Jeżeli brakuje Ci tego, to daj znać, a uzupełnię.
-
- nieparowalne, jeżeli jest przesunięcie i natychmiastowe adresowanie na raz
MOVS Move String (Byte or Word) Użycie MOVS dest, src
MOVSB
MOVSW
MOVSD (386+)Modyfikowane flagi Brak Kopiuje dane spod adresu DS:SI (nawet, jeżeli podano operand) do ES:DI i zmienia SI i DI zależnie od rozmiaru operandu lub instrukcji. SI i DI są zwiększane, jeżeli DF=0 i zmniejszane gdy DF=. Używaj z prefiksem REP.
Przykład:
Lancuch db "Ala ma kota$"
Kopia db 15 dup(?)
....
push ds
pop es ;zmienna docelowa w tym samym segmencie danych
lea di, Kopia ;ładujemy indeks do łańcucha doktórego kopiujemy
lea si, Lancuch ;ładujemy indeks do łańcucha z którego kopiujemy
mov cx, 12 ;kopiujemy 12 znaków
cld ;będziemy zwiększać indeksy
rep movsb ;i kopiujemy po bajcieLiczba cykli zegara Rozmiar Parametry 808x 286 386 486 Pentium Bajtów movsb 18 5 7 7 4 NP 1 movsw 26 5 7 7 4 NP 1 movsd - - 7 7 4 NP 1 rep movsb 9+17n 5+4n 7+4n 12+3n* 3+n NP 2 rep movsw 9+25n 5+4n 7+4n 12+3n* 3+n NP 2
rep movsd - - 7 +4n 12+3n* 3+n NP 2
- nieparowalne, jeżeli jest przesunięcie i natychmiastowe adresowanie na raz
- = 5 jeżeli n=0, 13 jeżeli n=1
(n = liczba bajtów, słów lub podwójnych słów)
MOVSX Move with Sign Extend (386+) Użycie MOVSX dest,src Modyfikowane flagi Brak Kopije src do dest, rozszerzając znak.Rozmiar dest jest zawsze większy niż src.
Przykład:
mov al, FEh ;al = 1111 1110 b = -2 d
movsx dx, al ; dx = 1111 1111 1111 1110 b = -2 d
mov al, 0Eh ;al = 0000 1110 b = 15 d
movsx dx, al ; dx = 0000 0000 0000 1110 b = 15 dLiczba cykli zegara Rozmiar Parametry 808x 286 386 486 Pentium Bajtów reg, reg - - 3 3 3 NP 3 reg, mem - - 6 3 3 NP 3 MOVZX Move with Zero Extend (386+) Użycie MOVZX dest,src Modyfikowane flagi Brak Kopiuje src do dest rozszerzając o 0. Rozmiar dest jest zawsze większy niż src.
Przykład:
mov al, FEh ;al = 1111 1110 b = -2 d
movzx dx, al ; dx = 0000 0000 1111 1110 b = 254 d
mov al, 0Eh ;al = 0000 1110 b = 15 d
movzx dx, al ; dx = 0000 0000 0000 1110 b = 15 dLiczba cykli zegara Rozmiar Parametry 808x 286 386 486 Pentium Bajtów reg, reg - - 3 3 3 NP 3 reg, mem - - 6 3 3 NP 3 MUL Unsigned Multiply Użycie MUL src Modyfikowane flagi CF OF (AF,PF,SF,ZF nieokreślone) Mnoży zawartość akumulatora (AL, AX lub EAX) przez src nie biorąc pod uwagę znaku (liczby w natrualnym kodzie binarnym NKB).
Czynnik1 Czynnik2 (rozmiar) Iloczyn AL Byte AX AX Word DX:AX EAX DWord EDX:EAX Procesory 386+ używają algorytmu, który mnoży dowolną wartość z EAX tak samo szybko jak w rejestrach 8 czy 16 bitowych.
Przykład:
mov ax, 2F3h ; ax = 755 d
mov cx, 0Eh ; cx = 15 d
mul cx ;edx:eax = 11375 d = 2c3dhLiczba cykli zegara Rozmiar Parametry 808x 286 386 486 Bajtów reg8 70-77 13 9-14 13-18 2 reg16 118-113 21 9-22 13-26 2 reg32 - - 9-38 13-42 2-4 mem8 (76-83)+EA 16 12-17 13-18 2-4 mem16 (124-139)+EA 24 12-25 13-26 2-4 mem32 - - 12-21 13-41 2-4
ale macie leb :-)
brakuje mi jedynie obok opcod'ów :)
Weźmy jako przykład podaną w tabeli instrukcję 'MUL' ... wynika z tego, że na procesorze 386
wykonuje się szybciej niż na 486 ???? - byłem przekonany, że powinno być odwrotnie ....