Assembly 部件进入保护模式并跳回真实模式
我正在汇编中开发一个玩具操作系统,从保护模式切换回真实模式时遇到问题。我已经成功地切换到受保护模式,称为内核,它将文本写入[0xb8000]视频内存,返回给调用者,并(可能)切换回实模式。我正在尝试从实模式使用bios中断,这样我就不必编写自己的设备驱动程序 然而,在切换回实模式后,中断似乎不会被执行。 它们不会像在保护模式下那样使系统崩溃,所以我想我是在真实模式下 minrep.asm(引导加载程序) minrep_st2.asm(stage2,输入prot并返回real) 如何编译:Assembly 部件进入保护模式并跳回真实模式,assembly,kernel,nasm,x86-16,bootloader,Assembly,Kernel,Nasm,X86 16,Bootloader,我正在汇编中开发一个玩具操作系统,从保护模式切换回真实模式时遇到问题。我已经成功地切换到受保护模式,称为内核,它将文本写入[0xb8000]视频内存,返回给调用者,并(可能)切换回实模式。我正在尝试从实模式使用bios中断,这样我就不必编写自己的设备驱动程序 然而,在切换回实模式后,中断似乎不会被执行。 它们不会像在保护模式下那样使系统崩溃,所以我想我是在真实模式下 minrep.asm(引导加载程序) minrep_st2.asm(stage2,输入prot并返回real) 如何编译: nas
nasm.bat minrep.asm -o disk_p1.bin
nasm minrep_st2.asm -o disk_p2.bin
copy /b disk_pt1.bin + disk_pt2.bin disk.img
call qemu disk.img
编辑:
如果我这样做只是为了保护,那么在实模式下移动到0xb800会清除第一个字符,但无法正确打印(空白字符而不是字节“Z”)
sti后的打印字符“Z”将继续:
mov ax, 0xb800;
mov es, ax;
mov [es:0000], byte 'Z'
评论不用于扩展讨论;这段对话已经结束。
nasm.bat minrep.asm -o disk_p1.bin
nasm minrep_st2.asm -o disk_p2.bin
copy /b disk_pt1.bin + disk_pt2.bin disk.img
call qemu disk.img
[ bits 16 ]
cli
switch_to_pm:
lgdt [ gdt_descriptor ]
mov eax , cr0
or eax , 0x1
mov cr0 , eax
jmp CODE_SEG:init_pm
[ bits 32 ]
init_pm:
mov ax, 0xb800;
mov es, ax;
mov [es:0000], byte 'Z'