ucore学习笔记

Lab0

AT&T汇编

常用寄存器

  %esp堆栈指针寄存器

  %ebp基址寄存器

  %eip指令寄存器

基本语法

  源操作数在前,目的操作数在后:

  movl %eax,%ebx

GCC内联汇编

asm [volatile] ( Assembler Template

   : Output Operands

   [ : Input Operands

   [ : Clobbers ] ]

)

其中%0表示第一个输出变量,%n-1表示第一个输入变量

Lab1

bootloader做的事情

1.使能保护模式&段机制

(A20使能,加载段描述符表LGDT,设置GDTR,CR0置位)

2.从硬盘上读取kernel in ELF格式的ucore kernel并放到内存中固定位置

3.跳转到ucore OS的入口点处执行

全局描述符表GDT

GDT表的地址由GDTR指示

跟踪函数调用栈

c语言的栈从高地址向低地址增长

栈区主要是局部变量

堆区是动态分配空间,如malloc

静态区是全局变量和静态变量

其中函数栈结构大致如下:

 上一层的ebp由ebp指示,上一层的eip是[ebp+4]

中断描述符表IDT(保护模式下的中断向量表)

中断描述符表一个表项占8字节

其中0~15位和48~63位分别为offset的低16位和高16位

16~31位为段选择子

通过段选择子在GDT中查找获得段基址,加上段内偏移量即可得到中断处理代码的入口

IDTR指示IDT基址,由于IDT表项占8字节,所以IDT.base+trapno*8即为表项地址

原文地址:https://www.cnblogs.com/obob/p/11679314.html