小结
本章的内容到此结束。
由于我们跳过了一些专题,启动代码中仍有一些未解之谜,但它的神秘面纱已经揭开,这是一个好的开始。
最后,给出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的高byte清0
0824 rts pc /返回
【注】:fubyte/ fuword用来get数据,即将previos空间的数据搬运到current空间(kernel态)中来。
相应的还有subyte/ suword,他们用来set数据,即将current空间(kernel态)的数据搬运到
previos空间中去。
博客地址: http://blog.youkuaiyun.com/cszhao1980
博客专栏地址:http://blog.youkuaiyun.com/column/details/lions-unix.html