zoukankan      html  css  js  c++  java
  • 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即为表项地址

  • 相关阅读:
    js分页的一些思考
    是时候写个自己的dialog了
    自定义幻灯片
    触屏开发技巧之——左右滑动导航
    影响网页响应的一个小习惯
    一个简单WebApp的全程
    选项卡(一个最常见的网页组件)
    REGEX
    map<虽然一直不喜欢map>但突然觉得挺好用的
    迭代器
  • 原文地址:https://www.cnblogs.com/obob/p/11679314.html
Copyright © 2011-2022 走看看