Thread View: pl.comp.lang.asm
4 messages
4 total messages
Started by -=RapidHail=-
Sat, 17 May 2008 23:59
[ASM] [PIC16F84a][HEX->DEC] Konwersja liczby na dziesiątki i jednostki
Author: -=RapidHail=-
Date: Sat, 17 May 2008 23:59
Date: Sat, 17 May 2008 23:59
50 lines
2027 bytes
2027 bytes
Mam taki kod który robi to co mi jest potrzebne a więc rozbiera liczbę na jednostki i dziesiątki, czy mógłby ktoś wytłumaczyć na czym polega taki rozbiór. Przełożyć to z asm na polski? Zaczynam dopiero zabawę z assemblerem (8 bitowy mikrokontroler) i nie idzie tak tragicznie ale operacje matematyczne wciąż są dla mnie zagwozdką. Bit C wrejestrze STATUS to znacznik przeniesienia (aktywne "1") lub pożyczki (aktywne "0"): 1 - wystąpiło przeniesienie z najbardziej znaczącego bitu wyniku, 0 - nie wystąpiło. Kod programu: temp equ 0x19 dana equ 0x20 temp1 equ 0x21 i equ 0x22 dzies equ 0x23 jedn equ 0x24 Start clrf dzies movlw .93 movwf dana movwf temp1 clrf i movlw .8 movwf temp k01 rlf temp1,1 rlf i,1 movlw .10 subwf i,0 btfss STATUS,C goto k02 movlw .10 subwf i,1 bsf STATUS,C btfss STATUS,C k02 bcf STATUS,C rlf dzies,1 decfsz temp,1 goto k01 movlw .10 movwf temp clrf temp1 k03 movf dzies,0 addwf temp1,1 decfsz temp,1 goto k03 movf temp1,0 subwf dana,0 movwf jedn end
Re: [ASM] [PIC16F84a][HEX->DEC] Konwersja liczby na dziesiątki i jednostki
Author: Bogdan (bogdro)
Date: Sun, 18 May 2008 12:18
Date: Sun, 18 May 2008 12:18
26 lines
2217 bytes
2217 bytes
-=RapidHail=- pisze: > Mam taki kod który robi to co mi jest potrzebne a więc rozbiera liczbę na > jednostki i dziesiątki, czy mógłby ktoś wytłumaczyć na czym polega taki > rozbiór. Przełożyć to z asm na polski? Zaczynam dopiero zabawę z assemblerem > (8 bitowy mikrokontroler) i nie idzie tak tragicznie ale operacje > matematyczne wciąż są dla mnie zagwozdką. > Bit C wrejestrze STATUS to znacznik przeniesienia (aktywne "1") lub pożyczki > (aktywne "0"): 1 - wystąpiło przeniesienie z najbardziej znaczącego bitu > wyniku, 0 - nie wystąpiło. Bez znajomości instrukcji (ja robię na x86) trudno mi będzie to powiedzieć, ale przyglądając się trochę kodowi według mnie działa on tak: 1. odejmij od danej liczby 10 2. jak wynik ujemny, należy 10 dodać z powrotem, reszta jest liczbą jedności 3. Jak wynik nieujemny, zwiększ liczbę dziesiątek o 1 i skacz do 1. Czyli metoda "na piechotę" by z tego wyszła. Czy PICi mają instrukcje "wyższego poziomu", takie jak mnożenie i dzielenie? Z ciekawości pytam. -- Pozdrawiam/Regards - Bogdan (GNU/Linux & FreeDOS) Kurs asemblera x86 (DOS, GNU/Linux):http://rudy.mif.pg.gda.pl/~bogdro Grupy dyskusyjne o asm: pl.comp.lang.asm alt.pl.asm alt.pl.asm.win32 www.JabberPL.org www.TorProject.org Soft (EN): miniurl.pl/bogdro-soft
Re: [ASM] [PIC16F84a][HEX->DEC] Konwersja liczby na dziesiątki i jednostki
Author: -=RapidHail=-
Date: Sun, 18 May 2008 13:05
Date: Sun, 18 May 2008 13:05
46 lines
3254 bytes
3254 bytes
Użytkownik "Bogdan (bogdro)" <bogdan@poczta.gazeta.pl> napisał w wiadomości news:g0p6r0$7fi$2@inews.gazeta.pl... > Bez znajomości instrukcji (ja robię na x86) trudno mi będzie to > powiedzieć, ale przyglądając się trochę kodowi według mnie działa on tak: > 1. odejmij od danej liczby 10 > 2. jak wynik ujemny, należy 10 dodać z powrotem, reszta jest liczbą > jedności > 3. Jak wynik nieujemny, zwiększ liczbę dziesiątek o 1 i skacz do 1. > > Czyli metoda "na piechotę" by z tego wyszła. Czy PICi mają instrukcje > "wyższego poziomu", takie jak mnożenie i dzielenie? Z ciekawości pytam. No właśnie nie jest to metoda na piechotę. Znaczy co ja przez to rozumiem: odejmowanie dziesiątek i sprawdzenie ile razy została odjęta. Posiadają tylko 35 instrukcji, nie ma mnożenia i dzielenia. A w kodzie główną uwagę należy skierować na przesunięcia cykliczne (takie moje zdanie). Jeżeli będzie chcęć rozgryzienia to podaję instrukcję użyte w kodzie: movlw - wpisanie na akumulator (WRERG) movwf - wpisanie do rejestru clrf - czyszczenie rejestru (o zadanym adresie) rlf - przesuwanie cykliczne w lewo zawartości rejestru o podanym adresie ze znacznikiem C, a wiec: RLF REG,1 przed rozkazem: REG = 1110 0110, znacznik C=0 po rozkazie: REG = 1100 1100, C=1 RLF REG,1 przed rozkazem: REG = 1110 0110, znacznik C=1 po rozkazie: REG = 1100 1101, C=1 Bit C wrejestrze STATUS to znacznik przeniesienia (aktywne "1") lub pożyczki (aktywne "0"): 1 - wystąpiło przeniesienie z najbardziej znaczącego bitu wyniku, 0 - nie wystąpiło. btfss - testowanie bitu w rejestrze o adresie f (tutaj bit C w rejestrze STATUS), jeżeli jest ustawiony to pomijja kolejną instrukcję addwf - dodanie WREG do rejestru i zapisanie wyniku w rejestrze (1 po przecinku) decfsz - dekremenctuj rejestr o zadanym adresie, jeżeli po dekrementacji będzie 0 to pomija następny rozkaz movf dana,0 - przesłanie rejestru do WREG (0 po przecinku), jeśli 1 to na odwrót z WREG do rejestru subwf f,d - odejmowanie od rejestru f rejestru WREG i zapisanie wyniku w WREG (d=0) movwf f - przesłanie zawartości WREG do rejestru f.
Re: [ASM] [PIC16F84a][HEX->DEC] Konwersja liczby na dziesiątki i jednostki
Author: Bernard
Date: Tue, 20 May 2008 15:20
Date: Tue, 20 May 2008 15:20
14 lines
1767 bytes
1767 bytes
-=RapidHail=- wrote: > Mam taki kod który robi to co mi jest potrzebne a więc rozbiera liczbę na > jednostki i dziesiątki, czy mógłby ktoś wytłumaczyć na czym polega taki > rozbiór. Przełożyć to z asm na polski? Zaczynam dopiero zabawę z assemblerem > (8 bitowy mikrokontroler) i nie idzie tak tragicznie ale operacje > matematyczne wciąż są dla mnie zagwozdką. Jest taki śmieszny algorytm, który z grubsza polega na tym ,że do inicjalnej wartości 0 (która w przyszłości będzie liczbą po konwersji) dodaje się wagi kolejnych bitów, przeprowadzając na bieżąco korekcję z bin na BCD. Widziałem już parę implementacji tego dla innych procesorów, dla których nie ma sensu tego wogóle stosować, bo są dużo szybsze metody, np. AAM dla x86 albo zwykłe dzielenie dla 51. Akurat w przypadku głupiutkiego PICa pewnie ten algorytm jest całkiem sensowny.
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads