Printf hívás assembly.

Ez a téma lezárásra került a moderátor által. A lezárás oka: A Tudástárban egy téma – egy kérdés/probléma elv érvényesül.
Címkék
Printf hívás assembly.
2017-05-01T13:09:17+02:00
2017-05-01T17:11:22+02:00
2022-12-04T13:10:39+01:00
bandymnc
Sziasztok 

Adott egy int tömb, és annak az értékeit szeretném kiíratni asm blokkon belül, lefutni le fut, de nem ír ki semmit, aztán meg bezáródik az ablak 

a kiíratást ebben a szintaktikában vettük: 

char *k_printf = "%dn";
 _asm
 {
 mov eax, 0;
 mov ecx, 20;
 mov esi, esp;
 ciklusb://printf kiir
 mov ebx, tomb1[eax];
 push ebx;
 push k_printf;
 call dword ptr k_printf;
 add eax, 4;
 loop ciklusb;
 mov esp, esi;
 }

mi lehet a gond?
Mutasd a teljes hozzászólást!
Az a call így biztos nem jó, a printf függvényt kéne meghívnod, nem a formátumsztringet.
Mutasd a teljes hozzászólást!

  • Mutasd a teljes hozzászólást!
  • Köszönöm mindkettőtöknek, meg mégy egy kérdés, létezik, hogy rossz eredményt kapok, ha nem egy X sorrendben használom a regisztereket? 

    Egy egyszerű tömb összegző példában, ha felcserélem az ebx-t, eax-re akkor nem jó az eredmény

    int paros = 0, ketto = 2;
    _asm {
    mov ecx, 20;
    mov ebx, 0;
    ciklus2:
    mov eax, tomb1[ebx];
    xor edx, edx;
    div ketto; //eax osztása 2-vel, maradék edx-be kerül
    cmp edx, 0; //maradék vizsgálata
    jne tovabb; //ha nem teljesül, akkor "tovabb"-hoz ugrik
    mov eax, tomb1[ebx];
    add paros, eax; //paros változóba összegzés
    tovabb:
    add ebx, 4;
    loop ciklus2;
    }
    cout << paros << endl;
    Mutasd a teljes hozzászólást!
Ez a téma lezárásra került a moderátor által. A lezárás oka: A Tudástárban egy téma – egy kérdés/probléma elv érvényesül.
Címkék
Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd