78 4. Język asemblerowy mikroprocesorów 8086/8088
PROGRAM SEGMENT
• • •
A DALEKO EQU THIS FAR ; x -2 PROGRAM
A: MOVAX, BX ; x -1 PROGRAM
• ••
PROGRAM ENDS Operator $
Operator $ określa aktualną wartość wskaźnika pozycji asemblera.
TEKST_TXT DB 'Mikrokomputery i minikomputery’ DLUGOSC_TXT DB $ - OFFSET TEKST_TXT
Operatory WIDTH, MASK i SHIFT __ ___
Operatory te są ściśle związane z dyrektywą RECORD i służą do manipulowania poszczególnymi polami bitów. Operator WIDTH umożliwia obliczenie długości rekordu lub poszczególnych jego pól w bitach. Operator MASK pozwala wyodrębnić pole rekordu do innych celów, np. testowania. Operator SHIFT nie występuje w postaci jawnej (tzn. nie ma takiego słowa kluczowego) i określa liczbę bitów o jaką trzeba by przesunąć pole rekordu w prawo tak, aby najmniej znaczcy bil pola stał się najmniej znaczącym bilem rekordu.
; definicja przykładowego rekordu (zob. też p. 4.3.4)
SEMAFORY RECORD ZNACZN1K:2, WOLNY: 1, INDEKS:10 ; przykładowe wywołania rekordu (rys. 4.1)
PRZYKŁAD SEMAFORY < 00B,1, >
♦
ALA SEMAFORY < „45 >
_,_!_I
n
INDEKS
ZNACZNIK
WOLNY
Rys. 4.1.
Następujące wartości poszczególnych symboli są ważne dla ww. definicji
licznik przesunięć (SHIFT)
ZNACZNIK = l£)
maska
(MASK)
MASK ZNACZNIK = 1800H
wielkość w bitach (WIDTH)
WIDTH ZNACZNIK =
powered by
4.4. Wyrażenia i operatory
WOLNY = 10 MASK WOLNY = 0400H WIDTH WOLNY = 1
INDEKS = 0 MASK INDEKS = 03FFH WIDTH INDEKS = 10
WIDTH SEMAFORY = 13
Wykorzystanie tych wartości może być następujące
MOV BX, PRZYKŁAD
jVlOV CL, WOLNY ; jest równoważne z MOV CL,10
SHR BX, CL ; pole rekordu w BX przesunięte w prawo
MOV CL, WIDTH INDEKS ; jest równoważne z MOV CL,10
•••
; poniższa sekwencja rozkazów powoduje przeniesienie pola
; ZNACZNIK rekordu PRZYKŁAD do pola ZNACZNIK w rekordzie ALA
; bez zmiany innych pól rekordów
MOV AX, PRZYKŁAD
ANDAX, MASK ZNACZNIK
AND ALA, NOT MASK ZNACZNIK
OR ALA, AX