Výsledky 1 až 7 z 7

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

Hybrid View

Předcházející příspěvek Předcházející příspěvek   Další příspěvek Další příspěvek
  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 :)

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
  •