Asembler 64 - porty (IN/OUT)

szukaj na forum nowy temat odpowiedz

Strona [ 1 2 >> ] z 2

MSM ten post 07-02-2010 20:26
avatar

Użytkownik
Status: Offline
Dołączył: 24-04-2009
Skąd: Google Search
Próbuję sobie napisać program w 64bit. assemblerze, ale napotkałem pewien problem związany z IN/OUT i nie potrafię sobie za bardzo poradzić :/

Nie mam żadnego debbugera i nie chce mi się bawić z szukaniem, więc korzystam z pierwotnej metody jaką każdy chyba (albo podobną) kiedyś stosował:

Konkretnie początek wygląda tak:

Main proc
        mov al, 04h
        out 70h, al
        out 0edh, al
        in        al, 71h


Dokładnie tak samo wygląda to w kursie, tyle że jeszcze chyba 16 bitowym :) http://rudy.mif.pg.gda.pl/~bogdro/dos/a_kurs06.htm.

Wywala się już na pierwszym out. Skąd wiem?

        mov al, 04h
        call ExitProcess
        out 70h, al

działa, a
        mov al, 04h
        out 70h, al
        call ExitProcess

już nie :>

Proszę o jakąś pomoc, bo jakoś w internecie nie widzę rozwiązania (a może za słabo szukam...), a chciałbym się wreszcie nauczyć tego ^*&%^* assemblera.
#define private public   // beware classes, I`m coming!
:D

Ostatnio zmodyfikowany: 07-02-2010 20:28 przez MSM
Przejdź na górę strony
cytuj
deus. ten post 07-02-2010 20:28





Chłopcze, naprawdę myślisz, że Windows da Ci dostęp do przerwań i portów? Asm dla trybu rzeczywistego, pod DOS, nie ma nic wspólnego z pisaniem pod Windows.
Przejdź na górę strony
cytuj
milyges ten post 07-02-2010 20:30
avatar

Użytkownik
Status: Offline
Dołączył: 21-09-2003
Skąd: Kraków
Skoro assembler 64b więc zakładam że odpalasz to pod Windows/Linux. Sprawa jest prosta: procesor w trybie chronionym lub długim (64b) nie pozwala procesom użytkownika (DPL=3) na bezpośredni dostęp do portów I/O. W Linuksie załatwia się to przez wywołanie systemowej funkcji ioperm(). W Windows zapewne trzeba skorzystać z zewnętrznych sterowników/bibliotek...

//EDIT: Za późno ;)
Polski Portal Użytkowników Debiana
IdyllaOS

Ostatnio zmodyfikowany: 07-02-2010 20:30 przez milyges
Przejdź na górę strony
cytuj
MSM ten post 07-02-2010 20:52
avatar

Użytkownik
Status: Offline
Dołączył: 24-04-2009
Skąd: Google Search
Ach. To miło... Mam rozumieć że powinienem użyć jakiejś biblioteki typu user32 czy kernel32.dll (pierwsze nazwy jakie mi przyszły do głowy)?

Asm dla trybu rzeczywistego, pod DOS, nie ma nic wspólnego z pisaniem pod Windows.

To już zauważyłem. Brakuje mi cię, INT 21h ;(

No nic, spróbuję to jakoś obejść.
#define private public   // beware classes, I`m coming!
:D
Przejdź na górę strony
cytuj
deus. ten post 07-02-2010 21:05





Możesz msvcrt używać - runtime C czyli printf, scanf i takie tam...
Przejdź na górę strony
cytuj
aqz123 ten post 07-02-2010 21:36





poz windows odradzam uzywanie msvcrt.dll.
to jest syf,  windows ma zupelnie inne api.

Ach. To miło... Mam rozumieć że powinienem użyć jakiejś biblioteki typu user32 czy kernel32.dll (pierwsze nazwy jakie mi przyszły do głowy)?

dokladnie tak. user32.dll - GUI (+ wszsytko co ma zwiazek z desktopami, oknami, winstationame), kernel32.dll - IO.

Jak chcesz uzywac in/out to musisz ustawic iopl (rflags) na 11, czyli cpl = 3 zezwala na instrukcje iopl sensitive.
najprosciej napisac driver ktory po odebraniu irp to zrobi, dziala w kontexcie obecnego procesu. mysle ze takie drivery sa dostepne, a nawet jak nie to raptem 1 funkcja + ustawienie irp dispatch.

a moze da sie to ustawic przez jakis wbudowany program? nie zdziwilbym sie jak by sie dalo.

niestety jesli cpu jest w long mode, nie ma v8086, wiec nie mozesz pisac instrukcji 16 bitowych (i tak, one sie roznia od analogicznych 32 bitowych, szczegolnie te z modrm, wiec CS.D nie zalatwi sprawy)
Przejdź na górę strony
cytuj
deus. ten post 07-02-2010 21:41





Oho, znowu h3x pieprzy od rzeczy... Słuchaj, zmień forum bo przypomnisz sobie co oznacza §4.8.
Przejdź na górę strony
cytuj
Azarien ten post 08-02-2010 00:44
avatar

Użytkownik
Status: Offline
Dołączył: 18-12-2003


poz windows odradzam uzywanie msvcrt.dll.
to jest syf,  windows ma zupelnie inne api.

msvcrt.dll to nie jest syf, tylko C-runtime z którego korzystają aplikacje samego systemu (ot, notepad.exe na przykład). Biblioteka jednak nie jest przez Microsoft rekomendowana "do własnego użytku". Ale można ich się nie posłuchać ;-)
Przejdź na górę strony
cytuj
lord_zero ten post 08-02-2010 18:12





Pisanie drivera nie jest konieczne, wystarczy skorzystac z instrukcji i kodu zawartych w tym materiale - http://wookey.org/usermodehardwareportio.html.

lord_zero
Przejdź na górę strony
cytuj
MSM ten post 08-02-2010 20:57
avatar

Użytkownik
Status: Offline
Dołączył: 24-04-2009
Skąd: Google Search
Dzięki wszystkim za pomoc, może kiedyś wreszcie zrozumiem tego assemblera ;)

@lord_zero: 404 :/
#define private public   // beware classes, I`m coming!
:D
Przejdź na górę strony
cytuj
szukaj na forum nowy temat odpowiedz

Strona [ 1 2 >> ] z 2

1 użytkownik(ów) przegląda ten temat (1 gości)
(żadnych zarejestrowanych użytkowników)

Copyright © 2000-2006 by Coyote Group 0.9.3-pre3
Czas generowania strony: 0.0419 sek. (zapytań SQL: 9)