Asm

laki32

asm - słowo kluczowe umożliwiające wstawienie do kodu C/C++ wstawki kodu assemblerowego.

W zależności od kompilatora słowo kluczowe asm występuje w różnych formach, np. dla Microsoft Visual C++ używa się __asm.

Przykład

(Visual C++)

DWORD Funkcja(DWORD dwWartosc)
{
   __asm
   {
      mov eax, dwWartosc
      add eax, 100
      mov dwWartosc, eax
   }
 
   return dwWartosc;
}

W przypadku problemów z użyciem wstawek assemblerowych, pomocy szukaj w dokumentacji Twojego kompilatora.

3 komentarzy

hmmm. po implementacji tego kawalka kodu w tym przykladzie:


#include <IOStream>
#include <StdLib.h>

using namespace std;

int main(void)
{
   DWORD Funkcja(DWORD dwWartosc)
{
   __asm
   {
      mov eax, dwWartosc
      add eax, 100
      mov dwWartosc, eax
   }

   return dwWartosc;
}
   system("PAUSE");
   return 0;
}

Otrzymuje:

-858993450
czekam na wcisniecie klawisza
Aby kontynuować, naciśnij dowolny klawisz . . .

Czego to jest wina? w tym miejscu 100 jest w hex czy dziesietnie? ale to i tak nie ma wplywu na taki wynik!
Kompiluje to za pomoca VS 2k5

Jeżeli programujemy w asemblerze, to po liczbie, jakiejkolwiek, warto byłoby poinformować kompilator, w jakim systemie zapisaliśmy liczbę. Jeżeli napiszemy add eax, 100h to kompilator wie, że liczba zapisana jest w systemie szesnastkowym, jeżeli zamiast h podstawimy b - kompilator zinterpretuje to jako liczbę dwójkową, a jeżeli d - dziesiętną.

s0d:Nie przypisałeś do dwWartosc żadnej wartości, więc były tam jakiś mieci do których dodałeś 100(raczej dziesiętnie, chociaż nie jestem pewien) a potem je wyświetliłeś.