eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.misc.elektronikaC vs. ASM na przykładzie PIC18FRe: Odp: Odp: Odp: C vs. ASM na przykładzie PIC18F
  • Data: 2014-04-06 12:46:31
    Temat: Re: Odp: Odp: Odp: C vs. ASM na przykładzie PIC18F
    Od: John Smith <d...@b...pl> szukaj wiadomości tego autora
    [ pokaż wszystkie nagłówki ]

    On 06-04-2014 10:49, Sylwester Łazar wrote:
    >>> Możesz wrzucić ten przykład do swojego kompilatora, na swój uK i pokazać
    > ile
    >>> rozkazów ma zlicz()?
    >>
    >> dla funkcji zlicz:
    >> IAR C/C++ Compiler V5.30.1.50284/W32 for MSP430
    >> 102 bytes of CODE memory
    >> po właczeniu optymalizacji rozmiaru.
    >> Procesor MSP430 na pewno 16-bitowy. :)
    >> K.
    > W takim razie musiałbym porównywać wtedy do dsPIC30.
    > No, ale w przyszłości może porównam też 16-bitowe.
    > Możesz podać na jaki model kompilowałeś i wkleić kod ?

    Wykonałem kilkadziesiąt kompilacji na różne rodziny MSP430,
    rozmiar półkompilatu zawsze ten sam: 102 bajty.

    Listing kodu funkcji zlicz (zoptymalizowany)

    for(i = 0 ; i < k ; ++i)
    zlicz:
    ?cstart_end:
    00801A 430C clr.w R12
    00801C 425D 8000 mov.b &k,R13
    008020 3C03 jmp 0x8028
    LICZV[i] = 0; // zerowanie tablicy
    008022 43CC 111E clr.b 0x111E(R12)
    for(i = 0 ; i < k ; ++i)
    008026 531C inc.w R12
    for(i = 0 ; i < k ; ++i)
    008028 9D0C cmp.w R13,R12
    00802A 3BFB jl 0x8022
    for(i = 0 ; i < n ; ++i)
    00802C 430C clr.w R12
    00802E 425E 8001 mov.b &n,R14
    008032 3C05 jmp 0x803E
    ++LICZV[VDIOD[i]]; // po tych operacjach LICZV[i] będzie
    zawierała
    008034 4C5F 1100 mov.b 0x1100(R12),R15
    008038 53DF 111E inc.b 0x111E(R15)
    for(i = 0 ; i < n ; ++i)
    00803C 531C inc.w R12
    for(i = 0 ; i < n ; ++i)
    00803E 9E0C cmp.w R14,R12
    008040 3BF9 jl 0x8034
    for(i = 1 ; i < k ; ++i)
    008042 431C mov.w #0x1,R12
    008044 3C04 jmp 0x804E
    LICZV[i] += LICZV[i-1]; // teraz LICZV[i] zawiera pozycje w
    posortowanej
    008046 5CDC 111D 111E add.b 0x111D(R12),0x111E(R12)
    for(i = 1 ; i < k ; ++i)
    00804C 531C inc.w R12
    for(i = 1 ; i < k ; ++i)
    00804E 9D0C cmp.w R13,R12
    008050 3BFA jl 0x8046
    for(i = n-1 ; i >= 0 ; --i)
    008052 4E0C mov.w R14,R12
    008054 3C11 jmp 0x8078
    j=--LICZV[VDIOD[i]]; // aktualizacja LICZV
    008056 4C5E 1100 mov.b 0x1100(R12),R14
    00805A 53FE 111E add.b #0xFF,0x111E(R14)
    00805E 4E5F 111E mov.b 0x111E(R14),R15
    VDOUT[j] = VDIOD[i]; //wstawienie elementu na odpowiednią
    pozycję
    008062 4ECF 1105 mov.b R14,0x1105(R15)
    ADRDOUT[j][0] = ADRDIOD[i][0]; // sortowanie adresów
    008066 5F0F rla.w R15
    008068 4C0E mov.w R12,R14
    00806A 5E0E rla.w R14
    00806C 4EDF 110A 1114 mov.b 0x110A(R14),0x1114(R15)
    ADRDOUT[j][1] = ADRDIOD[i][1]; // sortowanie adresów
    008072 4EDF 110B 1115 mov.b 0x110B(R14),0x1115(R15)
    for(i = n-1 ; i >= 0 ; --i)
    008078 533C add.w #0xFFFF,R12
    for(i = n-1 ; i >= 0 ; --i)
    00807A 930C tst.w R12
    00807C 37EC jge 0x8056
    }
    00807E 4130 ret


    miłego analizowania.
    K.

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: