FAQ | Points | Add... | Recent posts | Search | Register | Log in


funkcja y=ax+b asembler w zakresie liczb 16bitowych uk8051


Post new topic  This topic is locked      Main Page -> Forum Index -> Microcontrollers Generally -> 51 Microcontrollers -> funkcja y=ax+b asembler w zakresie liczb 16bitowych uk8051
Author
Message
polBarca
Poziom 11
Poziom 11


Joined: 05 May 2006
Posts: 60
Location: Kraków

Post#1 Post from the author of the topic 17 Mar 2010 20:12   

funkcja y=ax+b asembler w zakresie liczb 16bitowych uk8051


Witam. a i x są liczbami 16 bitowymi. wykonałem mnożenie liczby 16bitowej przez 16 bitową i teraz mam problem bo nie mogę zrobić dodawania(+b). wynik mnożenia liczba 32bitowa, chciałem dodać jakąś liczbę 8bitowa. moje pytanie jak zrobić w asemblerze dodawanie liczby 8b do 32b?
Back to top
   
tadzik85
Poziom 22
Poziom 22


Joined: 28 Feb 2007
Posts: 1571
Location: Bydgoszcz

Post#2 17 Mar 2010 20:46   

Re: funkcja y=ax+b asembler w zakresie liczb 16bitowych uk80


Niech wynik składa się z bajtów B4B3B2B1.

Code:
add B1,b
addc B2,#0
addc B3,#0
addc B4,#0

Back to top
   
Google

Google Adsense


Post# 17 Mar 2010 20:46   





Back to top
   
polBarca
Poziom 11
Poziom 11


Joined: 05 May 2006
Posts: 60
Location: Kraków

Post#3 Post from the author of the topic 17 Mar 2010 21:15   

Re: funkcja y=ax+b asembler w zakresie liczb 16bitowych uk80


mnożenie działa mi dobrze. program pisze w uVision3. wynik mnożenia w:
30h(MSB) 31h 32h 33h a wynik po dodawani chce w :
42h(MSB) 43h 44h 45h po mnożeniu wpisuje
MOV A,33h
ADD A,#02h
MOV 45h,A
MOV A,32h
ADDC A,#0h
MOV 44h,A
MOV A,31h
ADDC A,#0h
MOV 43h,A
MOV A,30h
ADDC A,#0h
MOV 42h,A
sjmp start
END
keil nie znajduje błędów w programie ale jak włączę symulacje to wartosci w komorkach 30h 31h 32h 42h 43h ciagle sie zmieniaja. prosze o pomoc
Back to top
   
kemot55
Poziom 19
Poziom 19


Joined: 04 Jun 2007
Posts: 716
Location: Łódź

Post#4 18 Mar 2010 00:15   

Re: funkcja y=ax+b asembler w zakresie liczb 16bitowych uk80


Dodawanie raczej jest poprawne, ale to co napisałeś to tylko fragment kodu. Pokaż całość.
Back to top
   
Google

Google Adsense


Post# 18 Mar 2010 00:15   





Back to top
   
polBarca
Poziom 11
Poziom 11


Joined: 05 May 2006
Posts: 60
Location: Kraków

Post#5 Post from the author of the topic 18 Mar 2010 08:13   

Re: funkcja y=ax+b asembler w zakresie liczb 16bitowych uk80


start:
MOV A,P0
MOV B,P2
MUL AB
MOV 33h,A
MOV 32h,B
MOV A,P2
MOV B,P1
MUL AB
ADD A,32h
MOV 32h,A
MOV A,B
ADDC A,31h
MOV 31h,A
CLR A
ADDC A,30h
MOV 30h,A
MOV A,P0
MOV B,P3
MUL AB
ADD A,32h
MOV 32h,A
MOV A,B
ADDC A,31h
MOV 31h,A
CLR A
ADDC A,30h
MOV 30h,A
MOV A,P3
MOV B,P1
MUL AB
ADD A,31h
MOV 31h,A
MOV A,B
ADDC A,30h
MOV 30h,A
MOV A,33h
ADD A,#02h
MOV 45h,A
MOV A,32h
ADDC A,#0h
MOV 44h,A
MOV A,31h
ADDC A,#0h
MOV 43h,A
MOV A,30h
ADDC A,#0h
MOV 42h,A
SJMP start
END
Back to top
   
Google

Google Adsense


Post# Post from the author of the topic 18 Mar 2010 08:13   





Back to top
   
kemot55
Poziom 19
Poziom 19


Joined: 04 Jun 2007
Posts: 716
Location: Łódź

Post#6 18 Mar 2010 10:37   

Re: funkcja y=ax+b asembler w zakresie liczb 16bitowych uk80


Nie rozumiem początku. Operacja mnożenia daje w wyniku sklejony rejestr 16 bitowy "B,A", gdzie jest B starszą częścią. Po drugim mnożeniu wykonujesz dodawanie z tym, że sumujesz starszy bajt poprzedniego mnożenia i młodszy bieżącego. Dalej nie sprawdzałem. Wyjaśnij cel powyższego działania (może ja coś wymyśliłem :-)). A poza tym we wzorze y=ax+b jest tylko jedno mnożenie. Po co to drugie w kodzie?
Back to top
   
polBarca
Poziom 11
Poziom 11


Joined: 05 May 2006
Posts: 60
Location: Kraków

Post#7 Post from the author of the topic 18 Mar 2010 17:41   

Re: funkcja y=ax+b asembler w zakresie liczb 16bitowych uk80


funkcja y=ax+b asembler w zakresie liczb 16bitowych uk8051
Back to top
   
kemot55
Poziom 19
Poziom 19


Joined: 04 Jun 2007
Posts: 716
Location: Łódź

Post#8 18 Mar 2010 19:49helpful post - solution   

Re: funkcja y=ax+b asembler w zakresie liczb 16bitowych uk80


OK. Nie przeczytałem dokładnie od początku :-)
W 12 linii Twojego kodu jest (chyba) nieścisłość. Dodajesz komórkę 31h, której wcześniej nie ustawiasz (np. zerujesz). W pętli to się może zachowywać w sposób nieokreślony.
Jeżeli zadanie zdefiniujemy tak:
(33h,32h,31h,30h)=P1P0*P3P2 +2 (gdzie P1, P3, 33h starsze bajty) to kod programu powinien być taki (wg mnie):
Code:

MOV A,P0
MOV B,P2
MUL AB
ADD A,#2
MOV 30H,A
MOV A,B
ADDC A,#0
MOV 31H,A
MOV A,P1
MOV B,P2
MUL AB
MOV R7,A
MOV R6,B

MOV A,P3
MOV B,P0
MUL AB
MOV R5,B
ADD A,31H
mov r4,a

XRL A,ACC
ADDC A,#0
MOV R3,A

MOV A,R4
ADD A,R7
MOV 31H,A

MOV A,R3
ADDC A,#0
MOV R3,A

MOV A,P3
MOV B,P1
MUL AB

ADD A,R3
MOV R4,A

XRL A,ACC
ADDC A,#0
MOV R3,A
MOV A,R4
ADD A,R6

MOV R4,A
MOV A,R3
ADDC A,#0
MOV R3,A
MOV A,R4

ADD A,R5
MOV 32H,A
MOV A,B
ADD A,R3
MOV 33H,A


Back to top
   
Post new topic  This topic is locked      Main Page -> Forum Index -> Microcontrollers Generally -> 51 Microcontrollers -> funkcja y=ax+b asembler w zakresie liczb 16bitowych uk8051
Page 1 of 1
Similar topics
Porownywanie liczb [mikrokontroler 8051] - asembler (6)
[Asembler] Dodawanie 3 liczb 8-bitowych (11)
asembler problem z dzielenie 2 liczb ? (2)
[8051][asembler/Ride] dodawanie dwóch liczb 16-bitowych. (2)
Podmiana liter/liczb. Funkcja StringRepleace. (3)
zabepieczenie na uK8051 do silnika 3-fazowego (3)
miernik natezenia 3-faz na uK8051 (2)
Dziwna funkcja w c++. Czy ktoś wie co to za funkcja? (5)

Page generation time: 0.061 seconds


FAQ || Administrator || Moderators || Widgets and banners || Contact
elektroda.pl topic RSS feed