eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programming'odpalanie' stringaRe: 'odpalanie' stringa
  • Data: 2012-01-23 19:32:45
    Temat: Re: 'odpalanie' stringa
    Od: " " <f...@g...pl> szukaj wiadomości tego autora
    [ pokaż wszystkie nagłówki ]

    <f...@g...pl> napisał(a):

    > <f...@g...pl> napisał(a):
    >
    > > <f...@N...gazeta.pl> napisał(a):
    > >
    > > > ostatnio czytalem blog gdzie autor pisze mw ze
    > > > jak chce szybko odpalic funkcje w asmie to pisze
    > > > ja w stringu po czym rzutuje na wskaznik do funkcji
    > > > i odpala - bardzo ciekawa rzecz
    > > >
    > > > czy rzeczywiscie daje sie tak zrobic - a jesli tak czy
    > > > ktos moze podac funkcjonalny przyklad
    > > >
    > >
    > > (dodam ze jakis czas probowalem sie nieco poduczyc asemblera
    > > ale natrafilem na granice zaporowa, mam wrazenie ze musialbym
    > > sie powaznie rozbujac by pisac kod w mieszanym c/asm, moze
    > > gdyby takie odpalanie stringow fajnie dzialalo byloby blizej)
    > >
    > >
    >
    > sprawdzilem, co ciekawe dziala swietnie (dzieks gynvael)
    >
    > char asmRoutineData[] =
    > {
    > 0xC8, 0x00, 0x00, 0x00, // enter 0, 0
    > 0xB8, 0x02, 0x00 ,0x01 ,0x00, // mov eax, 65538
    > 0xC9, // leave
    > 0xc3 // ret
    > };
    >
    > int (*asmRoutine)(void) = (int (*)(void)) asmRoutineData;
    >
    > int ret = asmRoutine();
    >
    > // zwraca 65538
    >
    > moze nawet sse by dzialalo i nie musialbym sie babac z
    > linkerem
    >
    >
    sse mi nie dziala :(

    mialem np taka funkcje testowa

    _asm_add_float4_vectors_by_sse:; Function begin
    enter 0, 0 ; 0061 _ C8, 0000, 00
    mov eax, dword [ebp+8H] ; 0065 _ 8B. 45, 08
    mov ebx, dword [ebp+0CH] ; 0068 _ 8B. 5D, 0C
    mov ecx, dword [ebp+10H] ; 006B _ 8B. 4D, 10
    movups xmm0, oword [eax] ; 006E _ 0F 10. 00
    movups xmm1, oword [ebx] ; 0071 _ 0F 10. 0B
    addps xmm0, xmm1 ; 0074 _ 0F 58. C1
    movups oword [ecx], xmm0 ; 0077 _ 0F 11. 01
    leave ; 007A _ C9
    ret ; 007B _ C3

    ktora linkowana zawnetrznie jako

    extern "C" int __cdecl asm_add_float4vectors_sse(float4* a, float4* b,
    float4* ret);

    o ile pamietam dzialala (niestety nie pamietam dokladniej
    co tam grzebalem dwa czy trzy miesiace temu a notatki jakos
    mi jakby czesciowo wcielo


    teraz

    char asm_add_float4_vectors_by_sseData[] =
    {


    0xC8, 0x00, 0x00, 0x00,
    0x8B, 0x45, 0x08,
    0x8B, 0x5D, 0x0C,
    0x8B, 0x4D, 0x10,


    0x0F, 0x10, 0x00,

    // 0xC9,
    // 0xC3, //dotad dziala

    0x0F, 0x10, 0x0B,

    // 0xC9,
    // 0xC3, //tu juz wywala

    0x0F, 0x58, 0xC1,
    0x0F, 0x11, 0x01,

    0xC9, // leave
    0xC3 // ret

    };

    cdecl void (*asmAddSSE)(float4*, float4*, float4*) = (cdecl void (*)
    (float4*, float4*, float4*)) asm_add_float4_vectors_by_sseData;

    static float4 a = {1,2,1,0};
    static float4 b = {1,2,3,0};
    static float4 c = {1,1,0,0};

    asmAddSSE(&a,&b,&c);

    wywala sie jakby na drugiej (nie pierwszej) linijce w sse
    - nie wiem czy nie pochrzanione jest tu cos z przekazywaniem
    argumentow (m.in. kompilator lyka slowo cdecl a powinno byc chyba
    __cdecl a przy tym jest blad kompilacji)

    nie mam glowy teraz sie w to wglebic - moze ktos kojarzy co
    moze byc przyczyna bledu???



    --
    Wysłano z serwisu Usenet w portalu Gazeta.pl -> http://www.gazeta.pl/usenet/

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: