| Author |
Message
|
polBarca Poziom 11

Joined: 05 May 2006 Posts: 60 Location: Kraków
|
#1
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

Joined: 28 Feb 2007 Posts: 1571 Location: Bydgoszcz
|
#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

|
#
17 Mar 2010 20:46 |
|
|
|
|
|
| Back to top |
|
 |
polBarca Poziom 11

Joined: 05 May 2006 Posts: 60 Location: Kraków
|
#3
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

Joined: 04 Jun 2007 Posts: 716 Location: Łódź
|
#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

|
#
18 Mar 2010 00:15 |
|
|
|
|
|
| Back to top |
|
 |
polBarca Poziom 11

Joined: 05 May 2006 Posts: 60 Location: Kraków
|
#5
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

|
#
18 Mar 2010 08:13 |
|
|
|
|
|
| Back to top |
|
 |
kemot55 Poziom 19

Joined: 04 Jun 2007 Posts: 716 Location: Łódź
|
#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

Joined: 05 May 2006 Posts: 60 Location: Kraków
|
#7
18 Mar 2010 17:41 Re: funkcja y=ax+b asembler w zakresie liczb 16bitowych uk80 |
|
|
|
|
|
| Back to top |
|
 |
kemot55 Poziom 19

Joined: 04 Jun 2007 Posts: 716 Location: Łódź
|
#8
18 Mar 2010 19:49 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 |
|
 |