assemblykoodi gcc:ssä (Windows; 32-bit)

asm_C_opiskelija

int main%28void%29%3Cbr %2F%3E%7B%3Cbr %2F%3E unsigned int R1 %3D 11%2C R2 %3D 40%2C R3 %3D 0xfffffff%3B%3Cbr %2F%3E unsigned long long int summa%3B%3Cbr %2F%3E%3Cbr %2F%3E __asm__ __volatile__%28%3Cbr %2F%3E %26quot%3B push EDI %3B%5Cn%5Ct%26quot%3B%3Cbr %2F%3E %26quot%3B xor edi%2Cedi %3B%5Cn%5Ct%26quot%3B%3Cbr %2F%3E%09%09 %26quot%3Baddl %25%EDx%2C%25%EAx %3B%5Cn%5Ct%26quot%3B%3Cbr %2F%3E%09%09 %26quot%3Badcl 0%2C%25%EDi %3B%5Cn%5Ct%26quot%3B%3Cbr %2F%3E%3Cbr %2F%3E%09%09 %26quot%3Baddl %25%ECx%2C%25%EAx %3B%5Cn%5Ct%26quot%3B%3Cbr %2F%3E%09%09 %26quot%3Badcl 0%2C%25%EDi %3B%5Cn%5Ct%26quot%3B%3Cbr %2F%3E%3Cbr %2F%3E%09%09 %26quot%3Bmovl %25%EDi%2C%25%EDx %3B%5Cn%5Ct%26quot%3B%3Cbr %2F%3E%09%09 %2F%2F EDX%3AEAX %3D summa%28eax%2C edx%2C ecx%29%3Cbr %2F%3E%3Cbr %2F%3E %26quot%3B pop EDI %3B%5Cn%5Ct%26quot%3B%3Cbr %2F%3E %26quot%3B mov 1%2C %25%25ESI %3B%5Cn%5Ct%26quot%3B%3Cbr %2F%3E%3Cbr %2F%3E %3A%26quot%3B%3Da%26quot%3B%28summa%29%3Cbr %2F%3E %3A%26quot%3Ba%26quot%3B%28R1%29%2C %26quot%3Bd%26quot%3B%28R2%29%2C %26quot%3Bc%26quot%3B%28R3%29%3Cbr %2F%3E %3A %26quot%3B%25%25ESI%26quot%3B %2F%2F clobber list.%3Cbr %2F%3E %29%3B%3Cbr %2F%3E printf%28%26quot%3BSumma on%3D%25I64u%5Cn%5Ct%26quot%3B%2C summa%29%3B %2F%2F OS%3A Windows%2C 32-Bit. Linuxissa%3A %25llu.%3Cbr %2F%3E return 0%3B%3Cbr %2F%3E%7D%3Cbr %2F%3E%3Cbr %2F%3EToimiiko yll%C3%A4oleva oikein%3F%3Cbr %2F%3E%3Cbr %2F%3ESen olisi tarkoitus laskea 64 -bittinen summa kolmesta 32-bittisest%C3%A4 luvusta%3A%3Cbr %2F%3E%3Cbr %2F%3Esama kuin summa %3D R1 %2B R2 %2B R3%2C%3Cbr %2F%3E%3Cbr %2F%3Emutta siten%2C ett%C3%A4 tuloksen ei sallita %26quot%3Bpy%C3%B6r%C3%A4ht%C3%A4%C3%A4 ymp%C3%A4ri%26quot%3B KUN 32 -BITTINEN LUKUALUE Ylittyy.%3Cbr %2F%3E%3Cbr %2F%3ETarkoitus siis olisi ett%C3%A4 gcc -k%C3%A4%C3%A4nt%C3%A4j%C3%A4 huolehtii siit%C3%A4%2C ett%C3%A4%3A%3Cbr %2F%3E%3Cbr %2F%3Ev%C3%A4litt%C3%B6m%C3%A4sti ennen asm -lohkon alkua%3A%3Cbr %2F%3E%3Cbr %2F%3Emuuttuja R1 ladataan rekisteriin EAX.%3Cbr %2F%3Emuuttuja R2 ladataan rekisteriin EDX.%3Cbr %2F%3Emuuttuja R3 ladataan rekisteriin EDX.%3Cbr %2F%3E%3Cbr %2F%3Eja juuri asm -lohkon j%C3%A4lkeen%3A%3Cbr %2F%3E%3Cbr %2F%3Erekisteriparin EDX%3AEAX sis%C3%A4lt%C3%B6 tallennetaan muuttujaan summa.%3Cbr %2F%3E%3Cbr %2F%3EJa ihan testitarkoituksessa%3A%3Cbr %2F%3EKerrotaan C -k%C3%A4%C3%A4nt%C3%A4j%C3%A4lle%2C ett%C3%A4 asm -lohko k%C3%A4ytt%C3%A4%C3%A4 rekisteri%C3%A4 ESI eik%C3%A4 vaivaudu palauttamaan sen arvoa alkuper%C3%A4iseksi.%3Cbr %2F%3E%3Cbr %2F%3EToimiiko koodi tarkoitetulla tavalla%3F%3Cbr %2F%3E%3Cbr %2F%3EEnt%C3%A4%2C mit%C3%A4 pit%C3%A4isi muuttaa%2C jotta assembly -koodin voisi kirjoittaa intel -syntaksilla tuon at%26amp%3Bt sijasta %3F

2

157

    Vastaukset

    Anonyymi (Kirjaudu / Rekisteröidy)
    5000
    • asm_C_opiskelija

      int main(void)
      {
      unsigned int R1 = 11, R2 = 40, R3 = 0xfffffff;
      unsigned long long int summa;

      __asm__ __volatile__(
      " push EDI ;\n\t"
      " xor edi,edi ;\n\t"
      "addl @@edx,@@eax ;\n\t"
      "adcl 0,@@edi ;\n\t"

      "addl @@ecx,@@eax ;\n\t"
      "adcl 0,@@edi ;\n\t"

      "movl @@edi,@@edx ;\n\t"
      // EDX:EAX = summa(eax, edx, ecx)

      " pop EDI ;\n\t"
      " mov 1, @@ESI ;\n\t"

      :"=a"(summa)
      :"a"(R1), "d"(R2), "c"(R3)
      : "@@ESI" // clobber list.
      );
      printf("Summa on=@I64u\n\t", summa); // OS: Windows, 32-Bit. Linuxissa: @llu.
      return 0;
      }

      VALITETTAVASTI suomi24 -forumohjelmisto sekoilee jälleen !

      Alkuperäisessä viestissä C -lähdekoodissa olleet prosenttimerkit (jotka ikävä kyllä kuuluvat at&t syntaksiin assemblykielessä) aiheuttivat koko viestin sotkeutumisen.

      Tässä sama viesti uudelleen siten, että jokainen prosenttimerkki on korvattu ät -merkillä.

    • hyväjostoimii

      Ensinnäkin miksi laitat push-komennolla tuon EDI-rekisterin pinoon jota et käytä lainkaan?

      Aivan joo mutta ei kannattaisi indeksirekistereitä, hitaampia käyttää tuolla tavoin, olisit käyttänyt laskennassa rekisteriä EEAX.

    Ketjusta on poistettu 0 sääntöjenvastaista viestiä.

    Luetuimmat keskustelut

    1. Haluaisitko nähdä

      Hänet alastomana?
      Ikävä
      78
      3845
    2. Hilirimpsistä

      Hyvää huomenta ja kivaa päivää. Ilmat viilenee. Niin myös tunteet. 🧊☕✨🍁❤️
      Ikävä
      201
      3022
    3. Nainen lopeta pakoon luikkiminen?

      Elämä ei oo peli 😔😟
      Ikävä
      25
      2950
    4. Älä elättele

      Toiveita enää. Ihan turhaa. Sotku mikä sotku.
      Ikävä
      49
      2798
    5. Olet täällä. Mutta ei minulle.

      Nyt olen tästä 100% varma. Satuttaa. T: V
      Ikävä
      24
      2754
    6. Kuule rakas...

      Kerrohan minulle lempivärisi niin osaan jatkaa yhtä projektia? Arvaan jo melkein kyllä toki. Olethan sinä aina niin tyyl
      Ikävä
      41
      2495
    7. Miten hitsissä ulosoton asiakas?

      On tää maailma kumma, tässä haisee suuri kusetus ja ennennäkemättömän törkeä *huijaus*! Miten to.monen kieroilu on edez
      Kotimaiset julkkisjuorut
      276
      2315
    8. Kela valvoo lasten tilejä.

      Tämä isoveli Kela kyttää jopa lasten yli 200,- euron rahat jotka on melko varmasti lahjaksi saatu. Se vaikuttaa perheen
      Yhteiskunta
      214
      2001
    9. Törmättiin tänään

      enkä taaskaan osannut reagoida fiksusti. Menen aina lukkoon. Yksi asia on varma: tunteeni sinua kohtaan ovat edelleen v
      Ikävä
      24
      1957
    10. Vieläkö sä

      Rakastat mua?❤️😔
      Ikävä
      44
      1907
    Aihe