如何执行cpu 第一条指令

2025-02-24 14:30:26
推荐回答(1个)
回答1:

CPU将执行cs:ip指定的第一条指令,看看前面的复位代码可知此时CS值为Selector = F000HBase = FFFF0000HLimit = FFFFHAR = Present, R/W,Accessed而EIP的值则为0000FFF0H。由于此时CPU工作在实模式,因而第一条指令地址CS:IP指向的位置为FFFF0H,也就是UMA临近结尾的位置。之所以选择这个位置是因为,这样就不会引起由于ROM的大小改变而造成的兼容性问题。既然FFFF0h到UMA结束的位置之后只有16个字节,所以这里只放置着一个Jump指令,以进一步跳转到真正的BIOS startup program的位置。(不同的BIOS厂商可以将其放在不同的位置,只需要通过Jump指定就可以了)。QEMU提供了一个bios.bin的文件,我们使用objdump将之反汇编出来:objdump –D –b binary –m i386 bios.bin > bios.txt由于bios.bin这个文件为128K且被写入UMA的最后128K的位置,因此FFFF0H位置的代码相当于bios.bin文件中的最后16个字节: 1fff0: ea 5b e0 00 f0 30 35 ljmp $0x3530,$0xf000e05b