braders Temat założony przez niniejszego użytkownika |
wstawki asemblera problem » 2012-09-23 17:13:08 witam mam taki kod #include <tchar.h> #include <Windows.h> #include <iostream>
int _tmain( int argc, _TCHAR * argv[] ) { HANDLE hGiveIoDrv; hGiveIoDrv =::CreateFile( "\\\\.\\giveio", GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0 ); if( hGiveIoDrv == INVALID_HANDLE_VALUE ) { ::MessageBox( 0, "błąd dostępu do giveio...", "?!", MB_ICONSTOP ); return( 0 ); } else { ::CloseHandle( hGiveIoDrv ); } 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 |
|
m4tx |
» 2012-09-23 17:17:46 Szukałeś chociaż w Google? :) |
|
Mrovqa |
» 2012-09-23 17:33:24 Obstawiam, iż korzystasz z MinGW (piszesz w CodeBlocks), nie? ;) Spróbuj tego: __asm(
"mov dx, 0x378\n"
"mov al, 0x01\n"
"out dx, al\n" );
|
|
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 |
|
m4tx |
» 2012-09-23 17:42:48 Sprawdź to... __asm(
"mov 0x378, dx\n"
"mov 0x01, al\n"
"out al, dx\n" ); |
|
braders Temat założony przez niniejszego użytkownika |
» 2012-09-23 17:49:21 to samo tego już próbowałem |
|
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: __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... |
|
m4tx |
» 2012-09-23 18:08:27 a ty tylko argumenty miejscami zmieniłeś... |
A więc mówisz, że takie coś: 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... |
|
« 1 » 2 |