witam ,dostałem na przyszły tydzien referat z programowania a jego temat brzmi"odczyt danych z portu",jeśli ktoś mógłby mi pomóc i napisać o czym to ma być ,czy chodzi tu o jakieś komendy,funkce czy co??jestem dopiero na etapie "kalkulatorów,ciągow czy prostych tablic" i nie za bardzo sie orientuje w tej tematyce,byłbym wdzięczny za jakieś przykłady,naprowadzenie albo wskazówki(jeśli można prosiłbym o pisanie wmiarę prostym językiem jak dla początkującego programisty )
- Rejestracja:ponad 21 lat
- Ostatnio:prawie 2 lata
- Postów:2692
Wolverine napisał(a)
IN (AL|AX|EAX), (imm8|DX)
Dziwny material na referat :P
mialo byc zrozumiale dla prostego ludzia ;)
To co podal Wolverine to sposob na pobranie wartosci z portu w assemblerze.
Przyklad:
MOV DX, 60h
MOV AL, DX
teraz w al jest wartosc, ktora siedzi na porcie o nr 60h
jednak istnieje duzo innych sposobow odczytywania danych jak chocby pod Pascalem bodajze funkcja in( port ). Dodatkowo dane z niektorych portow mozesz pobierac korzystajac z shella command.com lub cmd.exe ( pod win xp ). Przyklad: type com1
Tak samo piszac programy pod Windows traktujac np. port com jak plik.
dzięki za te odpowiedzi ,juz wiem chociaz ze chodzi porty sprzetowe a nie internetowe,ale nadal nie wiem ,gdzie tego szukac ,zapomnialem wspomniec ,że chodzi m tu o język c++,może jakies przyklady w tym jezyku,bo co dotyczy wczytywanie jakis komend typu cmd to jestem zielony w tym temacie .
P.S.moze ze slowem referat przesadzilem,ale moj nauczyciel od programowania rozdawal do przygotowania tematy typu ,typu puts,printf,itp a mi przypadl temat:"odczyt danych z portu"
nadal wywala mi jakiś błąd,przy zmianie na klamre jest to samo:
//odczyt z portu
using namespace std;
asm {
mov DX,60h //kopiowanie wartości z 60h bajtu pamięci do rejestru procesora DX
//60h to port kontrolera klawiatury
IN AL,DX //wczytanie danych do rejestru procesora DX(akumulatora)
}
main()
{
}
wiersz 3 syntax error before `{' token
wiersz 8 invalid suffix "h" on integer constant
można podawać w heksydecymalnym czy zmienić na dziesiątkowy??
robiłem to w dev-cpp,pod xp
- Rejestracja:ponad 20 lat
- Ostatnio:ponad 17 lat
więc w devcpp jest ogólnie prze****** jeśli chodzi o wstawki asma
możesz przerzucić sie na kompilator np. borlanda
albo nauczyć składni AT&T asemblera :D (lepiej zmień kompilator)
http://www.imada.sdu.dk/~kslarsen/dm18/Litteratur/IntelnATT.htm
http://gcc.gnu.org/onlinedocs/gcc-3.2.2/gcc/Extended-Asm.html
może jest jeszcze inne wyjście którego nieznam ??
czytałem coś ze do gcc można dodac polecenie -masm=intel ale u mnie to nie działa :(
- Rejestracja:ponad 19 lat
- Ostatnio:ponad 16 lat
jeśli dobrze pamiętam w C były do tego dwie funkcje:
#include <dos.h>
outportb(0x3e8, 0x80); /* wpisuje do portu o numerze 0x3e wartość 0x80 /
char w = inportb(0x3e8); / odczyt z portu o numerze 0x3e8 */
ale to działało tylko pod DOS. W Windows służy do tego funkcja CreateFile