tak wyglada kod:
DWORD a,b;
__asm mov a,b ;
i nie działa próbowąłem też z {} też nie działa pisze improper operand type
mam ms visual c++ 7.0
Tez mam problem z assemblerem.
Chce sprawdzic stan portu lpt i w tym celu wpisuje wstawke assemblerowa. W Dev-cpp system zamieszczania kodu asma jest dla mnie co najmniej dziwny.
__asm("mov %dx,378");
__asm("in %al,%dx");
Pierwsza linijka dziala, ale druga juz nie. "Suffix or operands invalid for 'in'." Dokumentacje Dev-cpp traktujace o asmie, z ktorymi sie spotkalem, nie zawieraly ani slowa o komendzie 'in'. Jak prawidlowo zapisac ten kod?
Byc moze instrukcja "in" nie jest obslugiwana (rozkaz jest zapisany poprawnie) z tego wzgledu ze jest to instrukcja do operacji na portach. A nawet gdyby udalo ci sie to skompilowac nie bedzie dzialac pod xp/nt (prog sie wysypie - niedozwolona instrukcja). W tych systemach dostep do portow nie jest mozliwy (ale w 9x jest).
są gotowe funkcje do i/o w msvcrt.dll.
Nie jestem za dobry w C i nie potrafię tego zlinkować w devie:
extern int __cdecl _inp(int port);
extern void __cdecl _outp(int port, int bajt);
extern void Sleep(int ms);
int main()
{
//_inp(888);
for (int a=0; a<25; a++)
{
_outp(888,255);
Sleep(200);
_outp(888,0);
Sleep(200);
}
return 0;
}
so, podłączona dioda do lpt powinna sobie migać, ale dev jest taki uparty że nie da się napisać czegoś w stylu #use <libmsvcrt.a>
Zarejestruj się i dołącz do największej społeczności programistów w Polsce.
Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.