Znajdowanie najwiekszej liczby w rejestrach
Znajdowanie najwiekszej liczby w rejestrach
Są dane w 3 rejestrach : R1,R2 i R3. Czy ktoś zna procedure jak znaleźć najwiekszą liczbe.
-
ZbeeGin
Oj, lenistwo, lenistwo!!. Proste jak kilometr nawojówki w kieszeni.
Bierzesz liczbę z rejestru R1 zapisujesz ją jako Max i stawiasz w Liczniku 1. Następnie bierzesz liczbę z R2 i porównujesz z Max. Jeśli większa to wpisujesz ją jako Max a w Liczniku wpisujesz 2. Jeśli nie to bierzesz liczbę z R3 i tak samo jak w przypadku R2 sprawdzasz z Max, jeśli większa to bla, bla, bla (jak wyżej), a jeśli mniejsza to koniec i w Max masz kopię największej liczby a w Liczniku numer rejestru.
Teraz przekształć to sobie na konkretne rozkazy.
Bierzesz liczbę z rejestru R1 zapisujesz ją jako Max i stawiasz w Liczniku 1. Następnie bierzesz liczbę z R2 i porównujesz z Max. Jeśli większa to wpisujesz ją jako Max a w Liczniku wpisujesz 2. Jeśli nie to bierzesz liczbę z R3 i tak samo jak w przypadku R2 sprawdzasz z Max, jeśli większa to bla, bla, bla (jak wyżej), a jeśli mniejsza to koniec i w Max masz kopię największej liczby a w Liczniku numer rejestru.
Teraz przekształć to sobie na konkretne rozkazy.
-
ZbeeGin
Tylko po co liczyć bity. Kompilkujesz sprawę. Procesory porównują poprzez odejmowanie!Legolas pisze:Wiem że można też liczyć bity po kolei
Prosta instrukcja: SUBB A, R1 (A := A - R1 - CY)
- Jeśli znacznik CY się nie ustawił to znaczy, że pożyczki nie było A > R1.
- Jeśli znacznik CY ustawiony, pożyczka była zatem A < R1.
- Jeśli znacznik Z ustawiony to wartości są równe A = R1
Piszę z głowy, więc nie odpowiadam za całkowitą poprawność:
Kod: Zaznacz cały
.CSEG
MOV MAX, R1
MOV LICZNIK, #1
MOV A, MAX
CLR C
SUBB A, R2
JNC _R2_NIE_WIEKSZA
MOV MAX, R2
INC LICZNIK
_R2_NIE_WIEKSZA:
MOV A, MAX
CLR C
SUBB A, R3
JNC _R3_NIE_WIEKSZA
MOV MAX, R3
INC LICZNIK
_R3_NIE_WIEKSZA
NOP
...
.DSEG
MAX .DEFB 0
LICZNIK .DEFB 0
-
elektronWielki
- Użytkownik
- Posty: 247
- Rejestracja: 30 maja 2006, 12:45
- Lokalizacja: kontownia
zakładając, że:
- po zakończeniu procedury w R1 znajduje się największa wartość
- w rejestrach mamy liczby ze znakiem
- program jest dla AVR-ków
kod będzie wyglądał tak:
- po zakończeniu procedury w R1 znajduje się największa wartość
- w rejestrach mamy liczby ze znakiem
- program jest dla AVR-ków
kod będzie wyglądał tak:
Kod: Zaznacz cały
cp R1, R2
brge label1
mov R1, R2
label1:
cp R1, R3
brge koniec
mov R1, R3
koniec:
;teraz w R1 jest największa wartość
-
ZbeeGin