76 4. Język asemblerowy mikroprocesorów 8086/8088
LE (ang. lower eąnal) - mniejszy lub równy, I
GT (ang.greater then ) - większy niż,
GE (ang. greater eÄ…ual ) - wiÄ™kszy lub równy. â–
Jeżeli wynik porówniania jest prawdziwy, to wyrażenie przyjmuje wartość 1H, I w przeciwnym wypadku wartość OH. Porównywane etykiety bądź zmienne muszą być zdefiniowane w tym samym segmencie - są bowiem porównywane ich adresy względem I początku segmentu. Nie można porównywać wyrażeń liczbowych z etykietami oraz ze zmiennymi.
Przykład
Jeżeli X = Y, to asembler wygeneruje rozkaz: M()V AX,0AAH. W przeciwnym wypadku rozkaz będzie miał postać: MOV AX, 0.
Operatory +,-
- liczby mogą być dodawane (lub odejmowane) jedynie do (od) liczb, etykiet lub zmiennych (tzn. ich offsetu) bądź nazwy segmentu (l/n. adresu początku segmentu), I
- zmienne i etykiety nie mogÄ… być dodawane, â–
- można dodawać zawartość rejestru indeksowego i bazowego, np. [BX + DI), I
- można dodawać lub odejmować liczby do (od) rejestru bazowego lub indeksowego
bądź ich sumy, np. [BP + SI - 10], 1
- od liczby nie mogÄ… być odejmowane rejestry. â–
Operatory HIGH i LOW służą do oddzielenia bardziej (HIGH) i mniej zna- I czącego (LOW) bajtu słowa. Operatory są związane wyłącznie z zagadnieniami zgod- ■ności programowej procesorów 8080/8085 i nie są stosowane w programach dla 8086. I
Operator PTR
Operator PTR przypisuje wyrażeniu adresowemu określony typ (BYTE, | WORD, DWORD dla zmiennych i FAR, NEAR dla etykiet). ^9
Mi sfol
4.4. Wyrażenia i operatory
Składnia wyrażenia z operatorem PTR jest następująca typ PTR wyrażenieadresowe
Operator PTR musi wystąpić, jeżeli w rozkazie maszynowym nie ma wprost wskazania typu wyrażenia będącego argumentem.
Przykład
DEC [DI]
DEC BYTE PTR [DI]
; źle - nie wiadomo, czy ma być zmniejszane ; słowo czy też bajt ; dobrze - ma być bajt
MOV [SI], OFFH ; źle - nie wiadomo czy zmienna adresowana
; przez rejestr SI jest bajtem ?
MOV WORD PTR [SI], OFFH ; dobrze - zmienna jest słowem
i
JMP [BX] ; źle - skok jest skokiem wewnątrz
; segmentu, czy też międzysegmentowy ?
JMP WORD PTR [BX] ; dobrze - skok wewnÄ…trz segmentu
JMP DWORD PTR [BX] ; dobrze - skok międzysegmentowy
MOV AX, WORD PTR ZMBAJTOWA ; do akumulatora słowo
; rozpoczynajÄ…ce siÄ™ od ZM BAJTOWA MOV AH, BYTE PTR ZM_SLOWOWA ; do AH jeden bajt ze zmiennej
; ZMSLOWOWA
JMP FAR PTR ETYKIETA ; skok do ETYKIETY zdefiniowanej
; w innym segmencie +
Operator THIS
Operator THIS wytwarza atrybuty offset i segment dla aktualnej wartości wskaźnika pozycji asemblera oraz wskazanego (za operatorem) typu. Wraz z dyrektywą EQU operator THIS pozwala redefmiować zmienne i etykiety.
Przykład
dane segment
SLOW A l
bajty i Bajty~2
SLOWA2
SLOWa 3
bajty 3 tabela
Dane
atrybuty zdefiniowanych zmiennych OFFSET TYP LENGHT SIZE SEGMENT
0 |
2 |
1 |
2 |
DANE |
0 |
1 |
100 |
100 |
DANE |
100 |
1 |
1 |
1 |
DANE |
100 |
2 |
200 |
400 |
DANE |
500 |
2 |
1 |
2 |
DANE |
500 |
1 |
1 |
1 |
DANE |
500 |
4 |
100 |
400 |
DANE |
powered by
EQU THIS WORD DB 100 DUP (?) EOU THIS BYTE DW 200 DUP (?) EQU THIS WORD EQU THIS BYTE DÅ‚> 100 DUP (?) ENDS