 |
Coders' city Nasza pasja to programowanie!
|
| Zobacz poprzedni temat :: Zobacz następny temat |
| Autor |
Wiadomość |
G1T
Dołączył: 25 Gru 2006 Posty: 202
|
Wysłany: Pon Mar 28, 2011 6:20 pm Temat postu: [8051] dodawanie dwóch liczb 16-bitowych |
|
|
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 |
|
 |
|
|
marcin_an Site Admin
Dołączył: 26 Maj 2005 Posty: 17278 Skąd: z drugiej strony Kabla
|
Wysłany: Pon Mar 28, 2011 6:39 pm Temat postu: |
|
|
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 |
|
 |
G1T
Dołączył: 25 Gru 2006 Posty: 202
|
Wysłany: Pon Mar 28, 2011 8:46 pm Temat postu: |
|
|
| 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 |
|
 |
marcin_an Site Admin
Dołączył: 26 Maj 2005 Posty: 17278 Skąd: z drugiej strony Kabla
|
Wysłany: Pon Mar 28, 2011 8:51 pm Temat postu: |
|
|
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 |
|
 |
G1T
Dołączył: 25 Gru 2006 Posty: 202
|
Wysłany: Czw Mar 31, 2011 3:55 pm Temat postu: |
|
|
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 |
|
 |
|
|
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
|