Merge pull request #176 from losemyheaven/master

拼写错误 让后将大小 改为 然后将大小
This commit is contained in:
Dongliang Mu
2018-02-15 14:14:34 -05:00
committed by GitHub
2 changed files with 3 additions and 3 deletions

View File

@@ -440,7 +440,7 @@ BSS 段用来存储那些没有被初始化的静态变量。对于这个段使
rep; stosl
```
在这段代码中,首先将 [__bss_start](http://lxr.free-electrons.com/source/arch/x86/boot/setup.ld?v=3.18#L47) 地址放入 `di` 寄存器,然后将 `_end + 3` 4字节对齐 地址放入 `cx`,接着使用 `xor` 指令将 `ax` 寄存器清零,接着计算 BSS 段的大小 `cx` - `di` 后将大小放入 `cx` 寄存器。接下来将 `cx` 寄存器除4最后使用 `rep; stosl` 指令将 `ax` 寄存器的值0写入 寄存器整个 BSS 段。 代码执行完成之后,我们将得到如下图所示的 BSS 段:
在这段代码中,首先将 [__bss_start](http://lxr.free-electrons.com/source/arch/x86/boot/setup.ld?v=3.18#L47) 地址放入 `di` 寄存器,然后将 `_end + 3` 4字节对齐 地址放入 `cx`,接着使用 `xor` 指令将 `ax` 寄存器清零,接着计算 BSS 段的大小 `cx` - `di` 后将大小放入 `cx` 寄存器。接下来将 `cx` 寄存器除4最后使用 `rep; stosl` 指令将 `ax` 寄存器的值0写入 寄存器整个 BSS 段。 代码执行完成之后,我们将得到如下图所示的 BSS 段:
![bss](http://oi59.tinypic.com/29m2eyr.jpg)

View File

@@ -124,7 +124,7 @@ static inline bool heap_free(size_t n)
首先函数初始化一个类型为 `biosregs` 的变量,将其中的 `AH` 寄存器内容设置成 `0x3`,然后调用 `0x10` BIOS 中断。当中断调用返回之后,`DL``DH` 寄存器分别包含了当前光标的行和列信息。接着这2个信息将被保存到 `boot_params.screen_info` 字段的 `orig_x``orig_y`字段。
`store_cursor_position` 函数执行完毕之后,`store_mode_params` 函数将调用 `store_vide_mode` 函数将当前使用的显示模式保存到 `boot_params.screen_info.orig_video_mode`
`store_cursor_position` 函数执行完毕之后,`store_mode_params` 函数将调用 `store_video_mode` 函数将当前使用的显示模式保存到 `boot_params.screen_info.orig_video_mode`
接下來 `store_mode_params` 函数将根据当前显示模式的设定,给 `video_segment` 变量设置正确的值(实际上就是设置显示内存的起始地址)。在 BIOS 将控制权转移到引导扇区的时候,显示内存地址和显示模式的对应关系如下表所示:
@@ -392,7 +392,7 @@ outb(0xff, 0xa1); /* Mask all interrupts on the secondary PIC */
outb(0xfb, 0x21); /* Mask all but cascade on the primary PIC */
```
这个函数调用激活主和从中断控制器 (Programmable Interrupt Controller)上的中断,唯一的例外是主中断控制器上的级联中断所有从中断控制器的中断将通过这个级联中断报告给 CPU )。
这个函数调用屏蔽了从中断控制器的所有中断和主中断控制器上除IRQ2以外的所有中断IRQ2是主中断控制器上的级联中断所有从中断控制器的中断将通过这个级联中断报告给 CPU )。
到这里位置,我们就完成了所有的准备工作,下面我们就将正式开始从实模式转换到保护模式。