Witam!
Czy możliwym jest dokonanie przypisania w stylu: jakis_wskaznik=jakis_konkretny_adres. Za przyklad wezmy tablice wektorow przerwań. Wiadomo, ze istnieje ona w pierwszym kilobajcie pamięci, począwszy od zerowego adresu fizycznego. Wybierając dajmy na to 2-gi wektor z adresem procedury obsługi przerwania, chcemy do niego zapisać nowy adres własnej procedury. Więc, czy da się to zrobić w C++ w prosty sposób za pomocą takiego przypisania:
unsigned long * wskaznik=0x00000004;
*wskaznik=nasza_procedura;
Takie przypisanie jest oczywiscie niemozliwe, bo juz to sprawdzalem, ale czy mimo wszystko jest sposob na zrobienie tego samego w podobny sposób ?
Istnieje funkcja getvect(); i setvect(), ktore robią to o czym piszę, jednak używam Visual Studio 2003 w ktorego bibliotekach takich funkcji nie ma i nie ukrywam, ze bardziej by mnie interesowało jak one działają niż to,że działają w ogóle.
A drugie pytanie jest następujące:
W assemblerze do portów da się odnieść za pomocą instrukcji in oraz out. Wiadomo, ze porty te są mapowane w pamięci, stąd łatwość dostępu do nich. Jesli dobrze pamiętam nie dało się do nich odnieść za pomocą instrukcji MOV, LD itp. (przynajmniej nie w AVR) Czy zatem da się do tych adresów odnieść w sposób podobny jak opisany w problemie powyżej (tj. za pomocą wskaźników, bez używania funkcji bibliotecznych inport, outport,inp,outp itp.) ?? Jestem raczkujący w C++, więc proszę o proste tłumaczenie :)
Do tego zdaję sobie sprawę z tego, że mój problem tyczy się też modelu pamięci w komputerze klasy PC, więc jeśli to możliwe to proszę o hasła pod którymi mogę ewentualnie szukać. A propos tego zagadnienia: Czy SEGMENT=0 OFFSET=4 oznacza, że wskazuję właśnie na komórkę pamięci w której zaczyna się 2-gi wektor w tablicy wektorów przerwań?
Jak na tle tych wszystkich pytań ma się fakt, że Windows XP blokuje dostęp do urządzeń WE/WY ?
System: WinXP
Środowisko: Visual Studio 2003
Dziękuję za odpowiedzi, cierpliwość i wyrozumiałość :)
Pozdrawiam.