(莱昂氏unix源代码分析导读-17)系统初启(10)

小结

本章的内容到此结束。

由于我们跳过了一些专题,启动代码中仍有一些未解之谜,但它的神秘面纱已经揭开,这是一个好的开始。

 

最后,给出fuibyte(0)的分析结果:

0814 _fuibyte:

0815 _fubyte:

0816 mov 2(sp),r1            /参数(输入地址)--->r1

0817 bic $1,r1                 /r1低位清0,即

                                        /如果输入地址为奇数地址,则地址 =地址-1

 

0818 jsr pc,gword           /调用gword

                                        /gword会取r1地址指向的word,通过r0返回

                                        /书中有详细的分析,我就不再赘述了

 

0819 cmp r1,2(sp)           /比较r1和输入参数:

0820 beq 1f                     /r1和输入参数相同,证明r0的低byte就是我们想要的值,跳到标号1

0821 swab r0                 /否则,证明r0的高byte是我们想要的值,于是swab r0的高低byte

 

0822 1:   

0823 bic $!377,r0             /现在,r0的低byte是我们想要的,故将r0的高byte0

0824 rts pc                     /返回

 

【注】:fubyte/ fuword用来get数据,即将previos空间的数据搬运到current空间(kernel态)中来。

               相应的还有subyte/ suword,他们用来set数据,即将current空间(kernel态)的数据搬运到

                previos空间中去。

博客地址: http://blog.csdn.net/cszhao1980

博客专栏地址:http://blog.csdn.net/column/details/lions-unix.html

 

你可能感兴趣的:(unix,byte,代码分析)