Kurs programowania w asemblerze
Operatory
Asembler daje nam do dyspozycji dużą ilość różnorodnych operatorów. Dzielimy je na kilka grup:
Operatory arytmetyczne
Mamy do dyspozycji następujące operatory arytmetyczne:
- * - mnożenie
- / - dzielenie
- MOD - modulo
- + - dodawanie
- - - odejmowanie
np.:
MOV DX,OFFSET Napis+15 DB 256*4 DUP (?) ADD BX,50/5 X EQU 1251 mod 1000
Operatory SHR i SHL
Przesuwanie bitów w prawo lub w lewo. Format:
wyrażenie SHR licznik wyrażenie SHL licznik
Przykład:
MOV AX,101001B SHL 2
Operatory logiczne
Zaliczamy do nich; NOT, AND, OR, XOR. Sposób użycia i format zapisu tak jak przy operatorach SHR i SHL.
Operator PTR
Operator ten wymusza typ wyrażenia, tak by było ono traktowane w odpowiedni sposób. Ma ono następujący format:
typ PTR wyrażenie
Mamy dostępne następujące typy:
BYTE DWORD TBYTE FAR WORD GWORD NEAR
np.:
MOV BYTE PTR [BX],5 CALL FAR PTR PROC1
Operator SEG
Podaje wartość segmentu danego wyrażenia adresowego, np.:
MOV DX,SEG Napis
Operator THIS
Definiuje typ danej etykiety w programie lub argumentu w instrukcji. Typy są takie same jak przy PTR. Format:
THIS typ
np. dwa poniższe wyrażenia są sobie równe:
ETYKIETA EQU THIS WORD ETYKIETA LABEL BYTE
Operator HIGH i LOW
Zwracają bardziej (HIGH) lub mniej (LOW) znaczące 8 bitów danego wyrażenia liczbowego, np.:
MOV AL,HIGH LICZBA SUB CL,LOW LICZBA
Operator TYPE
Zwraca liczbę reprezentującą typ danego wyrażenia. Jeśli jest ona typu bajt, to 2, word, to 4, itd. Jeśli wyrażenie jest etykietą typu NEAR zwraca 0FFFFH, a jeśli FAR 0FFFEH, np.:
MOV AX,TYPE DANE CALL (TYPE TYP_ADRESU) PTR PROCEDURA
Operator LENGTH
Zwraca liczbę elementów (nie bajtów) zadeklarowanych w definicji danej zmiennej, np.:
TAB1 DB 24 DUP (4) TAB2 DW 75 DUP (85 DUP (0)) ... MOV CX,LENGTH TAB1 ;W CX BEDZIE 24 SUB BX,LENGTH TAB2 ;BX ZOSTANIE POMNIEJSZONY o 75
Operator SIZE
Zwraca łączną liczbę bajtów zaalokowanych dla zmiennej. Używamy jak LENGTH.
Operator SHORT
Ustawia typ danej etykiety na SHORT. Zazwyczaj jest wykorzystywany w instrukcjach skoku, np.:
JMP SHORT ETYKIETA1
Operator MASK
Podaje maskę dla pozycji bitowych zajmowanych w rekordzie przez pole. Bity odpowiadające danemu polu są równe 1, a pozostałe 0
