Výsledky 1 až 7 z 7

Téma: ASM prevod do C/C++

  1. #1

    Standardní ASM prevod do C/C++

    Ahoj,

    potreboval bych prekompilovat jednu knihovnu pro 64bit, ale zdrojovy kod obsahuje inline assembler, takze dokud to nenahradim, tak mam smulu. Umel by nekdo tohle prepsat?

    Kód:
       _asm
       {
             funkce:
          mov   eax,0x80000002
    
             id
             mov   brand+16,eax
             mov   brand+20,ebx
             mov   brand+24,ecx
             mov   brand+28,edx
    
             mov   brand+48,0
             done:
       }
    Jestli si to predstavuju jako Hurvinek valku, tak se omlouvam, nemam v tom zadne zkusenosti.

    Dik
    Naposledy upravil SOAD; 07.01.2010 v 13:54. Důvod: zkraceno
    Normalni PC :)

  2. #2

    Standardní Re: ASM prevod do C/C++

    Ak chces robit CPUID, tak to musi byt v assembleri. Priklad z Linuxu (pre GCC):
    Kód:
    asm("cpuid"
            : "=a" (max_intel_level),
              "=b" (cpu_vendor[0]),
              "=d" (cpu_vendor[1]),
              "=c" (cpu_vendor[2])
            : "a" (0));
    1: Asus P2B 1.10 • Celeron 1100@1364/1.8V • 512MB SDRAM • Samsung SP1213N+WD AC28400 • Toshiba XM-6402B+SD-M1212 • PowerColor AR2L Radeon 9100 64MB • 3C900-Combo • Bt848A • ASB-3940UA • AWE-64 • DTK PTP-3007 • VisionMaster 405 • Umax UC630 • Star LC24-200 Colour 2: PCPartner TXB820DS • Cyrix MII PR300/1.8V • 256MB SDRAM • 2xSamsung HD400LD+IT8212F • Accesstek CW4001 • LS-120 • Mystique 4MB • Millennium II 4MB • 3C509 • CMI8329A+Dream MIDI • ADI ProVista E44 • SyncMaster 203B Notebook: DTK FortisPro TOP-5A • P166MMX/1.8V • 80MB EDO • Hitachi 5K80 40GB • 12,1" TFT Router: A-Trend ATC-1425B • i486DX 50@33/5V • 48MB FPM • WD AC14300 • UMC UM9003F • HP PC LAN 16/TP+ Car: Mazda 323P BA • Z5 1489ccm, 65kW@5500rpm, 134Nm@4000rpm

  3. #3

    Standardní Re: ASM prevod do C/C++

    Tohle by mohlo pomoci pro Visual Studio,
    je tam navod jak pouzit MASM compiler v 64bit.
    Nezkousel jsem to, ale melo by jit prepsat tu tvoji funkci do .asm souboru a nechat ji zkompilovat tim MASM a pak slinkovat se zkompilovanym C++.

    http://www.developers.net/intelisdshowcase/view/1241
    Asus P5B Deluxe/WiFi, Intel Q8300@7.5x440=3300MHz VCc1.15V, Speedstep enabled, CM HyperTX, 58oC IntelBurnTest pri 24oC okoli, 2x2048 DDR2 800 Geil(@866 5-6-6-15, 1.80V), HDD 3xSamsung F1 1TB, Gigabyte NX88T zalman, LCD FSC S20-1W, CM Centurion 532, PSU Seasonic 400W, UPS CyberFort 350

  4. #4

    Standardní Re: ASM prevod do C/C++

    Ano to by asi jit melo, ale jestli se neletu je potreba prepsat 32bit instrukce na 64bit nebo ne ? A stim si stejne nevim rady.
    Musism si to jeste v klidu prostudovat.
    Naposledy upravil SOAD; 10.01.2010 v 19:41.
    Normalni PC :)

  5. #5
    Administrátor マツダ mince Avatar uživatele Marty
    Založen
    07.10.2002
    Bydliště
    Praha, Sanctuary
    Věk
    43
    Příspěvky
    8 225
    Vliv
    300

    Standardní Re: ASM prevod do C/C++

    Citace Původně odeslal SOAD Zobrazit příspěvek
    Ano to by asi jit melo, ale jestli se neletu je potreba prepsat 32bit instrukce na 64bit nebo ne ? A stim si stejne nevim rady.
    Musism si to jeste v klidu prostudovat.
    Musí to být zpětně kompatibilní, takže to určitě nemusíš přepisovat. Ostatně, e_x (eax, ebx, ecx, edx) jsou 32bitové registry a stejně tak můžeš použít _x registry, které jsou 16bitové - zase zpětná kompatibilita. Jen pak pracuješ s nižšími bajty v těch registrech.
    CUBE> Ryzen 7 7700X + Arctic Lq Frzr III 64 GB DDR5-6000 ◦ ASUS TUF B650PLUS ◦ ASUS RTX3060 OC 12GB ◦ Kingston KC3000 2TB ◦ SS G12 GM-650 Gold ◦ Samsung S27A800 4K
    WORK> HP EliteBook 845 G9 ◦ Ryzen 5 PRO 6550 ◦ 32 GB DDR3 ◦ 2048 GB nVME SSD ◦ 14.1" 1920x1080 LED + 2x 32" Dell 4K ◦ Win11 Enterprise
    SERVER> HP ProLiant Microserver Gen8 ◦ Intel Core i5-3540T ◦ 16 GB DDR3 ◦ 180 GB SSD + 2x4 TB WD RED + 2x16 TB Toshiba ◦ 10GbE NIC
    PHOTO> Canon EOS 70D ◦ EF 70-200/4L ◦ EF-S 10-18 STM ◦ EF 50/1.8II ◦ EF-S 40/2.8 STM ◦ Yongnuo YN-568EX ◦ Tamrac 5534
    HOMECINEMA> TV Samsung UE55Q55T 55" 4K ◦ DVD Pioneer DV-310K ◦ AVR Yamaha RX-V359 ◦ SPK Dexon Allegro 5.0
    OTHERSTUFF> Mikrotik RB760iGS ◦ Mikrotik CSS610
    ◦ Mikrotik CRS326 ◦ UniFi WLAN ◦ Xerox B235 ◦ Canon PiXMA MG5350

  6. #6

    Standardní Re: ASM prevod do C/C++

    Tak jsem nakonec nasel, ze to jde pomoci funkce __cpuid() pres #include <intrin.h>
    Mam ale porad jeden problem. Family, model a stepping mi to vraci ok
    (vraci integer), ale nazev vyrobce a identifikacni string procesoru vraci nesmyslne znaky. Mam bordel v tom, jak to spravne vratit.

    Priklad:
    mam funkci char* info(int parametr)
    pri parametru 2 vraci jmeno vyrobce char CPUString[0x20];

    a pak v exportu:

    JNIEXPORT jstring JNICALL Java_com_mindprod_pentium_Pentium_cpuIdVendor
    (JNIEnv * env, jclass theClass )
    {
    char* vyrobce;
    vyrobce = info(2);
    return env->NewStringUTF( (char *)vyrobce );
    }

    Mam hokej v tech datovych typech a v tom jak spravne vratit nazev vyrobce. Problem bude nejspis v te cervene oznacene casti. Poradi mi nekdo, jak to spravne napsat ?

    Diky
    Normalni PC :)

  7. #7

    Standardní Re: ASM prevod do C/C++

    A jak ta funkce info alokuje ten string?

    Vraci pointer na char, ale ten string musi nekde existovat.
    Pokud je ve funkci info alokovanej na stacku, tak nejspis po zavolani te funkce zanikne.
    A pointer vyrobce pak muze ukazovat na nejaky bordel.

    nevim jak ta funkce info vypada, ale melo by se to spis volat nejak takle.

    char vyrobce[32];
    info(2, vyrobce);
    ...


    pricemz hlavicka takhle nejak info(int parametr, char* pVyrobce)

    pricemz pVyrobce by mohl byt nepovinny parametr a default NULL.
    Asus P5B Deluxe/WiFi, Intel Q8300@7.5x440=3300MHz VCc1.15V, Speedstep enabled, CM HyperTX, 58oC IntelBurnTest pri 24oC okoli, 2x2048 DDR2 800 Geil(@866 5-6-6-15, 1.80V), HDD 3xSamsung F1 1TB, Gigabyte NX88T zalman, LCD FSC S20-1W, CM Centurion 532, PSU Seasonic 400W, UPS CyberFort 350

Informace o tématu

Users Browsing this Thread

Toto téma si právě prohlíží 1 uživatelů. (0 registrovaných a 1 anonymních)

Podobná témata

  1. prevod WMA suborov na WAV v NERE
    Založil radone v sekci fóra Programy a problémy s nimi
    Odpovědí: 1
    Poslední příspěvek: 28.06.2004, 22:52
  2. prevod .mov > .avi ?
    Založil jauli v sekci fóra Programy a problémy s nimi
    Odpovědí: 3
    Poslední příspěvek: 06.06.2004, 08:45
  3. prevod videa
    Založil Pete... v sekci fóra Programy a problémy s nimi
    Odpovědí: 1
    Poslední příspěvek: 13.05.2004, 21:38
  4. neresil nekdo : prevod UNIPLEX do RTF
    Založil Ganja-NIN v sekci fóra Programy a problémy s nimi
    Odpovědí: 0
    Poslední příspěvek: 17.04.2003, 12:50
  5. Delay() v 8086 asm
    Založil Swap v sekci fóra BIOSy
    Odpovědí: 0
    Poslední příspěvek: 31.03.2003, 10:02

Pravidla přispívání

  • Nemůžete zakládat nová témata
  • Nemůžete zasílat odpovědi
  • Nemůžete přikládat přílohy
  • Nemůžete upravovat své příspěvky
  •