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即为表项地址