2016-12-12 5 views
1

私は単純なOSを書いています。emu8086でブートローダーとカーネルを書いてフロッピーセクタに書き込みました。エミュのフロッピードライブから起動すると、すべて正常に動作しますが、フロッピーから仮想ボックス内で起動すると操作ができなくなります。たとえば、次のコマンドは、システムの日付と時刻を取得カーネルはemu8086で動作しましたが、フロッピーコントローラのバーチャルボックスでは動作しません

:エミューで

infoCommand: 
lea si, info_msg 
call printString 

;Day Part 
mov ah, 2Ah ; To get System Date 
int 21h 
mov al, dl ; Day is in DL 
aam 
mov bx, ax 
call disp 

mov dl, '/' 
mov ah, 02h ; To Print/in DOS 
int 21h 

;Month Part 
mov ah, 2Ah ; To get System Date 
int 21h 
mov al, dh  ; Month is in DH 
aam 
mov bx, ax 
call disp 

mov dl, '/' 
mov ah,02h ; To Print/in DOS 
int 21h 

;Year Part 
mov ah, 2Ah ; To get System Date 
int 21h 
add cx, 0F830h ; To negate the effects of 16bit value, 
mov ax, cx  ; since AAM is applicable only for AL (YYYY -> YY) 
aam 
mov bx, ax 
call disp  

mov dl, ' ' 
mov ah,02h ; To Print '' in DOS 
int 21h 

;Hour Part 
mov ah, 2Ch ; To get System Time 
int 21h 
mov al, ch  ; Hour is in CH 
aam 
mov bx,ax 
call disp 

mov dl, ':' 
mov ah,02h ; To Print : in DOS 
int 21h 

;Minutes Part 
mov ah, 2Ch ; To get System Time 
int 21h 
mov al, cl  ; Minutes is in CL 
aam 
mov bx, ax 
call disp 

mov dl, ':' 
mov ah,02h ; To Print : in DOS 
int 21h 

;Seconds Part 
mov ah, 2Ch ; To get System Time 
int 21h 
mov al, dh  ; Seconds is in DH 
aam 
mov bx,ax 
call disp 

ret 

;Display Part 
disp proc 
mov dl, bh  ; Since the values are in BX, BH Part 
add dl, 30h  ; ASCII Adjustment 
mov ah, 02h  ; To Print in DOS 
int 21h 
mov dl, BL  ; BL Part 
add dl, 30h  ; ASCII Adjustment 
mov ah, 02h  ; To Print in DOS 
int 21h 
ret 
disp endp  ; End Disp Procedure 
  1. を私は仮想ボックス内のこの enter image description here

  2. を取得し、私はこのenter image description here

を取得

あなたは何を手助けできますか?間違っている?

答えて

5

int 21hはDOS呼び出しです。

DOSはオペレーティングシステムです。

独自のオペレーティングシステムを作成しています。

VirtualBoxには、自分以外のOSはロードされていません。

唯一のOSであれば、DOSを呼び出すことはできません。

BIOSサービスを呼びますが、一般にオペレーティングシステムはハードウェアと直接通信します。


あなたがemu8086のタグのwikiを見れば、あなたは(強調鉱山)を参照してくださいよ:MSDOSと

8086ソースエディタ、アセンブラ、逆アセンブラ、およびソフトウェアエミュレータ(仮想PC インタフェース

関連する問題