Instrukcje procesorów rodziny 80x86 (M)
Dryobates
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 |
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: | ||||||
Liczba 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 |
(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: | ||||||
Liczba 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: | ||||||
Liczba 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).
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: | ||||||||||||
Liczba 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 |
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 ....
brakuje mi jedynie obok opcod'ów :)
ale macie leb :-)