eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.misc.elektronikaC vs. ASM na przykładzie PIC18FRe: Odp: C vs. ASM na przykładzie PIC18F
  • Path: news-archive.icm.edu.pl!agh.edu.pl!news.agh.edu.pl!news.cyf-kr.edu.pl!news.nask
    .pl!news.nask.org.pl!news.unit0.net!usenet.blueworldhosting.com!feeder01.bluewo
    rldhosting.com!peer03.iad.highwinds-media.com!news.highwinds-media.com!feed-me.
    highwinds-media.com!nx02.iad01.newshosting.com!newshosting.com!newsfeed.neostra
    da.pl!unt-exc-02.news.neostrada.pl!unt-spo-a-01.news.neostrada.pl!news.neostrad
    a.pl.POSTED!not-for-mail
    Content-Type: text/plain; charset="UTF-8"
    From: jacek pozniak <j...@f...pl>
    Date: Sat, 05 Apr 2014 12:42:30 +0200
    User-Agent: KNode/4.4.8
    Content-Transfer-Encoding: 8Bit
    Subject: Re: Odp: C vs. ASM na przykładzie PIC18F
    Newsgroups: pl.misc.elektronika
    References: <lhntl8$u3a$1@mx1.internetia.pl>
    <533fc888$0$2155$65785112@news.neostrada.pl>
    <lhokd1$92v$1@mx1.internetia.pl>
    Followup-To: pl.misc.elektronika
    MIME-Version: 1.0
    Lines: 249
    Message-ID: <533fde16$0$2158$65785112@news.neostrada.pl>
    Organization: Telekomunikacja Polska
    NNTP-Posting-Host: 83.12.26.66
    X-Trace: 1396694550 unt-rea-a-02.news.neostrada.pl 2158 83.12.26.66:35914
    X-Complaints-To: a...@n...neostrada.pl
    X-Received-Bytes: 5661
    X-Received-Body-CRC: 3525603189
    Xref: news-archive.icm.edu.pl pl.misc.elektronika:662329
    [ ukryj 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: