138 5. Rozkazy mikroprocesorów 8086/8088
mentu do przetwarzania. W zależności od kierunku przetwarzania rejestry SI i Dl zawierają zatem offset lub (offset + długość argumentu - 1) odpowiednich argumentów. Jeżeli są przetwarzane bajty, to rejestry SI i DI są zmniejszane lub zwiększane o 1, a jeżeli są przetwarzane słowa, to o 2. Na rysunku 5.3 przedstawiono schemat blokowy realizacji rozkazów i przedrostków. W punkcie 7.2 szerzej przedstawiono technikę ich stosowania. Poniżej zostaną omówione następujące rozkazy
Rys. 5.3. Przebieg realizacji operacji łańcuchowych
Rozkazy realizujÄ…ce pojedyncze operacje
MOVS - przepisanie w pamięci elementu łańcucha (tablicy, bloku),
LODS - załadowanie elementu łańcucha (tablicy, bloku) do akumulatora,
STOS - zapamiętanie w pamięci elementu łańcucha (tablicy^ bloku) znajdującego się w akumulatorze,
SCAS - porównanie elementu łańcucha (tablicy, bloku) z zawartością akumulatora, CMPS - porównanie elementów dwóch łańcuchów (tablic, bloków).
Przedrostki deklarujące powtórzenia
REP - powtarzanie pojedynczej operacji, aż do wyzerowania rejestru CX,
REPZ/REPE - powtarzanie pojedynczej operacji, aż do wyzerowania rejestru CX lub wyzerowania znacznika zera (ZF = 0),
REPNZ/REPNE - powtarzanie pojedynczej operacji, aż do wyzerowania rejestru CX lub ustawienia znacznika zera (ZF =1).
5.4.1. Operacje pojedyncze
MOVS/MOVSB/MOVSW (ang. move byte or word string)
przepisanie w pamięci baj tu lub słowa łańcucha (tablicy, blokuj__
Operacja: {w = 0 => (delta: = 1 i argumentem jest bajt)
else delta: = 2 i argumentem jest słowo}; next M[ES:DI] <- M[DS:SI];
next DF = 0 => (SI <-SI + delta; DI «-DI + delta) else (SI «-SI-delta; DI «-DI-delta)
Znaczniki:bez zmian
Rozkaz MOVS powoduje przepisanie bajtu lub słowa w pamięci ze źródłowego łańcucha (tablicy, bloku) adresowanego rejestrami ES:SI do łańcucha adresowanego rejestrami DS:DI. Po przesłaniu rejestry SI i DI są zwiększane (DF = 0) lub zmniejszane (DF = 1) o jeden (w = 0) lub o dwa (w=l). Użycie mnemoniki MOVS powoduje, że asembler określa na podstawie atrybutów argumentów, czy ma być przesyłany bajt, czy słowo, i na tej podstawie generuje właściwy kod wynikowy. Alternatywnie można użyć mnemoniki MOVSB lub MOVSW. Ta mnemonika określa wprost czy mają być przesyłane bajty (MOVSB), czy słowa (MOVSW). Jest to istotne gdy asembler nie jest w stanie określić atrybutu łańcucha, np. przy przepisywaniu fragmentu programu.
1010 OlOw
Liczba taktów - 18 dla operacji jednokrotnej lub 9 taktów podstawowych + 17 dla każdego powtórzenia. *
Przykłady
LDS SI, ZRODLO[BX]
LES DI, CEL CLD; DF«-0