Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Wstawki assemblera Cpp code::blocks - problem "too many memory references for `mov'"

Ostatnio zmodyfikowano 2015-03-27 20:05
Autor Wiadomość
jegor377
Temat założony przez niniejszego użytkownika
Wstawki assemblera Cpp code::blocks - problem "too many memory references for `mov'"
» 2015-03-23 15:44:42
Otóż mam problem, bo chciałbym się zacząć uczyć assemblera, pomyślałem, że najlepiej to zrobię ucząc się go we wstawkach w cpp, jednak nie chcą one współpracować (co nie co już się nauczyłem o asm, ale takie mega podstawy), wpisałem do opcji linkera "-masm=intel", jednak dalej nic... Mój kod wygląda tak:

C/C++
#include <iostream>

using namespace std;

int main( int argc, char * argv[] )
{
    asm( "mov eax, 0x1\n" );
    return 0;
}

jednak to nie działa... Gdzieś zobaczyłem, że jak dam znak procenta przed eax to niby ma zadziałać i tak też się stało jednak, po uruchomieniu programu, program wywalił... Nie wiem dla czego... Czy to dlatego, że zrobiłem coś źle, czy dlaczego?

PS funkcje _asm, __asm, __asm__, _asm_ mi nie działają... :C
P-129000
maly
» 2015-03-24 07:59:14
wpisałem do opcji linkera "-masm=intel"
-masm jest opcją kompilatora.
P-129021
jegor377
Temat założony przez niniejszego użytkownika
» 2015-03-26 22:39:41
ok, to jak zrobić, by można było te wstawki pisać? :)
P-129235
1aam2am1
» 2015-03-27 20:05:00
Kiedyś napisałem funkcje z asm.
Wiec sobie pościągaj trochę, doczytaj.

C/C++
namespace binary
{
    template < typename T >
    inline T & shift_bit_lewo( T & co, const int8_t & ile )
    {
        static_assert( std::is_unsigned < T > { }, "T should be unsigned" );
        asm volatile( "rol %%cl, %0": "+r"( co )
            : "ecx"( ile ) );
        return co;
    }
   
    template < typename T >
    inline T & shift_bit_prawo( T & co, const int8_t & ile )
    {
        return shift_bit_r( co, - ile );
    }
}
P-129279
« 1 »
  Strona 1 z 1