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 :-)