Suomi24 Keskustelussa on viikonlopun aikana ollut poikkeuksellisen paljon bottien automaattiseti luomia kommentteja. Pahoittelemme tästä aiheutunutta harmia. Olemme kiristäneet Keskustelujen suojausasetuksia ja kommentointi on toistaiseksi estetty ulkomailta.

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

137

    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. Millä voin

      Hyvittää kaiken?
      Ikävä
      71
      2328
    2. Jotain puuttuu

      Kun en sinua näe. Et ehkä arvaisi, mutta olen arka kuin alaston koivu lehtiä vailla, talven jäljiltä, kun ajattelen sinu
      Ikävä
      101
      2113
    3. Haluan sut

      Haluatko sinä vielä mut?
      Ikävä
      78
      1728
    4. Hei A, osaatko

      sanoa, miksi olet ihan yhtäkkiä ilmestynyt kaveriehdotuksiini Facebookissa? Mitähän kaikkea Facebook tietää mitä minä en
      Ikävä
      42
      1537
    5. Haluaisin aidosti jo luovuttaa ja unohtaa

      Ei tästä mitään tule koskaan.
      Ikävä
      78
      1536
    6. Ampuminen Iisalmessa

      Älytöntä on tämä maailman meno.
      Iisalmi
      10
      1467
    7. Pohjola kadulla paukuteltu

      Iltasanomissa juttua.
      Iisalmi
      31
      1429
    8. 52
      1298
    9. Synnittömänä syntyminen

      Helluntailaisperäisillä lahkoilla on Raamatunvastainen harhausko että ihminen syntyy synnittömänä.
      Helluntailaisuus
      73
      1254
    10. Mitä tämä tarkoittaa,

      että näkyy vain viimevuotisia? Kirjoitin muutama tunti sitten viestin, onko se häipynyt avaruuteen?
      Ikävä
      30
      1209
    Aihe