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

wstawki asemblera problem

Ostatnio zmodyfikowano 2012-09-25 01:27
Autor Wiadomość
braders
Temat założony przez niniejszego użytkownika
wstawki asemblera problem
» 2012-09-23 17:13:08
witam mam taki kod
C/C++
#include <tchar.h>
#include <Windows.h>
#include <iostream>



int _tmain( int argc, _TCHAR * argv[] )
{
    HANDLE hGiveIoDrv;
    // wywołanie drivera giveio
    hGiveIoDrv =::CreateFile(
    "\\\\.\\giveio",
    GENERIC_READ,
    0,
    NULL,
    OPEN_EXISTING,
    FILE_ATTRIBUTE_NORMAL,
    0 );
    // sprawdzenie czy jest dostępny
    if( hGiveIoDrv == INVALID_HANDLE_VALUE ) {
        // jeżeli nie - komunikat o błędzie i koniec pracy
        ::MessageBox( 0, "błąd dostępu do giveio...", "?!", MB_ICONSTOP );
        return( 0 );
    }
    else {
        // zwolnienie uchwytu, nie będzie już potrzebny
        ::CloseHandle( hGiveIoDrv );
    }
    // poniższe wywołanie zadziała poprawnie
    // WriteDataToPort ( 0x378, 0xAA);
   
   
   
   
    for( int i = 0; i < 10; i++ )
    {
       
       
        __asm(
       
        "mov dx, 0x378"
       
        "mov al, 0x01"
       
        "out dx, al"
        );
        Sleep( 1 );
       
    }
   
   
    return( 0 );
}

ale podczas kompilacji wyskakuje mi następujący błąd
 
C:\DOCUME~1\ADMINI~1\USTAWI~1\Temp\ccOro7ko.s|81|Error: too many memory references for `mov'|
nie za bardzo znam asemblera i nie wiem co to może być prosił bym o jakąś małą podpowiedz
P-65434
m4tx
» 2012-09-23 17:17:46
Szukałeś chociaż w Google? :)

Frazy, które należy wpisać w wyszukiwarkę google:
P-65435
Mrovqa
» 2012-09-23 17:33:24
Obstawiam, iż korzystasz z MinGW (piszesz w CodeBlocks), nie? ;) Spróbuj tego:
C/C++
__asm(

"mov dx, 0x378\n"

"mov al, 0x01\n"

"out dx, al\n"
);
P-65437
braders
Temat założony przez niniejszego użytkownika
» 2012-09-23 17:41:28
@up
to samo tylko teraz zamiast jednego błędu wyskakują 3 te same.
@2up
googlowałem ale nic z tego nie rozumiem i żeby nie było Przeglądam google już od półtory godziny 
P-65438
m4tx
» 2012-09-23 17:42:48
Sprawdź to...

C/C++
__asm(

"mov 0x378, dx\n"

"mov 0x01, al\n"

"out al, dx\n"
);
P-65439
braders
Temat założony przez niniejszego użytkownika
» 2012-09-23 17:49:21
to samo tego już próbowałem
P-65440
Mrovqa
» 2012-09-23 17:50:15
@m4tx po pierwsze - on miał błąd kompilacji, a ty tylko argumenty miejscami zmieniłeś... (w błędzie było info o za dużej liczbie argumentów). Po drugie
mov 0x378
, lol... Jak do stałej liczbowej chcesz coś przenieść? o.O

/edit:
C/C++
__asm(
"mov %dx, 0x378\n\
 mov %al, 0x01\n\
 out %al, %dx\n"
);
GCC korzysta ze składni AT&T, a nie Intelowskiej.

drugi link w google...
P-65441
m4tx
» 2012-09-23 18:08:27
a ty tylko argumenty miejscami zmieniłeś...
A więc mówisz, że takie coś:

C/C++
void foo( const char * wtf, int omg ) {
}

void ha() {
    foo( 666, "LOLWUT" )
}

Też zadziała? :)

@up zapominasz chyba, że w składni AT&T parametry mov są odwrócone miejscami...
P-65442
« 1 » 2
  Strona 1 z 2 Następna strona