- 论坛徽章:
- 0
|
我选的是grub0.93,假设启动盘是默认的硬盘启动,且支持lba寻址,
问题一:
读stage1时,有这么一句
lba_mode:
/* save the total number of sectors */
movl 0x10(%si), %ecx
则ecx=?,the total numbers of sectors 作何解?,有何用处?
问题二:
stage1把控制权交给了stage2中的start.s后,假设设置了stage1_5,继续往下读,此时start.s已被加载到0x8000处,由此开始执行#ifdef STAGE1_5
# define ABS(x) (x-_start+0x2000)
#else
# define ABS(x) (x-_start+0x8000)
#endif /* STAGE1_5 */
#define MSG(x) movw $ABS(x), %si; call message
这段等效为define ABS(x) (x-_start+0x2000)
执行到MSG(notification_string),问题出来了,movw$ABS(notification_string),%si;call message;
等效为movw$(notification_string-_start+0x2000),%si;call message;
我们知道此时notification的绝对地址应当是notification_srting-_start+0x8000才对啊?望大牛解答不胜感激!附件有grub0.93源码
[ 本帖最后由 chin09 于 2009-9-29 08:16 编辑 ] |
|