Forum Coders' city Strona Główna Coders' city
Nasza pasja to programowanie!
 

 PomocPomoc   SzukajSzukaj   UżytkownicyUżytkownicy   GrupyGrupy  RejestracjaRejestracja 
Archiwum starego forum + teoria    RSS & Panel/SideBar
 ProfilProfil   Zaloguj się, by sprawdzić wiadomościZaloguj się, by sprawdzić wiadomości   ZalogujZaloguj 

Potrzebuję szybkiej odpowiedzi na moje pytanie... Skrócony regulamin

[8051] dodawanie dwóch liczb 16-bitowych



 
Odpowiedz do tematu    Forum Coders' city Strona Główna -> Elektronika, programowanie niskopoziomowe
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
G1T



Dołączył: 25 Gru 2006
Posty: 202

PostWysłany: Pon Mar 28, 2011 6:20 pm      Temat postu: [8051] dodawanie dwóch liczb 16-bitowych Odpowiedz z cytatem Pisownia

asembler, m 8051, środowisko Ride

mam takie zadanie:

w pamięci wewnętrznej mam zapisane 2 liczby 16-bitowe. należy wczytać te liczby i dodać.

Jak dodać 2 liczby 16 bitowe?
Powrót do góry
Zobacz profil autora Wyślij prywatną wiadomość
marcin_an
Site Admin


Dołączył: 26 Maj 2005
Posty: 17278
Skąd: z drugiej strony Kabla

PostWysłany: Pon Mar 28, 2011 6:39 pm      Temat postu: Odpowiedz z cytatem Pisownia

Tak samo jakbyś dodawał "pod kreską". Podstawa systemu zapisu nie ma znaczenia dla działania tej metody.
_________________
Matematyka to taki twór, który pozwala opisać sokowirówkę jako urządzenie pobierające ujemne odpadki i produkujące z nich sok.
"Lameria atakuje" | RTFM | UMLet - edytor UML inaczej | Wykłady ks.Pawlukiewicza
Powrót do góry
Zobacz profil autora Wyślij prywatną wiadomość
G1T



Dołączył: 25 Gru 2006
Posty: 202

PostWysłany: Pon Mar 28, 2011 8:46 pm      Temat postu: Odpowiedz z cytatem Pisownia

tylko, że z pamięci mam czytać liczbę jedności, dziesiątek, setek, tysięcy... Potem muszę to pozamieniać na liczby decymalne (czyli odpowiednio mnożyć przez 1,10,100,1000), tylko czy to ma sens? Może źle rozumuję i jest na to jakiś łatwiejszy sposób?
Powrót do góry
Zobacz profil autora Wyślij prywatną wiadomość
marcin_an
Site Admin


Dołączył: 26 Maj 2005
Posty: 17278
Skąd: z drugiej strony Kabla

PostWysłany: Pon Mar 28, 2011 8:51 pm      Temat postu: Odpowiedz z cytatem Pisownia

Nie. Z pamięci wczytujesz dwa bajty, czyli dwie cyfry w systemie 256-tkowym. Dodajesz je tak samo, jak działa dodawanie pod kreską (którego nie interesuje, w jakim systemie są cyfry). Po co ci konwersje na tekst przy dodawaniu - nie wiem.
_________________
Matematyka to taki twór, który pozwala opisać sokowirówkę jako urządzenie pobierające ujemne odpadki i produkujące z nich sok.
"Lameria atakuje" | RTFM | UMLet - edytor UML inaczej | Wykłady ks.Pawlukiewicza
Powrót do góry
Zobacz profil autora Wyślij prywatną wiadomość
G1T



Dołączył: 25 Gru 2006
Posty: 202

PostWysłany: Czw Mar 31, 2011 3:55 pm      Temat postu: Odpowiedz z cytatem Pisownia

muszę tak wczytywać liczby, ponieważ mam takie zadanie. dla nie najlepiej byłoby liczyć pod kreską, ale muszę to zrobić przez wczytywanie tych liczb i zapis jednej liczby w dwóch rejestrach.

mam już zrobione wczytywanie tych liczb z pamięci, ale coś nie do końca działa. Jeżeli mam tylko kod, żeby wczytywał pierwszą liczbę to ją ładnie wczytuje, ale jeżeli dołączam kod na wczytanie 2. liczby to już nie działa, ponieważ tak jakby mazał po pierwszej wczytanej liczbie (ale nie korzystam z rejestrów gdzie przechowuję pierwszą liczbę).

oto kod:
Kod:
include     REG515.INC            ;Tabela predefinicyjna SFR.
;-------------------------------------------------------------------------------
                        
ljmp start
org 100h

    start:
        
    liczba1:    mov R0,0Fh ;jednosci
                mov a,R0
                subb a,#30h
                mov R0,a
            
                mov R1,0Eh    ;dziesiatki
                mov a,R1
                subb a,#30h
                mov b,#10d
                mul ab
                        
                add a,R0
                mov R0,a
            
                mov R1,0Dh ;setki
                mov a,R1
                subb a,#30h
                mov b,#100d
                mul ab
                mov R1,b    
                mov R2,a ;np. liczba 600 to 258h: na r1 2; na r2 58
            
                mov a,r0
                add a,r2
                mov r2,a    ;na r1 starsza część; na r2 młodsza
                
                mov R3,#0000h
                addc a,R3
                mov R4,a
                
                ;add a,R0
                ;mov R7,a
                ;mov a,b
            
                
                
                ;mov R3,#0000h
                ;addc a,R3
                ;mov R6,a
            
                mov r0,0Ch    ;tysiace
                mov a,r0
                subb a,#30h
                mov r0,a
                mov b,#0E8h
                mul ab
                mov r3,a ;młodsza część wyniku
                mov r4,b
                mov b,#03h
                mov a,r0
                mul ab
                mov r5,b
                add a,r4
                mov r5,a        ;starsza czesc wyniku        
                
                mov a,r3
                add a,r2
                mov r2,a
                
                mov a,r5
                addc a,r1
                mov r1,a
                ;wynik: starcza część na r1, młodsza na r2
                
                mov r0,0Bh ;10tysięcy
                mov a,r0
                subb a,#30h
                mov r0,a
                mov b,#10h
                mul ab
                mov r3,a ;młodsza część wyniku
                mov r4,b
                mov a,r0
                mov b,#27h
                mul ab
                add a,r4
                mov r4,a ;starsza część wyniku
                
                mov a,r1
                add a,r4
                mov r6,a
                
                mov a,r2
                addc a,r3
                mov r7,a
                
                ; 1. liczba: r6 - pierwsza część, r7 - druga część
                    
        liczba2:    
                mov R0,17h ;jednosci
                mov a,R0
                subb a,#30h
                mov R1,a
            
                mov R0,16h    ;dziesiatki
                mov a,R0
                subb a,#30h
                mov b,#10d
                mul ab
                        
                add a,R1
                mov R1,a
            
                mov R0,15h ;setki
                mov a,R0
                subb a,#30h
                mov b,#100d
                mul ab
                mov R3,b    
                mov R4,a ;np. liczba 600 to 258h: na r1 2; na r2 58
            
                mov a,r1
                add a,r4
                mov r2,a    ;na r1 starsza część; na r2 młodsza
                
                mov R3,#0000h
                addc a,R3
                mov R4,a
                
                ;add a,R0
                ;mov R7,a
                ;mov a,b
            
                
                
                ;mov R3,#0000h
                ;addc a,R3
                ;mov R6,a
            
                mov r0,14h    ;tysiace
                mov a,r0
                subb a,#30h
                mov r0,a
                mov b,#0E8h
                mul ab
                mov r3,a ;młodsza część wyniku
                mov r4,b
                mov b,#03h
                mov a,r0
                mul ab
                mov r5,b
                add a,r4
                mov r5,a        ;starsza czesc wyniku        
                
                mov a,r3
                add a,r2
                mov r2,a
                
                mov a,r5
                addc a,r1
                mov r1,a
                ;wynik: starcza część na r1, młodsza na r2
                
                mov r0,13h ;10tysięcy
                mov a,r0
                subb a,#30h
                mov r0,a
                mov b,#10h
                mul ab
                mov r3,a ;młodsza część wyniku
                mov r4,b
                mov a,r0
                mov b,#27h
                mul ab
                add a,r4
                mov r4,a ;starsza część wyniku
                
                mov a,r1
                add a,r4
                mov r1,a
                
                mov a,r2
                addc a,r3
                mov r2,a
                
                ; 1. liczba: r1 - pierwsza część, r2 - druga część
                
                ; 2. liczba: r1 - pierwsza część, r2 - druga część    
            
            
            
end    

jak czytam 2 liczby to pisze mi po r7, tam gdzie mam część 1. liczby, ale przecież nigdzie nie wykorzystuję tego r7 potem...


gdzie jest błąd?
Powrót do góry
Zobacz profil autora Wyślij prywatną wiadomość
Wyświetl posty z ostatnich:   
Odpowiedz do tematu    Forum Coders' city Strona Główna -> Elektronika, programowanie niskopoziomowe Wszystkie czasy w strefie CET (Europa)

Strona 1 z 1

 
Skocz do:  
Możesz pisać nowe tematy
Możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach
Możesz dodawać załączniki na tym forum
Możesz pobierać pliki z tego forum




Debug: strone wygenerowano w 0.18857 sekund, zapytan = 7
contact

| Darmowe programy i porady Jelcyna | VB4all | Tansze zakupy w Helionie |