196
7. Wybrane techniki programowania
TAB 3
TAB 4
Rys. 7.8.
W przypadku, gdy tablice są zlokalizowane tak jak na rys. 7.8, powyższy program zniszczy ostatnie elementy tablicy TAB4, należy zatem zmienić kierunek transmisji tak, aby odbywała się począwszy od większych do mniejszych adresów
MOV CX, 300 ; liczba bajtów do przesłania
MOV SI, SEG TAB 3 ; adres źródła
MOV DS, SI
MOV SI, OFFSET TAB 3 + 299
MOV DI, SEG TAB4 ; adres przeznaczenia
MOV ES, DI
MOV DI, OFFSET TAB 4 + 299
STD ; od większych do mniejszych adresów
RE P MOVSB
• Rozkaz MOVS umożliwia również wypełnienie stałą wartością zadanej tablicy. Przykład programu wpisującego do tablicy TAB 5 stałą 5555H (rys. 7.9)
♦
MOV CX, LENGTH TAB 5-1 LDS SI, TAB 5 ADRES MOV WORD PTR [SI], 5555H LES DI, TAB_5_ADRES INC DI INC DI CLD
REP MOYSW
; wielkość tablicy TAB 5 -1 ; adres tablicy
; wpisz do pierwszego słowa ; adres drugiego słowa w tablicy
Powyższą operację można zrealizować też za pomocą rozkazu STOS. Jest to rozwią zanie krótsze, ale wykorzystujące akumulator
; stała do wpisania
PUSH AX MOV AX, 5555H
powered by
7.3. Przetwarzanie łańcuchów (tablic)
TAB 5
TAB8 |
Bajt 1 | |||
Bajt 2 | ||||
Bajt 3 | ||||
Bajt 4 | ||||
SÅ‚owo 1 |
5555H |
Bajt 5 |
Bajt 1 | |
SÅ‚owo 2 |
Bajt 2 | |||
SÅ‚owo 3 |
♦ -i -1 |
Bajt 3 | ||
«_1 TAB_9 |
Bajt 252 | |||
â–¡ |
Bajt 253 1 | |||
SÅ‚owo 150 |
Bajt 254 | |||
Bajt 64 | ||||
Bajt 255 | ||||
Bajt 256 |
Rys. 7.10.
Rys.7.9.
; wielkość tablicy TAB 5 ; adres tablicy
MOV CX, LENGTH TAB 5 LDS DI, TAB 5_ADRES CLD
REP STOSW POP AX
• Rozkazy łańcuchowe używane bez przedrostków powodują wykonanie działania (np. przesłania) na jednym elemencie łańcucha. Przykładowo można zorganizować przepisywanie tablic z równoczesnym wykonywaniem działań na elementach. Następujący program przepisuje bajty tablicy TAB 6 do TAB 7 pomijając bajty równe 55H
PI:
; ustaw znaczniki, czy bajt = 55H ?
M()V CX, S1ZE TAB 6 MOV SI, SEG TAB 6 MOV DS, SI
MOV SI, OFFSET TAB 6 MOV DI, SEG TAB 7 MOV ES, DI
MOV DI, OFFSET TAB 7 CLD
CMP BYTE PTR [SI], 55H
; liczba bajtów do przesłania ; adres źródła
; adres przeznaczenia
MOVSB JNZP2 DEC Dl LOOP PI
P2:
; prześlij niezależnie od wyniku porównania
; usuń przesłany bajt równy 55H ; następny bajt
Przykład utworzenia tablicy TAB 9 z co czwartego bajtu tablicy TAB 8 (rys. 7.10)
MOV CX, 64
LDS SI, TAB 8 ADRES
LES DI, TAB 9 ADRES ; liczba bajtów wynikowych ; adres tablicy źródłowej ; adres tablicy przeznaczenia
â–