Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly 部件进入保护模式并跳回真实模式_Assembly_Kernel_Nasm_X86 16_Bootloader - Fatal编程技术网

Assembly 部件进入保护模式并跳回真实模式

Assembly 部件进入保护模式并跳回真实模式,assembly,kernel,nasm,x86-16,bootloader,Assembly,Kernel,Nasm,X86 16,Bootloader,我正在汇编中开发一个玩具操作系统,从保护模式切换回真实模式时遇到问题。我已经成功地切换到受保护模式,称为内核,它将文本写入[0xb8000]视频内存,返回给调用者,并(可能)切换回实模式。我正在尝试从实模式使用bios中断,这样我就不必编写自己的设备驱动程序 然而,在切换回实模式后,中断似乎不会被执行。 它们不会像在保护模式下那样使系统崩溃,所以我想我是在真实模式下 minrep.asm(引导加载程序) minrep_st2.asm(stage2,输入prot并返回real) 如何编译: nas

我正在汇编中开发一个玩具操作系统,从保护模式切换回真实模式时遇到问题。我已经成功地切换到受保护模式,称为内核,它将文本写入[0xb8000]视频内存,返回给调用者,并(可能)切换回实模式。我正在尝试从实模式使用bios中断,这样我就不必编写自己的设备驱动程序

然而,在切换回实模式后,中断似乎不会被执行。 它们不会像在保护模式下那样使系统崩溃,所以我想我是在真实模式下

minrep.asm(引导加载程序)

minrep_st2.asm(stage2,输入prot并返回real)

如何编译:

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'