eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.misc.elektronikaC vs. ASM na przykładzie PIC18FRe: Odp: C vs. ASM na przykładzie PIC18F
  • Data: 2014-04-05 12:42:30
    Temat: Re: Odp: C vs. ASM na przykładzie PIC18F
    Od: jacek pozniak <j...@f...pl> szukaj wiadomości tego autora
    [ pokaż wszystkie nagłówki ]

    Sylwester Łazar wrote:

    >> 1. Kompilator HiTech 8.05PL2 -O -Zg, procesor pic16f876A:
    >> 149 words(słów, nie bajtów) ROM, 38 bytes RAM
    >> bez funkcji zlicz(), odpowiednio 54 słów ROM, 35 RAM
    >>
    > Słusznie napisałeś, że po kompilacji ma 149 _słów_.
    > Mój w ASM ma 71 słów na 18F.
    > na 16F miałby o 10 słów więcej, gdyż 16F nie ma rozkazów LFSR,MOVFF i
    > NEGF. Czyli 81 słów vs. 149 słów, czyli współczynnik C/ASM=1,8.
    >
    Podaj proszę ile ma Twoja funkcja zlicz() w ASM napisana, ponieważ podałem
    wynik kompilacji z i bez niej. Kompilator pewnie dorzuca jakiś extra kod
    jako startup.obj.

    > Całkiem nieźle, jeśli chodzi o nadmiarowość kodu.
    > Jednak jak powiedziałem - nie mierzyłem czasu, więc nie są te badania
    > obiektywne,
    > co do czasu wykonywania.
    > Ja podałem ok. 6x wolniejszy, ale to tylko szacunek.
    > Podaj może ilość rozkazów w głównej pętli sortującej, lub umieść kod to
    > policzymy.
    > S.
    Ja jedynie mogę wklaić wynik kompilacji z opcją -S:
    global ?a_zlicz
    global _ADRDIOD
    global _ADRDOUT
    global _LICZV
    global _VDIOD
    global _VDOUT
    global _k
    global _main
    signat _main,88
    FNCALL _main,_zlicz
    global _n
    global _zlicz
    signat _zlicz,88
    FNSIZE _zlicz,2,0
    global clear_bank0
    global start
    global used_btemp0
    processor 16F876A
    psect __Z08170RS_,global
    psect text0,local,class=CODE,delta=2
    psect text1,local,class=CODE,delta=2
    psect strings,global,class=STRING,delta=2
    psect const1,local,class=CONST,delta=2
    psect const2,local,class=CONST,delta=2
    psect rbss_0,global,class=BANK0,space=1
    psect temp,global,ovrld,class=BANK0,space=1
    file "C:\users\jacek\Temp\_8.AAB"


    psect __Z08170RS_

    psect text0
    _main
    ;main5.c: 16: VDIOD[0]=1;
    bcf 3,5
    bcf 3,6 ;carry unused
    clrf _VDIOD
    incf _VDIOD
    ;main5.c: 17: VDIOD[1]=2;
    movlw 2
    movwf _VDIOD+1
    ;main5.c: 18: VDIOD[2]=6;
    movlw 6
    movwf _VDIOD+2
    ;main5.c: 19: VDIOD[3]=4;
    movlw 4
    movwf _VDIOD+3
    ;main5.c: 20: VDIOD[4]=3;
    movlw 3
    movwf _VDIOD+4
    ;main5.c: 21: ADRDIOD[0][0]=1;
    clrf _ADRDIOD
    incf _ADRDIOD
    ;main5.c: 22: ADRDIOD[0][1]=0;
    clrf _ADRDIOD+1
    ;main5.c: 23: ADRDIOD[1][0]=1;
    clrf _ADRDIOD+2
    incf _ADRDIOD+2
    ;main5.c: 24: ADRDIOD[1][1]=1;
    clrf _ADRDIOD+3
    incf _ADRDIOD+3
    ;main5.c: 25: ADRDIOD[2][0]=1;
    clrf _ADRDIOD+4
    incf _ADRDIOD+4
    ;main5.c: 26: ADRDIOD[2][1]=2;
    movlw 2
    movwf _ADRDIOD+5
    ;main5.c: 27: ADRDIOD[3][0]=2;
    movwf _ADRDIOD+6
    ;main5.c: 28: ADRDIOD[3][1]=0;
    clrf _ADRDIOD+7
    ;main5.c: 29: ADRDIOD[4][0]=2;
    movwf _ADRDIOD+8
    ;main5.c: 30: ADRDIOD[4][1]=1;
    clrf _ADRDIOD+9
    incf _ADRDIOD+9
    ;main5.c: 32: zlicz();
    fcall _zlicz
    ;main5.c: 35: }
    ljmp start

    psect text1
    _zlicz
    ; _j assigned to ?a_zlicz+0
    _zlicz$j set ?a_zlicz
    ; _i assigned to ?a_zlicz+1
    _zlicz$i set ?a_zlicz+1
    ;main5.c: 38: char i;
    clrf 3 ;select bank 0
    clrf ?a_zlicz+1
    goto l6
    l3
    movf ?a_zlicz+1,w
    addlw _LICZV
    movwf 4
    bcf 3,7
    clrf 0
    incf ?a_zlicz+1
    l6
    movlw 7
    subwf ?a_zlicz+1,w
    btfss 3,0
    goto l3
    ;main5.c: 42: for(i=0;i<n;++i) ++LICZV[VDIOD[i]];
    clrf ?a_zlicz+1
    l10
    movlw 5
    subwf ?a_zlicz+1,w
    btfsc 3,0
    goto l8
    movf ?a_zlicz+1,w
    addlw _VDIOD
    movwf 4
    bcf 3,7
    movf 0,w
    addlw _LICZV
    movwf 4
    incf 0
    incf ?a_zlicz+1
    goto l10
    l8
    ;main5.c: 43: for(i=1;i<k;++i) LICZV[i]+=LICZV[i-1];
    clrf ?a_zlicz+1
    L1
    incf ?a_zlicz+1
    movlw 7
    subwf ?a_zlicz+1,w
    btfsc 3,0
    goto l12
    decf ?a_zlicz+1,w
    addlw _LICZV
    movwf 4
    bcf 3,7
    movf 0,w
    movwf btemp
    movf ?a_zlicz+1,w
    addlw _LICZV
    movwf 4
    movf btemp,w
    addwf 0
    goto L1
    l12
    ;main5.c: 44: for(i = n-1 ; i >= 0 ; --i)
    movlw 4
    movwf ?a_zlicz+1
    l15
    ;main5.c: 45: {
    ;main5.c: 46: j=--LICZV[VDIOD[i]];
    movf ?a_zlicz+1,w
    addlw _VDIOD
    movwf 4
    bcf 3,7
    movf 0,w
    addlw _LICZV
    movwf 4
    decf 0
    movf 0,w
    movwf ?a_zlicz
    ;main5.c: 47: VDOUT[j] = VDIOD[i];
    movf ?a_zlicz+1,w
    addlw _VDIOD
    movwf 4
    movf 0,w
    movwf btemp
    movf ?a_zlicz,w
    addlw _VDOUT
    movwf 4
    movf btemp,w
    movwf 0
    ;main5.c: 48: ADRDOUT[j][0]=ADRDIOD[i][0];
    movf ?a_zlicz+1,w
    addwf ?a_zlicz+1,w
    addlw _ADRDIOD
    movwf 4
    movf 0,w
    movwf btemp
    movf ?a_zlicz,w
    addwf ?a_zlicz,w
    addlw _ADRDOUT
    movwf 4
    movf btemp,w
    movwf 0
    ;main5.c: 49: ADRDOUT[j][1]=ADRDIOD[i][1];
    bsf 3,0
    rlf ?a_zlicz+1,w
    addlw _ADRDIOD
    movwf 4
    movf 0,w
    movwf btemp
    bsf 3,0
    rlf ?a_zlicz,w
    addlw _ADRDOUT
    movwf 4
    movf btemp,w
    movwf 0
    ;main5.c: 50: }
    decf ?a_zlicz+1
    goto l15

    psect const1
    addwf 2
    _k
    retlw 7

    psect const2
    addwf 2
    _n
    retlw 5

    psect rbss_0
    _LICZV
    ds 5
    _VDIOD
    ds 5
    _VDOUT
    ds 5
    _ADRDIOD
    ds 10
    _ADRDOUT
    ds 10

    psect temp
    btemp
    ds 1

Podziel się

Poleć ten post znajomemu poleć

Wydrukuj ten post drukuj


Następne wpisy z tego wątku

Najnowsze wątki z tej grupy


Najnowsze wątki

Szukaj w grupach

Eksperci egospodarka.pl

1 1 1

Wpisz nazwę miasta, dla którego chcesz znaleźć jednostkę ZUS.

Wzory dokumentów

Bezpłatne wzory dokumentów i formularzy.
Wyszukaj i pobierz za darmo: