Obraz zawierający tekst, Czcionka, Grafika

Opis wygenerowany automatycznie 

Kierunek Informatyka

 

Instrukcja do ćwiczeń laboratoryjnych nr:

5

Nazwa przedmiotu:
Programowanie niskopoziomowe

Temat: Instrukcje warunkowe

Tryb studiów: stacjonarny
i niestacjonarny

Czas trwanie ćw.

2x45 min

Autor materiałów: dr Marcin Skuba

 

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:

  1. porównuje wartości A i B
  2. wykonuje wewnętrznie odejmowanie A - B

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.