+ -
当前位置:首页 → 问答吧 → !!!!!问各位高手一个 linux 引导代码中的问题!

!!!!!问各位高手一个 linux 引导代码中的问题!

时间:2011-05-06

来源:互联网

代码中声明下面四个常量

#define CL_MAGIC_ADDR 0x90020
#define CL_MAGIC 0xA33F
#define CL_BASE_ADDR 0x90000
#define CL_OFFSET 0x90022

应用这四个定义的语句片段在这里(我最不明白有就是第一句,请高手帮我):

cmpw $(CL_MAGIC),CL_MAGIC_ADDR /* 我不明白这句到底是什么含意,比较的结果到底能说明什么? */
jne 1f
movl $_empty_zero_page+2048,%edi
movzwl CL_OFFSET,%esi 
addl $(CL_BASE_ADDR),%esi
movl $2048,%ecx
rep
movsb
  1:


作者: mjznet   发布时间: 2011-05-06

等同于:cmpw $0xA33F,CL_MAGIC_ADDR
就是比较$0xA33F和内存地址[0x90020]中一个字的内容值的大小
这里的寻址方式为直接寻址方式

作者: RobustWangAce   发布时间: 2011-05-06

感谢楼上的热心回答,这句话的语义我知道,我是想知道这句话的含意?比较的结果到底能说明什么? 
不知道我意思你明白没,再举个例子吧。比如下面:
movl $0x90000,%esi
movl $_empty_zero_page,%edi
movl $512,%ecx
cld
rep
movsl
这几条语句的语义我都知道,整段的语义也知道是:将0x90000处开始的2K字节复制到_empty_zero_page开始的内存。而这几句的含意是:0x90000处保存的引导参数,这几句就是将引导参保存在_empty_zero_page处。
等待高手!

作者: mjznet   发布时间: 2011-05-06