64 4. Język asemblerowy mikroprocesorów 8086/8088
64 4. Język asemblerowy mikroprocesorów 8086/8088
POLE A |
DB 1,2,3,? | |
POLE DANYCH |
ENDS ••• ••• ; teraz będzie wywołanie struktury | |
WYNIKI |
POLE DANYCH < 7,0FFH,„,inny tekst’, > ; polu STAŁA nie będzie przypisana wartość ; pola TABELA i POLE A są nieprzepisywalne • •• | |
DANE .A A A A A A A |
• •• ENDS |
♦ |
Jeżeli inicjowany łańcuch znaków jest krótszy niż deklarowany, to zostanie uzupełniony z prawej strony spacjami. Z kolei gdy będzie zbyt długi, zostanie z prawej strony obcięty.
MOV DH, WYNIKI.WSKAZNIK MOV WYNIKI.LICZBA, AX
MOV [BXjWYNIKI.TABELA, 0
Dyrektywa .RAD!X |
System dziesiętny jest standardowym systemem liczenia w asemblerze MASM dla stałych numerycznych i wyrażeń. Za pomocą dyrektywy .RADIX można zadeklarować dowolny system liczenia o podstawie z zakresu [2,16]. Liczby przedstawione w przyjętym systemie liczenia nie muszą kończyć się odpowiednią literą - B, O, Q, D lub H (zob. p. 4.2.2). 1
Dyrektywa .RADIX nie ma jednak wpływu na sposób przedstawiania argumentów dyrektyw DD, DQ i DT, dla których standardowo obowiązuje dziesiętny system liczenia (chyba, że liczba kończy się jedną z wymienionych wyżej liter).
MOV CX, OABCDH
.RADIX16 .i (U j '
MOV CX, OABCD ; rozkaz równoważny poprzedniemu
• ••
• • •
; a teraz przypadek złośliwy
MOV AL, IB ; litera "B" deklaruje dwójkową postać
; liczby i do rejestru AL będzie załadowana liczba 1 ; (dziesiętnie), zamiast szesnastkowo 1BH;
; mimo dyrektywy .RADIX 16 trzeba w tym przypadku napisać:
♦
MOV AL, 1BH
4.3. Dyrektywy i pseudoinstmkcje 4 Sterowanie asemblacją warunkową
powered by
Mi fioł
Dyrektywy sterujące asemblacją warunkową pozwalają na pomijanie w czasie tłumaczenia programu źródłowego wydzielonych bloków tego programu. Składnia dyrektyw nawiązuje do instrukcji warunkowej IF/ELSE języków wysokiego poziomu i ma następującą postać
IFxxxx argument
...; 1 blok programu źródłowego [ELSE
... ]; opcjonalnie 2 blok programu źródłowego ENDIF
Jeżeli warunek określony argumentem jest prawdziwy, to 1 blok programu źródłowego jest tłumaczony. W przeciwnym przypadku jest pomijany, a jest tłumaczony 2 blok programu (jeśli zastosowano słowo kluczowe ELSE). Każda dyrektywa IF musi być zakończona słowem ENDIF. Dyrektywy asemblacji warunkowej mogą być zagnieżdżane do 255 razy. Każdy z argumentów musi być znany w pierwszym przejściu asemblera, w przeciwnym przypadku mogą wystąpić błędy i niepoprawna asemblacja. W każdej dyrektywie asemblacji warunkowej może wystąpić jedynie raz słowo ELSE. Gdy warunek nic jest spełniony, umożliwia to generowanie innych kodów wynikowych. ELSE dotyczy' zawsze ostatniej dyrektywy IF. Każda dyrektywa IF musi być zakończona słowem ENDIF. Są możliwe następujące rodzaje dyrektywy IF
Składnia dyrektywy
Warunek spełniony, gdy:
(asemblacja realizowana, gdy:) _
IF wyrażenie IFE wyrażenie IF1 IF2
IFDEF nazwa IFNDEF nazwa
IFB<argument >
IFNB < argument >
IFIDN<^J>,<^_2>
1FDIF <arg_ 1 >, < arg_2 >
wartość wyrażenia jest rów na zero wartość wyrażenia jest różna od zera pierwszy przebieg asemblera drugi przebieg asemblera nazwa została zdefiniowana nazwa nie została zdefiniowana i nic jest zadeklarowana jako zewnętrzna argument będący łańcuchem jest pusty argument j.w. nie jest pusty oba argumenty (łańcuchy) są identyczne oba argumenty (łańcuchy) są różne
Pr^y czym:
1wrażenie musi przedstawiać wartość numeryczną,
* muszą wystąpić nawiasy <...>,
nazwa zdefiniowana w programie dopiero po użyciu dyrektywy IFDEF/IFNDEF czasie pierwszego przebiegu asemblera jest uważana za niezdefiniowaną, a w' czasie Urugiego za zdefiniowaną,
/tyrcktywy 1FB/IFNB, IFIDN/IFDIF są wykorzystywane głównie w makroinstruk-cJach (zob. p. 4.3.6).