2795180259

2795180259



Laboratorium Techniki Mikroprocesorowej 2 - EZ1C600 034

mniejsze’. Rozwiązaniem alternatywnym dla użycia rozkazu CP jest wykonanie odejmowania:

SUB B

Potrzebne do rozróżnienia wyniku porównania flagi CY oraz Z ustawiają się identycznie, jedynie zmienia się zawartość akumulatora A - przyjmuje on wartość różnicy porównywanych liczb. Taka utrata wartości jednego z argumentów może być niekorzystna, jeżeli mielibyśmy ją porównywać jeszcze z innymi zmiennymi.

Jeżeli w programie wykorzystujemy liczby dłuższe niż słowo maszynowe procesora (w przypadku eZ80 dłuższe niż 8 bitów) ich porównanie także jest możliwe. Uniwersalną metodą w takim przypadku jest policzenie różnicy tych liczb. Różnicę liczb wielobajtowych liczy się rozpoczynając odejmowanie od najmłodszych par bajtów, a kończąc na bajtach najbardziej znaczących. Stan flagi przeniesienia na koniec tych operacji informuje nas o relacji pomiędzy odejmowanymi liczbami. Jeżeli w przypadku mikroprocesora eZ80 porównywane liczby są dwubajtowe można też rozważyć użycie rozkazu odejmowania dwubajtowego:

varl:equ lOOh    /przykład deklaracji adresów

var2: equ var2+2    /zmiennych programowych

LD    HL,(varl) /HL<-2-bajtowa wartość zmiennej varl

LD    DE,(var2) /DE<-2-bajtowa wartość zmiennej var2

CLR C    /wstępne zerowanie CY

SBC HL,DE    /CY:=0 <=> HL<DE

JP NC,varlmniejsza /skok

Wstępne zerowanie flagi przeniesienia rozkazem CY jest tu niezbędne, ponieważ rozkaz SBC jest odejmowaniem z pożyczką i wykonanie go przy ustawionej fladze CY dawałoby niepoprawny wynik porównania.

Użycie bloku decyzyjnego o trzech wyjściach oznacza odpowiednie wykorzystanie przez skoki warunkowe flag przeniesienia CY i zera Z. Przykładowo, schematowi blokowemu:

<o i >o

zm1-zm2

=oi ^

odpowiadałby następujący fragment programu:

LD    A, (zm2)

LD    B, A

LD    A, (zml)

CP    B

JR    Z,równe    /skok    gdy    zml=zm2

JR    C,mniejsze /skok    gdy    zml<zm2

/ tu jeśli    zml>zm2

LD

BC, (varl)

/BC<-2-bajtowa wartość zmiennej varl

LD

DE,(var2)

/DE<-2-bajtowa wartość zmiennej var2

LD

A, C

CP

E

JR

NZ,rożne

/skok gdy bajty się różnią

LD

A, B

CP

D

JR

NZ,rożne

/skok gdy bajty się różnią

;tu jeśli varl=var2


Rozkaz ‘cp B’ mógłby być zamieniony parą rozkazów ‘clr c’ i ‘sub b’. Jeżeli należy jedynie wykryć równość dwóch wartości (zmiennych) o dłuższej niż słowo maszynowe procesora reprezentacji, można to zrobić następująco:

1-11



Wyszukiwarka

Podobne podstrony:
Laboratorium Techniki Mikroprocesorowej 2 - EZ1C600 034 UWAGA: - pierwszą dyrektywą tekstu programu
Laboratorium Techniki Mikroprocesorowej 2 - EZ1C600 034 Laboratorium Techniki Mikroprocesorowej 2 -
Laboratorium Techniki Mikroprocesorowej 2 - EZ1C600 034 Laboratorium Techniki Mikroprocesorowej 2 -
Laboratorium Techniki Mikroprocesorowej 2 - EZ1C600 034 Szczególnym przypadkiem jest wykrycie czy ja

więcej podobnych podstron