0

周波数を 8254 チップのカウンタ レジスタにロードするには、周波数を ax にロードしてから、al と ah を 1 つずつポート #42h に移動します。

    mov ax,1fb4h
    out 42h,al
    mov al,Ah
    out 42h,AL

わかりました、なぜそれが機能するのですか?上書きがあり、ポート 42h の最後の値は AH =>1f になると思います。そのため、b4 (下位ビット) がポートアドレスに保持されることはありません! だから私たちは周波数を緩めます...

これを使用できない理由:

out 42h,AX

ポート アドレス空間が AX よりも小さい場合、コードの最初の行が機能する理由とその方法は?

4

1 に答える 1

5

out port,ax16 ビット ポートへの書き込みを試みます。8254 は 16 ビット ポートを提供せず、8 ビット ポートのみを提供します。

私は確認していませんが、ポート 42 に 16 ビットの書き込みを行った場合、下位バイトはポート 42 に、上位バイトはポート 43 に送られると思います。 PIT コマンド/モード レジスタです。

なぜ/どのように機能するかについては、内部的にPITには16ビットのレジスタがありますが、それにアクセスするための8ビットのポートしか提供していません。最初の書き込みを行うと、PIT はそれを一時的にラッチします。2 番目の書き込みを行うと、PIT はそれもラッチし、ラッチからレジスタに 16 ビットを書き込みます。

于 2012-12-08T21:20:35.947 に答える