teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

5

追記

2015/08/07 03:49

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -1,5 +1,75 @@
1
1
  プロテクトモードへの移行をしたいんですが、仮想OSが重大エラーが起きて、上手くできないんです。まだ初めてばかりですので、どうかよろしくお願いします。
2
2
 
3
+ ***追記*******
4
+ **A20以上有効とプロテクトモード有効をBIOSサービス割り込みのシステムサービスでやっても、重大エラーが起きたので、もしかしたらGDTの内容が間違っている部分があるかもしれません。よろしければGDTの解説もお願いします。**
5
+
6
+ **【変更したソースの一部】**
7
+ **前**
8
+ ```Assembly
9
+ CALL Enable_A20;A20以上有効
10
+
11
+ MOV EAX, CR0; CR0レジスタの値を読み出します
12
+ OR EAX, 1; PEビットをOR命令でONします
13
+ MOV CR0, EAX; そのままCR0に書き込みます
14
+ JMP CODE_DESC:OS32
15
+ -------------------------------------------------------------------------------------------------
16
+ Enable_A20:
17
+ CLI; 割り込み禁止
18
+
19
+ CALL A20wait; ウェイト処理
20
+ MOV AL, 0xAD; キーボード無効化
21
+ OUT 0x64, AL
22
+
23
+ CALL A20wait; ウェイト処理
24
+ MOV AL, 0xD0; リードアウトプットポートコマンド送信
25
+ OUT 0x64, AL
26
+
27
+ CALL A20wait2; アウトプットポートの値が書き込まれるまでウェイト
28
+ IN AL, 0x60; リードバッファレジスタ読み込み
29
+ PUSH EAX; 読み込んだデータをスタックに保存
30
+
31
+ CALL A20wait; ウェイト処理
32
+ MOV AL, 0xD1; ライトアウトプットポートコマンド送信
33
+ OUT 0x64, AL
34
+
35
+ CALL A20wait; ウェイト処理
36
+ POP EAX; 読み込んだアウトプットポートの値を元に戻す
37
+ OR AL, 0x2; A20有効ビットを1にする
38
+ OUT 0x60, AL; A20有効にする出力データを送信
39
+
40
+ CALL A20wait; ウェイト処理
41
+ MOV AL, 0xAE; キーボード有効
42
+ OUT 0x64, AL
43
+
44
+ CALL A20wait; ウェイト処理
45
+
46
+ STI; 割り込み有効
47
+ RET
48
+ A20wait:; ウェイト処理関数
49
+ IN AL, 0x64; ステータスレジスタ読み込み
50
+ TEST AL, 0x2; 送信したコマンド処理が完了をチェック
51
+ JNZ A20wait; 完了していない場合はループ
52
+ RET
53
+ A20wait2:; アウトプットポートの値が書き込まれるまでウェイト処理関数
54
+ IN AL, 0x64; ステータスレジスタ読み込み
55
+ TEST AL, 0x1; 値が書き込まれたかインプットバッファフルをチェック
56
+ JZ A20wait2; 書き込まれていない場合はループ
57
+ RET
58
+
59
+ ```
60
+ **今**
61
+ ```Assembly
62
+ MOV AX, 0x2401;A20以上有効
63
+ INT 0x15
64
+
65
+ MOV AH, 0x89;プロテクトモード有効
66
+ PUSH CODE_DESC
67
+ POP ES
68
+ MOV SI, OS32
69
+ INT 0x15
70
+ ```
71
+
72
+
3
73
  【仮想OSソフトウェア】
4
74
  Oracle VM VirtualBox
5
75
  VMware

4

特になし

2015/08/07 03:49

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
File without changes

3

仮想OSソフトウェアの内容追記

2015/08/07 00:23

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -1,5 +1,9 @@
1
1
  プロテクトモードへの移行をしたいんですが、仮想OSが重大エラーが起きて、上手くできないんです。まだ初めてばかりですので、どうかよろしくお願いします。
2
2
 
3
+ 【仮想OSソフトウェア】
4
+ Oracle VM VirtualBox
5
+ VMware
6
+
3
7
  【コンパイラ】
4
8
  nasm
5
9
 

2

現状と一部ソースの訂正

2015/08/06 12:30

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -11,6 +11,13 @@
11
11
  GDT設定済み
12
12
  A20以上有効済み
13
13
  CR0でプロテクトモード有効・・・重大エラー発生
14
+ ↓を追記して、コンパイルし、仮想OS起動すると重大エラーが起きました
15
+ ```Assembly
16
+ MOV EAX, CR0; CR0レジスタの値を読み出します
17
+ OR EAX, 1; PEビットをOR命令でONします
18
+ MOV CR0, EAX; そのままCR0に書き込みます
19
+ JMP CODE_DESC:OS32
20
+ ```
14
21
 
15
22
  【一部ソース】
16
23
  ```Assembly
@@ -148,21 +155,6 @@
148
155
 
149
156
  MOV ESP, 0x90000; スタックポインタも初期化します
150
157
 
151
- MOV EAX, 0x0000A000
152
- MOV ES, EAX
153
- MOV DI, 0
154
- XOR EAX, EAX
155
- MOV EAX, 15
156
- .looper:
157
- MOV DWORD [ES:DI], EAX
158
- INC DI
159
-
160
- CMP DI, 0xFFFF
161
- JNE .looper
162
- INC EAX
163
- HLT
164
- JMP .looper
165
-
166
158
  fin32:
167
159
  HLT
168
160
  JMP fin32

1

タイトル訂正

2015/08/06 05:39

投稿

退会済みユーザー
title CHANGED
@@ -1,1 +1,1 @@
1
- プロテクトモードへの移行
1
+ 【アセンブリ言語】プロテクトモードへの移行
body CHANGED
File without changes