内核学习日志(第1周)

文章目录

    • 06.14
    • 06.15
    • 06.16
    • 06.17
    • 06.18

06.14

1. 简述: 昨天和今天看完了 pdf 第一章实模式的内容。
2. Notes:

  1. .s 文件 -(as 汇编器、ld 链接器)-> .bin(可执行文件)。
  2. 伪指令:对于汇编过程进行控制的指令,非可执行指令,没有机器代码,不占用 ROM 空间。
  3. bootsect.bin 大小为 512B,位于第一扇区,硬盘大小为 1MB。
  4. 指令/数据的物理地址=代码/数据的物理段起始地址+偏移地址。
  5. 代码段寄存器 cs,机器指令偏移地址寄存器 ip。[cs:ip]保存了 cpu 下一条需要从物理内存读取的机器指令的逻辑地址。
  6. bochsrc.bxrc:bochs启动配置文件。
  7. 在实模式下,cpu 最多能访问 1MB 内存空间,因为地址线 20 根。
  8. BIOS 占用物理空间:0xC0000~0xFFFFF,cpu 加电运行的第1条机器指令的物理地址位于0xFFFF0。
  9. BIOS 任务: 检测硬件、创建中断系统、将引导扇区内容拷贝到内存、CS:IP=0x0:0x7C00。
  10. x86 架构中,物理内存中存放数据使用小端模式,低位低地址。
  11. 符号。= 符号表示后面的数字;:表示后面的汇编语句对应的机器指令数据在可执行文件中的偏移地址;. 当前汇编语句对应的机器指令。
  12. 一个物理地址可以由多个逻辑地址计算得到。
  13. ljmp 为 [cs:ip] 赋值,寄存器前加 %。
  14. ds 数据段寄存器,保存数据段始址。
  15. es 数据段寄存器。
  16. 中断处理程序需要借助预先设置好的寄存器中的值来发挥功能。
  17. 寄存器 ah:0x13 表示向屏幕打印字符串。寄存器 [es:bp]:保存字符串的首字符在数据段中的逻辑地址。寄存器 cx:保存字符串的长度。寄存器 (dh,dl):字符串在屏幕上的起始坐标,其中寄存器 dh 为行号(0~24),dl 为列号(0~79)。
  18. 寄存器 al、bl 相互配合保存字符属性。
  19. mov 作用是给寄存器赋值。mov+b\w\l,(1)数据在寄存器中。movw %ax, %es (2)数据在机器指令中。movw $msg, %bp 将msg的值赋给寄存器bp。(3)数据在内存中。movw msg_len, %cx cpu 将数据的逻辑地址转换为物理地址后,通过物理地址从物理内存中读取数据。数据的逻辑地址中的段始址右移四位的值默认保存在数据段寄存器 ds 中,数据的逻辑地址中的偏移地址通常由机器指令提供。
  20. 实模式下每个中断向量程序入口长度4B,最多支持256个中断处理程序。
  21. jmp 汇编指令只给寄存器 ip 赋值。可构造死循环。
  22. 在将引导扇区拷贝到内存时,BIOS 会检查此512B程序的最后两个字节的值是不是 0x55和0xaa。

3. 存在的问题: 到目前为止,环境还未搭建完毕;作业还未写。

  • 实模式下的逻辑地址计算原理?cpu为什么能访问1MB内存?
  • BIOS 中断处理程序、显存区域、中断向量表常驻内存?
  • 小端模式为什么不适合 1 字节数据?

4. 明天打算: 搭建完毕虚拟机;做完第一章作业;总结完毕笔记。

# bochs 断点调试
vb 0x0:0x7c00 使用逻辑地址
b 0x7c00 使用物理地址
u /5 打印5条 cpu 即将运行的机器指令。(机器指令的物理地址 对应的汇编指令 机器指令的二进制内容)
xp /2bx 0x7dfe 命令查看物理内存中的指定物理地址的内容, b、h(单位为2字节)、w(单位为4字节)、c(显示 ASCII字符)。
n cpu运行一条机器指令后,停止并等待输入新的命令。

06.15

1. 简述: 搭建完了环境;做完了第一章题?,
2. Notes:

  1. linux 下的换行符号:\r\n。
  2. 可以通过链接语句中的 -Ttext=0参数来调整第一条机器指令的偏移地址。
  3. BIOS在讲引导扇区中的可执行文件拷贝到物理内存前,会检查引导扇区最后两个字节的值。

3. 存在的问题:

4. 明天打算: 看第二章内容;将第一章作业写完

06.16

1. 简述: 看第二章内容;做第一章留的尾巴
2. Notes:

3. 存在的问题:

  • 不知道怎么使用 mov 指令将字节数据紧凑排列。
    mov $0x68, 0x80

4. 明天打算: 看第二章内容;做题。

06.17

1. 简述: 看完了第二章;开始做了第一题。
2. Notes:

3. 存在的问题:

  • 段地址和虚拟地址的联系?

4. 明天打算: 做第二章题。

06.18

1. 简述: 做了第二章题。
2. Notes:

3. 存在的问题:

  • 显示显存中的数据,\r\n无法显示?

4. 明天打算: 做完第二章题。

你可能感兴趣的:(内核学习日志(第1周))