I. Treści programowe
Instrukcje bezwarunkowego odwołania
programu, rozkazy wywołania podprogramów i powrotu do programu wywołującego,
etykiety.
II. Cel ćwiczenia
Nabycie umiejętności
programowania podprogramów oraz wykonywania do nich odwołań
i powrotów.
III. Materiały dydaktyczne:
Instrukcja
CMP
CMP A, B
Instrukcja:
3. nie zapisuje wyniku odejmowania,
4.
ustawia jedynie flagi
procesora.
Flagi
procesora używane w porównaniach:
|
Flaga |
Nazwa |
Znaczenie |
|
CF |
Carry Flag |
przeniesienie |
|
ZF |
Zero Flag |
wynik równy
zero |
|
SF |
Sign Flag |
znak liczby |
|
OF |
Overflow Flag |
przepełnienie |
|
PF |
Parity Flag |
parzystość |
Instrukcje skoków warunkowych
Instrukcje
typu J... oznaczają:
Procesor
wykonuje skok tylko wtedy, gdy spełniony jest określony warunek.
CMP A, B
J … ETYKIETA
Najważniejsze
skróty:
|
Skrót |
Znaczenie |
|
E |
Equal |
|
NE |
Not Equal |
|
G |
Greater |
|
L |
Less |
|
A |
Above |
|
B |
Below |
|
N |
Not |
ü Skoki warunkowe po instrukcji CMP
Porównania bez znaku (unsigned)
Stosowane np.
dla:
|
Instrukcja |
Znaczenie |
|
JA |
A > B |
|
JAE |
A >= B |
|
JB |
A < B |
|
JBE |
A <= B |
ü Porównania ze znakiem (signed)
Stosowane dla
liczb dodatnich i ujemnych.
|
Instrukcja |
Znaczenie |
|
JG |
A > B |
|
JGE |
A >= B |
|
JL |
A < B |
|
JLE |
A <= B |
ü Równość
|
Instrukcja |
Znaczenie |
|
JE / JZ |
A = B |
|
JNE / JNZ |
A ≠ B |
ü Skoki zależne od flag
|
Instrukcja |
Warunek |
|
JC |
CF = 1 |
|
JNC |
CF = 0 |
|
JO |
OF = 1 |
|
JNO |
OF = 0 |
|
JS |
SF = 1 |
|
JNS |
SF = 0 |
|
JP |
PF = 1 |
|
JNP |
PF = 0 |
Jak działa instrukcja CMP
MOV AX, 10
MOV BX, 5
CMP AX, BX
JG WIEKSZE
jeśli AX jest
większe od BX wykowywany jest skok do etykiety WIEKSZY
Przykład:
.MODEL TINY
.CODE
ORG 100h
START:
MOV AX, 15
MOV BX, 20
CMP AX, BX
JB MNIEJSZE
WIEKSZE:
MOV DX, OFFSET TXT1
MOV AH, 09h
INT 21h
JMP KONIEC
MNIEJSZE:
MOV DX, OFFSET TXT2
MOV AH, 09h
INT 21h
KONIEC:
MOV AH, 4Ch
INT 21h
TXT1 DB 'AX jest wieksze$'
TXT2 DB 'AX jest mniejsze$'
END START
Różnica
między JA a JG
JA —
porównanie bez znaku (unsigned). Procesor traktuje
liczby jako dodatnie.
JG —
porównanie ze znakiem (signed). Procesor uwzględnia
liczby ujemne.
MOV AL, -1
MOV BL, 1
CMP AL, BL
JA ETYKIETA
Wartość -1
w pamięci to 11111111b = 0FFh
= 255
Dla JA
procesor uzna więc: 255
> 1 i
wykona skok.
Natomiast:
JG
ETYKIETA
JG nie wykona skoku,
ponieważ: -1 < 1
IV. Zadania:
Zadanie 1.
Napisz
program pobierający znak z klawiatury. Jeśli zostanie wciśnięty klawisz z literą
‘a’ program wyświetli komunikat „WCISNIETO LITERKE A” w przeciwnym razie
„KONIEC PROGRAMU”.
Zadanie
2.
Napisz
program pobierający wartości z klawiatury od 2 do 5. Wprowadzona
wartość powinna zostać przetłumaczona na ciągi znaków wyświetlany na ekranie
(2-niedostateczny, 3-dostateczny, 4-dobry, 5-bardzo
dobry). W przypadku wyświetlenia wartości z poza zakresu powinien pojawić się
komunikat „Nieprawidłowa ocena !!!”.
Zadanie 3.
Napisz
program wyświetlający największą liczbę z trzech.
Zadanie 4.
Napisz
program sprawdzający, czy liczba jest dodatnia czy ujemna.