Skocz do zawartości
grzechuk

[asembler] Problem Z Zapisywaniem Tablicy

Rekomendowane odpowiedzi

na poczatku male wyjasnienie: nie jestem informatykiem (wiec sorry za bledy w komentarzach), a programowanie mikrokontrolerow niestety musze przejsc... zrobilem zadanie i mysle, ze dzialac bedzie po malej korekcie, o ktora prosze (albo chociaz o wskazowke, bo juz zglupialem) ;-)

 

zadanie: zadeklarowac tablice adr_c danych (dowolnych) i zakonczyc jak FFh (255d), napisac petle sprawdzajaca parzystosc kazdej danej i jesli jest parzysta - zapisac ja w tablicy adr_x, ktora zakonczyc tez FFh

 

moj program:

 

adr_x equ 0A0h  ;lokalizacja tablicy2 z liczbami parzystymiorg 0hljmp startorg 40h  ;przejscie z programem o 40  rejestrow dalejadr_c: db 04h, 080h, 0ah, 01d, 0ffh  ;deklaracja tablicyorg 100h start:mov r0,#0  ;w  tym rejestrze bedzie licznik odpowiadajacy za komorki w adr_cmov dptr,#adr_c  ;ustawienie wskaznika na tablicyspr1:mov a,r0mov r3,@dptr  ;zachowanie wartosci komorki  (ale nie dziala przy kompilacji, a nie wiem jak uzyc dpl i dph;/)inc r0  ;czyli "i++"movc a,@a+dptr  ;wpisanie do akumulatora wartosci z komorki "itej" tablicy (???)anl a,#0ffh  ;sprawdzenie, czy to koniec tablicyjz wyjdzanl a,#00000001b  ;sprawdzenie parzystoscijz zachowajsjmp spr1zachowaj:mov dptr,#adr_x  ;ustawienie sie na poczatku tablicy2mov a,r3movx @dptr,a  ;zapisanie do nowej tablicy liczby z r3inc dptr  ;nastepna komorka (i tutaj mam watpliwosci czy nie zrobic skoku do zwiekszenia razem z r0)sjmp spr1wyjdz:mov dptr,#adr_xmov a,r3movx @dptr,asjmp $end

pomoze ktos?

Edytowane przez jekyl

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

odpalalem to na makiecie i na symulatorze... do tablicy adr_x zapisuje tylko 33h (ktora nie jest ani parzysta ani nie jest w tablicy adr_c), komorki po tej z 33h pozostaja niezmienione (po wyzerowaniu, zostaja zera - zeby nie bylo ze nadpisuje tymi samymi liczbami)

 

problem lezy na 90% w zlym operowaniu dptr... tyle tylko, ze ja nie wiem co jest zle... a na czuja to juz petle czasowe godzine robilem (12 linijek kodu, z czego przez 30min dobieralem wartosci zmienne w dwoch linijkach)

Edytowane przez jekyl

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

ogolnie to zdaje sie nie ma zwyczaju rozwiazywania uzytkownikom zadan domowych, jednakze napisany przeze mnie kawalek kodu nie daje zadnych gwrancji ze ruszy, gdyz ponizsze wypociny powstaly na podstawie listy mnemonikow 8051 i minimalnej (chybionej?) dedukcji (np czy Rx daja dostep do pamieci 0..255 bajtow) to ja bym to widzial mniej wiecej tak:

 

mov r0, #adr_cmov r1, #adr_xspr1:cjne @r0, #0ffh, sprawdzaj; (R0) != 0FFh -> sprawdzajmov @r1, #0ff; zakoncz adr_x 0FFh sjmp koniec; to juz jest koniec, nie ma juz nic, jestesmy wolni, mozemy iscsprawdzaj:mov a, @r0; wpisz badana liczbe do akumulatoramov r3, a; zapamietaj badana liczbe do ewentualnego zapisuinc r0; zwieksz adres na kolejna liczbe wejsciowaanl a, #01h; sprawdz czy parzystajz zachowaj; parzysta to zapiszsjmp spr1; idz po nastepna liczbe do zbadaniazachowaj:mov a, r3; przypomnij sobie liczbe;]mov @r1, A; zapisz do nowej tablicyinc r1; zwieksz wskaznik nowej tablicy na ewentualna kolejna liczbesjmp spr1; idz po nastepna liczbe do zbadaniakoniec:end
Edytowane przez K3310pH

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Dołącz do dyskusji

Możesz dodać zawartość już teraz a zarejestrować się później. Jeśli posiadasz już konto, zaloguj się aby dodać zawartość za jego pomocą.

Gość
Dodaj odpowiedź do tematu...

×   Wklejono zawartość z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Odnośnik został automatycznie osadzony.   Przywróć wyświetlanie jako odnośnik

×   Przywrócono poprzednią zawartość.   Wyczyść edytor

×   Nie możesz bezpośrednio wkleić grafiki. Dodaj lub załącz grafiki z adresu URL.

Ładowanie


×
×
  • Dodaj nową pozycję...