|
linux(0.11)内核完全剖析, 碰到问题了
[复制链接]
p18:
当计算机复位或开机时, cpu自动将cs设为0xf000, 则其段基址被设置为0xffff0000, 段长度64k, IP设置为0xfff0, 因此代码指针指向0xfffffff0.
问题是, 通过 段基址 + IP 就可以获得指令地址, 那CS在这里起什么作用那
P31:
由于BIOS把程序加载到物理内存0x7c00处并跳转到该处时, 所有段寄存器(包括CS)默认值均为0, 即此时CS:IP = 0x0000:0x7c00, 因此这里的段间跳转语句就是为了给CS寄存器赋值0x7c0, 该语句执行后CS:IP = 0x07c0:0x0005。
相关代码:
BOOTSEG = 0x07c0
.......
jumpi go,BOOTSEG
go: mov ax, cs
........
问题:
CS和IP值为什么会这样变化, jumpi 语句怎么个执行原理。
如上贴, 加电时CS被初始化0xf000, 这里怎么又说默认值0
|
|