Assembly + C vagy van valami más ötlet?

Kezdőlap Fórumok Programozás Assembly + C vagy van valami más ötlet?

4 bejegyzés megtekintése - 1-4 / 4
  • Szerző
    Bejegyzés
  • #2051756
    Morzel
    Felhasználó

      Es ez igy neked szintaktikailag helyes? (Leforditja egyaltalan?)

      Code:
            mov    ecx,, length

      Miert kell oda ket vesszo?
      Egyebkent nem eskuszom meg ra, de mintha ansi C-ben lenne valamilyen rshift utasitas. Majd utana nezek.

      Morzel

      #2051757
      tovis
      Felhasználó

        azért mert remeg a kezem;o)
        Nem copy/paste, kézzel vittem be – az eredetit tökéletesen fordítja.

        #2051758
        tovis
        Felhasználó

          Okuljunk!
          A GNU C -ben az inline assembly (mint kiderítettem) létezik – nagyon szokatlan (számomra) mivel nem a számomra megszokott, az Intel által definiált leírási módot alkalmazza hanem az AT&T pseudo assemblerét. Az elsõ szövegben talált kód ebben így fest:

          int rcl_array(char *sreg,int iLNG,int iCNT)
          {
            pBIN += iLNG – 1;
            __asm__ __volatile__(
              „pushfn”
              „pushl  %%ebxn”
              „pushl  %%ecxn”
              „movl  %0,%%ecxn”
            „rcl_array_2:n”
              „pushl  %%ecxn”
              „movl  %1,%%ecxn”
              „movl  %2,%%ebxn”
              „clcn”
            „rcl_array_1:n”
              „rclb  $1,(%%ebx)n”
              „decl  %%ebxn”
              „loop  rcl_array_1n”
              „popl  %%ecxn”
              „loop  rcl_array_2n”
              „popl  %%ecxn”
              „popl  %%ebxn”
              „popfn”
              : /* no output registers */
              : „r” (iCNT), „r” (iLNG), „r” (sreg)
            );
            return ( iCNT );
          } //end rcl_array

          Erre a ck. 10 sornyi rutinra elment ck. 4 órám! – megérte?!

          #1882588
          csaba
          Felhasználó

            n – bájtos tömböt kellene bitenként shiftelni! Visual C -ben egyszerûen inline assemblerrel megoldottam de most ez Linux -ban is kellene.
            A rutin rpototípusa:
              int  rcl_array(char *sreg, int length, int  count)

            azaz van egy length elemû byte tömb, melyet count szor kellene elshiftelni bitenként és aztán adja vissza a count -ot.
            Ez inline assemblyben így néz ki:
            int  rcl_array(char *sreg,int length,int count)
            {
              sreg += length – 1;
              __asm
              {
                pushf
                mov    ecx,count
              rcl_array_2:
                  push  ecx
                  mov    ecx,, length
                  mov    ebx, sreg
                  clc
                rcl_array_1:
                  rcl      [ebx],1
                  dec    ebx
                  loop  rcl_array_1
                  pop    ecx
                  loop    rcl_array_2
                  popf
              }
              return ( count );
            }

            Szóval ilyen egyszerû, de a GNU C -ben ilyne nem, igen van, vagy nem igazán felfogható a szintaxisa.
            Tudtok valami egyszerû assembly programot (példát) amit hozzá linkelhetek egy C progihoz?

          4 bejegyzés megtekintése - 1-4 / 4
          • Be kell jelentkezni a hozzászóláshoz.