mini2440汇编实例--mmu

head.S

init.S

这里需要注意的是MMU通过Translation base和table index(即MVA的高12位)找到段描述符,从而找到物理地址,Translation base占[31:14],table index占[13:2],后两位是0,所以就有了str  r4,  [r1, r3, lsl #2]这种写法,其中r4为段描述符,r1为translation base,r3位MVA的高12位,而C语言里的写法是这样的 *(ttb_base + (virtaladdr >> 20)) = (physicaladdr & 0xFFF00000) | SEC,这里表面上看不到左移两位的操作,其实已经包含了移位的操作,ttb_base是unsigned long类型的,这样一个指针移动1个位置就是4个字节,就相当于左移了2位,*(ttb_base + 1)就相当于(unsigned char*)ttb_base + 1 << 2

猜你喜欢

转载自blog.csdn.net/tracing/article/details/6415893