问题
- 执行make lab1-mon 后貌似无法自动执行tools/lab1init

解决:
重开一个gdb 改为手动
练习三
- 为何开启A20,如何开启?
为了将实模式转换成保护模式
将键盘控制器上的A20线置于高电位,全部32条地址线可用。
movb $0xdf,%al
outb %al,$0x60
- 如何初始化GDT
一个简单的GDT表和其描述符已经静态存储在引导区中,载入即可。
lgdt gdtdesc
- 如何使能 和 进入保护模式
将cr0寄存器PE位 置1便开启了保护模式
movl %cr0,%eax
orl $CR0_PE_ON,%eax
movl %eax,%cr0
通过长跳转更新cs的基地址
ljmp $PROT_MODE_CSEG, $protcseg
.code32
protcseg:
设置段寄存器,并建立基栈
movw $PROT_MODE_DSEG, %ax
movw %ax, %ds
movw %ax, %es
movw %ax, %fs
movw %ax, %gs
movw %ax, %ss
movl $0x0, %ebp
movl $start, %esp
操作指令
next 单步到程序源代码的下一行,不进入函数。
nexti 单步一条机器指令,不进入函数。
step 单步到下一个不同的源代码行(包括进入函数)。
stepi 单步一条机器指令。
define hook-stop
x/i $pc
end
练习四
- bootloader如何读取硬盘扇区的?
- bootloader是如何加载ELF格式的OS?