0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

4. プロテクトモード

4.1 プロテクトモードへの移行

  • モード移行の手順

    • CRレジスタ0の最下位ビット(PE(プロテクションイネーブル)ビット)を1にセットすることでCPUの動作モードがプロテクトモードになる
    mov eax, cr0
    or eax, 1
    mov cr0, eax
    
    • モード移行の前に以下の準備をしておかなくてはならない
      • セグメントの設定
      • 割り込みの設定
      • アドレス制限の解除

4.2 リアルモードへの移行

  • モード移行の手順

    • CRレジスタ0の最下位ビット(PE(プロテクションイネーブル)ビット)を0にセットすることでCPUの動作モードがプロテクトモードになる
    mov eax, cr0
    or eax, 0fffffffeh
    mov cr0, eax
    
    • モード移行の前(と後)に以下の準備をしておかなくてはならない
      • 割り込みの設定
      • セグメントの設定
      • アドレス制限の設定
  • リアルモードへ移行するケース

    • MS-DOS上のアプリケーションソフトウェアを作る場合で、大規模なプログラムを効率的に開発するため、プロテクトモードに移行して作業を行うことがあるが、実行終了後にMS-DOSに制御を戻したり、ファイルの読み書きのためにMS-DOSを呼び出す時にはリアルモードに戻る必要がある(NS-DOSのシステムコールはリアルモードでしか実行できない)
  • 286でのリアルモードへの移行

    • リアルモードへの移行機能がないため、リセット用の外部回路を使ってリアルモードへの復帰を実現する
    • リアルモードへの移行のためのリセットでは、ある特定の物理アドレスのメモリに故意のリセットであることを示す値を書き込んでおく

4.3 モード移行プログラム

  • アセンブラの擬似命令
    • MASMやTASMでは、無指定の状態では8086の命令のみを受け付けるようになっているため、386以降に追加されたレジスタや拡張された命令を受け付けるようにするには、擬似命令による宣言が必要
      • 通常のアプリケーションソフトウェアで利用される一般命令を使用する場合
        • .386擬似命令で宣言
      • オペレーティングシステムで使用する特殊命令を使用する場合
        • .386p擬似命令で宣言
  • プロテクトモード移行関数
    • 486はパイプライン処理(マシン語プログラムの読み出し、解釈、実行を並行して行うこと)を行なっているため、プロテクトモードに移行したにも関わらず、リアルモード状態で解釈されたものが紛れている可能性がある
    • JMP命令によってこれを無効にしている
.386p
_TEXT segment byte public use16 'CODE'
			assume cs:_TEXT

public _RealToProto
_RealToProto proc near
						 push bp
						 move bp, sp
						 ;
						 cli # 割り込みを禁止
						 mov eax, cr0
						 or eax, 1
						 mov cr0, eax
						 ;
						 jmp flush_q1 # パイプラインに先読みした命令をクリアする
flush_q1:
						 pop bp
						 ret
push bp
_RealToProto endp
  • リアルモード移行関数
public _ProtoToReal
_ProtoToReal proc near
						 push bp
						 move bp, sp
						 ;
						 mov eax, cr0
						 or eax, 0fffffffeh
						 mov cr0, eax
						 ;
						 jmp flush_q2 # パイプラインに先読みした命令をクリアする
flush_q2:
						 pop bp
						 ret
push bp
_ProtoToReal endp

_TEXT ends
			end
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?