内核在emu8086中工作,但不在虚拟盒中使用软盘控制器

Tom*_*Tom 1 assembly kernel virtualbox bootloader emu8086

我正在编写一个简单的操作系统,我在emu8086中编写了bootloader和内核,然后我写入了软盘扇区.当我从emu内部的软盘驱动器启动时,一切正常,但是当我从虚拟机内的软盘启动时 - 它无法进行操作.

例如,以下命令获取系统日期和时间:

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
Run Code Online (Sandbox Code Playgroud)
  1. 在鸸我,我明白了 在此输入图像描述

  2. 在虚拟框中我得到了这个 在此输入图像描述

你能帮忙解决什么问题吗?

Jon*_*art 5

int 21h 是一个DOS调用.

DOS是一个操作系统.

您正在编写自己的操作系统.

在VirtualBox中,除了你的操作系统外没有加载操作系统.

如果您是唯一的操作系统,则无法调用DOS.

您可以调用BIOS服务,但通常操作系统直接与硬件通信.


如果你看标签维基emu8086,你会看到(强调我的):

8086源编辑器,汇编器,反汇编器和软件仿真器(带有MSDOS接口的虚拟PC )