私はアセンブリコードを少し学びましたが、インターネット上にはこれに関する優れたチュートリアルがあまりないことも学びました。特定のデバイスに信号を送信することについて疑問に思っていました
。パラレル ポート、usb (おそらく)
正しい方向に導くために誰かが共有できるコードがあるかどうか疑問に思っていました。そして、あなたが信号で知らなかった場合、私は電圧を送ることを意味します.
要約すると、アセンブリを使用して特定のポートと対話する方法を知りたいと
思います。現在、アセンブリを実行するために DosBox を使用し、フラット アセンブラを使用してプログラムしています。これはすべてウィンドウ 8 で実行されています。
よろしくお願いします、36redsoxfan
2 に答える
私は fasm の専門家ではありません...しかし、この投稿によると... fasm の場合とそうでない場合があります...
http://board.flatassemblyr.net/topic.php?t=8638
BIOS を Bidirectional Parallel port mode (SPP) として設定します
これにより、I/O パーミッションが設定されます。
mov eax,101 ; SYS_IOPERM
mov ebx,Base_Parallel ; 378H
mov ecx,Size ; 3
mov edx,1 ; Turn ON
int 80H
test eax,eax
js Error_Set_IO
書くには:
mov dx,37ah
in al,dx
and al,11011111b ; reset bit 5 ( Write mode)
out dx,al
mov al,0ffh ; turn on all 8 pin
mov dx,378h
out dx,al ; Write byte
読むには:
mov dx,37ah
in al,dx
or al,00100000b ; set bit 5 ( Read mode)
out dx,al
mov dx,378h
in al,dx ; Read byte
すでに述べたように、in と out を使用して正しいポートに正しいビットを書き込むだけです。大きな問題は、Windows ボックスでユーザー モードで実行している場合、これを行うための十分なアクセス許可がないことです。カーネル モード ドライバーとして実行する必要があります (それでも、アセンブリ レベルのハードウェア アクセスを行うのではなく、OS が提供するインターフェイスを呼び出している可能性があります)。私自身は DosBox を使用したことはありませんが、一般に、このようなエミュレーターは基盤となるハードウェアへのアクセスのみをエミュレートします。そのため、エミュレートされたパラレル ポートへの書き込みが可能になる場合がありますが、ハードウェアの電圧レベルは実際には変更されません。パラレル ポート - これはまだ Windows の制限の対象です。
オプションは、正確に何をしたいかによって少し異なります。いくつかの可能なオプション:
- ハードウェアにアクセスするアセンブリをいじりたいだけで、実際に物理ハードウェアにアクセスする必要がない場合は、少なくともいくつかのハードウェアをエミュレートし、このエミュレートされたハードウェアでのアセンブリ操作の結果を表示するエミュレータを見つけることができます。 .
- Windows 環境でアセンブリを使用して物理ハードウェアにアクセスする場合は、単にエミュレートされたデバイスではなく、Windows ドライバーを使用してコマンドを物理ハードウェアに渡すエミュレーターがあるかどうかを確認する必要があります。
- Windows 環境外でアセンブリを使用して物理ハードウェアにアクセスする場合は、アセンブリ コードがハードウェアに直接アクセスできるようにする OS またはブートローダーを見つける必要があります。
- アセンブリである必要がない場合は、他のオプションを利用できます (これは、私が過去に Windows 環境でパラレル ポートをいじったときに行った方法です)。