内核在 emu8086 中工作,但在带有软盘控制器的虚拟盒子中不工作
Kernel worked in emu8086 but not in virtual box with floppy controller
我在写一个简单的OS,我把bootloader和kernel写在emu8086里面,然后写到软盘扇区。当我从emu中的软驱启动时,一切正常,但是当我从virtual box中的软驱启动时,它无法运行。
例如,以下命令获取系统日期和时间:
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
在 emu 中我得到了这个
在虚拟框中我得到这个
你能帮忙解决问题吗?
int 21h
是 DOS 调用。
DOS是操作系统。
您正在编写自己的操作系统。
在 VirtualBox 中没有 OS 加载,除了你的。
如果你是唯一的 OS,你不能打电话给 DOS。
您调用 BIOS 服务,但通常操作系统直接与硬件对话。
如果您查看 emu8086
的标签 wiki,您会看到(强调我的):
8086 source editor, assembler, disassembler, and software emulator (a virtual PC with MSDOS Interface)
我在写一个简单的OS,我把bootloader和kernel写在emu8086里面,然后写到软盘扇区。当我从emu中的软驱启动时,一切正常,但是当我从virtual box中的软驱启动时,它无法运行。
例如,以下命令获取系统日期和时间:
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
在 emu 中我得到了这个
在虚拟框中我得到这个
你能帮忙解决问题吗?
int 21h
是 DOS 调用。
DOS是操作系统。
您正在编写自己的操作系统。
在 VirtualBox 中没有 OS 加载,除了你的。
如果你是唯一的 OS,你不能打电话给 DOS。
您调用 BIOS 服务,但通常操作系统直接与硬件对话。
如果您查看 emu8086
的标签 wiki,您会看到(强调我的):
8086 source editor, assembler, disassembler, and software emulator (a virtual PC with MSDOS Interface)