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
;------------------------------------------------------------
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
Moderatorzy:Jacek Bogusz, procesorowiec, robertw, tomasz_jablonski, r-mik, Moderatorzy
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ść.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
JB to instrukcja wykonująca skok jeśli bit jest ustawiony! sprawdzony będzie bit o adresie 042h a nie wynik odejmowania.jb ncyf,ste6 ;porównaj i skocz jeśli równe 0 do ste6****
tu zawsze będzie 0 bo odejmujesz te same wartości!subb a,cyfra ;odejmnij od a ,tu błąd bo zawsze skok
Dlaczego wykomentowałeś poprawny kod? Tzn instrukcja cjne a,cyfra,ste6 jest akurat najbardziej tu wskazana.;subb a,icyf ;odejmnij od a icyf
;cjne a,cyfra,ste6 ;porównaj i skocz jeśli równe do ste6****
Jeśli wykonujesz skok do podprogramu to nie mozesz wrócić za pomocą instrukcj ret! program się wykrzaczy.ste6:
dec tcyf;-1
ret
Mniej-więcej kod powinien wyglądać tak:; 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
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
Kod: Zaznacz cały
cjne a, ncyf, dalej
acall ste-6
ajmp dalej1
dalej:
acall ste-7
dalej1:
...
ste-6:
..
ret
ste-7:
...
ret
-
- -
- Posty:5
- Rejestracja:4 sie 2005, o 18:56
- Lokalizacja:CIECHANÓW
Dzieki CI RADZIO
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
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
Kto jest online
Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 8 gości