assembler€86ˆ 1

assembler€86ˆ 1



142


5. Rozkazy mikroprocesorów 8086/8088

MOV AL,

STD ; DF«-1 SCASB JE STOP

CMPS/CMPSB/CMPSW (ang. compare byte or word string) porównanie bajtu lub słowa dwóch łańcuchów (tablic, bloków)

Operacja: {w = 0 =» (delta: = 1; argumenty są bajtami)

else (delta: =2; argumenty są słowami); next M[DS:SI]-M[ES:DI];

next DF = 0 => (DI «-DI + delta; SI «-SI + delta) else (DI «-DI-delta; SI «-SI-delta)

Znaczniki: OF DF IF TF SF ZF AF PF CF

x---xxxxx

Rozkaz powoduje odjÄ™cie elementu Å‚aÅ„cucha (bajtu lub sÅ‚owa) adresowanego przez rejestry ES:DI od odpowiedniego elementu Å‚aÅ„cucha adresowanego przez rejestry DS.SI. Wynik nie jest zapamiÄ™tywany, jedynie sÄ… ustawiane znaczniki. Po wykonaniu operacji porównania rejestry DI oraz SI sÄ… zwiÄ™kszane (DF = 0) lub zmniejszane (DF=1) o jeden (w = 0) lub o dwa (w=l). Użycie mnemoniki CMPS powoduje, że asembler okreÅ›la na podstawie atrybutów argumentów, czy majÄ… być porównywane bajty Å‚aÅ„cuchów czy sÅ‚owa i na tej podstawie generuje wÅ‚aÅ›ciwy kod wynikowy. Można użyć mnemoniki CMPSB lub CMPSW, która okreÅ›la czy majÄ… być porównane bajty (CMPSB) czy sÅ‚owa (CMPSW) (zob. też REPZ/PERE i REPNZ/REPNE).    j

1010 Oliw

Liczba taktów - 22 dla operacji jednokrotnej.

Przykłady

MOV DI, OFFSET TABLIC Al    *

MO V AX, SEG TABLICA J    "J

MO V DS, AX

MOV SI, TABLICA 2    J

MOV AX, SEG TABLICA_2    J

MOV ES, AX

CMPS TABLICA2, TABLICAMI    â™¦

Argumenty w ostatnim rozkazie CMPS służą wyłącznie do określenia typu porównywanych elementów łańcuchów, można w tym miejscu napisać CMPSB lub CMPSW.

5.4.2. Przedrostki deklarujące powtórzenia

REP (ang. repeat string operation)

powtarzanie operacji łańcuchowej (przedrosteka)___

Operacja: CX*0 => ({wykonaj MOVS lub STOS}; next CX«-CX-l;next IP<-IP-1 Znaczniki: bez zmian

5.4. Rozkazy przetwarzające łańcuchy (rozkazy l



Przedrostek REP jest kojarzony z rozkazami Å‚aÅ„cuchowe MOVS i STOS i pozwala na wielokrotne wykonywanie tych rozkazów (pÄ™tla sprzÄ™towa). Krotność wykonywania rozkazu jest okreÅ›lona zawartoÅ›ciÄ… licznika Cx, który jest każdorazowo zmniejszany o jeden. Wykonywanie rozkazu koÅ„czy siÄ™ z chwilÄ… wyzerowania licznika. Wielokrotne wykonywanie rozkazu Å‚aÅ„cuchowego może być wstrzymane przez przerwanie. Wykonanie rozkazu jest kontynuowane po powrocie z procedury obsÅ‚ugi przerwania, procesor odtwarza jedynie jeden przedrostek. Jeżeli w operacji Å‚aÅ„cuchowej potrzeba użyć dodatkowych przedrostków (np. segmentu, LOCK), to na czas wykonywania tej operacji należy zablokować system przerwaÅ„.

REP MOVS - przepisanie w pamięci łańcucha (tablicy, bloku);

REP STOS - wypełnienie łańcucha (tablicy, bloku) wzorcem umieszczonym w akumulatorze (AX lub AL).

REP LODS, REP SCAS, REP CMPS - są możliwe, aczkolwiek bez sensu

1111001x

x - bit nieistotny Liczba taktów - 2.

Przykłady

MO V AX, 0

MO V DI, OFFSET TABLICA MOV CX, LENGHT TABLICA

REP STOSW    ; wyzerowanie tablicy    â™¦

REPE/REPZ (ang. repeat string operation if eÄ…ual/zero )

powtarzanie operacji łańcuchowej dopóki jest równość lub jest zero__

Operacja: CX *0 => ({wykonaj SCAS lub CMPS}; next CX«-CX-1; next ZF = 0 => IP+-IP-1)

Znaczniki: bez zmian

REPE/REPZ sÄ… to równoważne przedrostki dla operacji Å‚aÅ„cuchowych SCAS i CMPS. Rozkazy te wykonywane sÄ… wielokrotnie tak dÅ‚ugo, jak dÅ‚ugo licznik CX *0 (zob. komentarz do REP) oraz dodatkowo znacznik ZF = 1, czyli równość lub wartość jest równa zero. Znacznik ZF nie musi być inicjowany, bowiem jego testowanie odbywa siÄ™ dopiero po wykonaniu pojedynczej operacji.

REPE SCAS, REPZ SCAS - porównywanie zawartości akumulatora (AX lub AL) 2 elementami łańcucha dopóki wartości są równe;

REPE CMPS, REPZ CMPS - porównywanie dwóch łańcuchów dopóki kolejne odpowiadające sobie ich elementy są równe.

Liczba taktów - 2.



Wyszukiwarka

Podobne podstrony:
assembler?86? 9 118 5. Rozkazy mikroprocesorów 8086/8088 MOV AL, 8FH CBW ???? ???? 1111 1111 1000
assembler?86? 1 82 5. Rozkazy mikroprocesorów 8086/8088 kod rozkazu (ang. opcode ) - definiuje ope
assembler?86? 4 88 5. Rozkazy mikroprocesorów 8086/8088 MOV ZMIENNAfSI], ES MOV X[BP + DI + 1], SS
assembler?86? 2 104 5. Rozkazy mikroprocesorów 8086/8088 Przykłady 104 5. Rozkazy mikroprocesorów
assembler?86? 1 122 5. Rozkazy mikroprocesorów 8086/8088 OR DX, STALA_EQU OR CL, 8   &nb
assembler?86? 1 162 5. Rozkazy mikroprocesorów 8086/8088 INT - skok do podprogramu obsługi przerwa
assembler?86? 2 144 5. Rozkazy mikroprocesorów 8086/8088PrzykÅ‚ad MOV AL, 20H    ; s
assembler?86? 0 1 1 140 5. Rozkazy mikroprocesorów 8086/8088 MOVS CEL, ZRODLO MOV SI, OFFSET ZRODL
assembler?86? 7 94 5. Rozkazy mikroprocesorów 8086/8088 OUT DX, AX MOV DX, 7645 OUT DX, AL  &
assembler?86? 4 28 2. Mikroprocesory 8086/8088 MOV    AL,ZMIENNA BAJT[DI
assembler?86? 2 84 5. Rozkazy mikroprocesorów 8086/8088 Pośrednio przez rejestr bazowy i indeksowy
assembler?86? 3 86 5. Rozkazy mikroprocesorów 8086/8088 LES - załadowanie adresu logicznego do wsk
assembler?86? 5 W 90    5. Rozkazy mikroprocesorów 8086/8088 PrzykÅ‚ady PUSH ZMIENNA
assembler?86? 6 92    5. Rozkazy mikroprocesorów 8086/8088 Zamiana miejscami zawart
assembler?86? 9 98 5. Rozkazy mikroprocesorów 8086/8088 Pojęcie rozpakowanego i normalnego kodu BC
assembler?86? 3 106 5. Rozkazy1 mikroprocesorów 8086/8088 SBB (ang. subtract byle or word with bor
assembler?86? 4 108 5. Rozkazy mikroprocesorów 8086/8088 PrzykÅ‚ady DEC SI DEC AX    
assembler?86? 7 114    5. Rozkazy mikroprocesorów 8086/8088 Mnożenie zawartoÅ›ci aku
assembler?86? 2 124 5. Rozkazy mikroprocesorów 8086/8088 Rozkaz realizuje logiczne mnożenie odpowi

więcej podobnych podstron