Aktyw Forum

Zarejestruj się na forum.ep.com.pl i zgłoś swój akces do Aktywu Forum. Jeśli jesteś już zarejestrowany wystarczy, że się zalogujesz.

Sprawdź punkty Zarejestruj się

ASAMBLER 89-2051

ekspert100
-
-
Posty:5
Rejestracja:4 sie 2005, o 18:56
Lokalizacja:CIECHANÓW
ASAMBLER 89-2051

Postautor: ekspert100 » 4 sie 2005, o 19:10

ASAMBLER- jest to część programu,mam problem ,
chodzi o porównanie dwóch komórek pamięci
(są to wartości z pomiarów )
i wykonanie skoku do podprogramu oraz powrót do głownego.
Jakiej operacji najlepiej użyć,
***********************************************************
cyfra EQU 03Dh ;
rcyf EQU 03Eh ;
icyf EQU 041h ;
ncyf EQU 042h ;
tcyf EQU 045h


;-----------------------------------------------------------
; podprogram porównuje zawartość komórki
; ncyf i cyfra (wartość od 0-255)0ff
; jeśli równe to skok do ste6-podprogram
; jeśli różne to skok do ste7-podprogram
ste5:

mov a,cyfra ;kopiuj cyfra do a
mov ncyf,a;kopiuj a do ncyf-pomocniczy
mov a,ncyf;kopiuj ncyf do a.do tąd ok
clr c
subb a,cyfra ;odejmnij od a ,tu błąd bo zawsze skok
jb ncyf,ste6 ;porównaj i skocz jeśli równe 0 do ste6****

;subb a,icyf ;odejmnij od a icyf
;cjne a,cyfra,ste6 ;porównaj i skocz jeśli równe do ste6****


;-----------------------------------------------------------
; podprogram zwieksz tcyf -1
ste6:

dec tcyf;-1
ret
;-----------------------------------------------------------
; podprogram zwieksz tcyf +1
ste7:

inc tcyf;+1
ret
;------------------------------------------------------------

radzio
Moderator
Moderator
Posty:967
Rejestracja:13 maja 2003, o 10:33
Lokalizacja:Sosnowiec
Kontaktowanie:

Postautor: radzio » 4 sie 2005, o 20:22

mov a,cyfra ;kopiuj cyfra do a
mov ncyf,a;kopiuj a do ncyf-pomocniczy
mov a,ncyf;kopiuj ncyf do a.do tąd ok
Po co to? najpierw do a wpisujesz cyfra, potem a wpisujesz do ncyfra i zaraz potem z ncyfra nazod do a kopiujesz? W efekcie zarówna a, cyfra jaki ncyf będą zawierały tą samą wartość.
jb ncyf,ste6 ;porównaj i skocz jeśli równe 0 do ste6****
JB to instrukcja wykonująca skok jeśli bit jest ustawiony! sprawdzony będzie bit o adresie 042h a nie wynik odejmowania.
subb a,cyfra ;odejmnij od a ,tu błąd bo zawsze skok
tu zawsze będzie 0 bo odejmujesz te same wartości!
;subb a,icyf ;odejmnij od a icyf
;cjne a,cyfra,ste6 ;porównaj i skocz jeśli równe do ste6****
Dlaczego wykomentowałeś poprawny kod? Tzn instrukcja cjne a,cyfra,ste6 jest akurat najbardziej tu wskazana.
ste6:

dec tcyf;-1
ret
Jeśli wykonujesz skok do podprogramu to nie mozesz wrócić za pomocą instrukcj ret! program się wykrzaczy.
; podprogram porównuje zawartość komórki
; ncyf i cyfra (wartość od 0-255)0ff
; jeśli równe to skok do ste6-podprogram
; jeśli różne to skok do ste7-podprogram
Mniej-więcej kod powinien wyglądać tak:

Kod: Zaznacz cały

mov a, cyfra ; do a przesyamy zawartość cyfra cjne a, ncyf, ste-7 ; porównujemy a z ncyf, jeśli różne to skok do ste-7 ajmp ste-6 ; w przecuiwnym razie do ste-6 powrót: ; tu wracamy z ste-6 i ste-7 ... ste-6: ... ; tu kod ajmp powrot ste-7: ... ; tu kod ajmp powrot
ewentualnie:

Kod: Zaznacz cały

cjne a, ncyf, dalej acall ste-6 ajmp dalej1 dalej: acall ste-7 dalej1: ... ste-6: .. ret ste-7: ... ret

ekspert100
-
-
Posty:5
Rejestracja:4 sie 2005, o 18:56
Lokalizacja:CIECHANÓW

Dzieki CI RADZIO

Postautor: ekspert100 » 5 sie 2005, o 12:31

Dzieki CI RADZIO za podpowiedz
musze to sprawdzić zaraz sie biorę do dzieła
nie miałęm pewności jaką wybrać metodę
dlatego tyle sugesti.
A MOŻE DIELENIE;
STE5:
MOV A. ICYF
DIV A,CYFRA;
JZ STE6;A DALEJ SKOK

radzio
Moderator
Moderator
Posty:967
Rejestracja:13 maja 2003, o 10:33
Lokalizacja:Sosnowiec
Kontaktowanie:

Postautor: radzio » 5 sie 2005, o 12:38

Dzielenie? A po co? Dzielenie jest najdłużej wykonywanym rozkazem i szkoda po prostu czasu. A pozatym nie bardzo wiem czy w wyniku dzielenia uzyska się 0 więc lepiej pozostać przy cjne.

ekspert100
-
-
Posty:5
Rejestracja:4 sie 2005, o 18:56
Lokalizacja:CIECHANÓW

OK

Postautor: ekspert100 » 5 sie 2005, o 12:42

DZIĘKI JASNE

Wróć do „8051”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 5 gości