74 4. Język asemblerowy mikroprocesorów 8086/8088
Przykład
ZMIENNA A |
DW 5*5 |
; = 25 |
ZMIENNA B |
DW 50 MOD 7 |
; = i |
ZMIENNA C |
DW 50/7 |
; = 7 |
Operatory SHR, SHL
Operatory SHR i SHL pozwalają przesuwać argument o zadaną liczbę bitów w prawo lub w lewo. I tak y SHR x oznacza przesunięcie argumentu y o x bitów w prawo, natomiast y SHL x oznacza przesunięcie argumentu y o x bitów w lewo. Obowiązują następujące reguły I
- bity nie mieszczące się po przesunięciu w zapisie argumentu są tracone, 1
- po przesunięciu argument jest uzupełniany bilami o wartości 0, 1
- przesunięcie argumentu w lewo o 1 bit jest równoważne dzieleniu przez 2,
- przesunięcie argumentu w prawo o 1 bil jest równoważne mnożeniu przez 2, M
- następujące zapisy są równoważne: y SHR -x, y SHL x.
= 10101010B = 07FH
= 10101010 SHR 1 = 01010101B +
Przykład
01010101B SHL 2 ?
0FFH SHR 1 10101010B SHL -1
Operator OR
0 OR 0 = 0 1 OR 0 = 1
0OR 1 = 1 1OR 1 = 1
WARTOŚĆ EQU 00111011B ; = 3BH I
MOV AX, WARTOŚĆ OR MASKA ; AX«-0111111 IB = 7FH «
0 XOR 0 = 0 1 XOR 0 = 1
0 XOR1 = 1 1XOR1 = 0
Przykład
WARTOŚĆ EOU00111011B MASKA EQU 01010101B
MOV AX,WARTOŚĆ XOR MASKA
= 3BH
= 55H
AX«—01101110B = 6EH ♦
Operator AND
Operator AND pozwala uzyskać funkcję iloczynu logicznego obliczaną na poszczególnych bitach według następujących reguł
0 AND 0 = 0 1 AND 0 = 0
0 AND 1=0 1 AND 1 = 1
Przykład
WARTOŚĆ EQU 0011101 IB ; = 3BH
MASKA EOU 01010101B ; = 55H
MOVAX, WARTOŚĆ AND MASKA ; AX<-0001000IB = 11H +
Operator NOT_ ______
Operator NOT pozwala zanegować logicznie argument, tzn. zamienia jedynkę logiczną na zero logiczne i odwrotnie.
Przykład
MASKA EQU01010101B
MOV AX, NOT MASKA ; AX^11000100B = 0C4H
MOV AX, NOT 00111011B AND MASKA ; AX<-01000100B = 44H
MOV AX, NOT (00111011B AND MASKA) ; AX<-11101110B = 0EEH +
Operator SHORT _
Operator SHORT sprowadza wynik wyrażenia do jednego bajtu. Wówczas asembler generuje jedynie jeden bajt kodu wynikowego. Programista musi dbać o to, aby wynik wy rażenia mieścił się w jednym bajcie (w przeciwnym przypadku jest sygnalizowany błąd i kod maszynowy nie jest generowany). Jeżeli wyrażenie z operatotem SHORT znajduje się wewnątrz innego wyrażenia, to operator ten traci swoje znaczenie.
Przykład
JMP SHORT ETYKIETA ; dystans skoku mieści się w 1 bajcie ♦
Asembler nie zna odległości skoku w ramach segmentu i standardowo (np. dla instrukcji JMP ETYKIETA) dystans jest generowany w dwóch bajtach.
^Pgratory EQ, LT, LE, GT, GE, NE ___
Operatory umożliwiające porównanie dwóch wyrażeń. Znaczenie Poszczególnych operatorów Q (ang. eąiial) - równość,
E (ang. not eąual) - nierówność,
* (ang. lowerthen) - mniejszy niż,