问题描述:
创建MMU的转换表,在构建每个表项时,基地址指针加上相对偏移,翻译成汇编,偏移被右移了2位,再加上基地址。
问题分析:
vaddr的高12位是段地址相对于基地址的偏移数,MMU在寻址时会根据vaddr高12位的偏移乘以4变成相对地址来找到表项的偏移地址。所以指针翻译成汇编右移2位表示的是乘以4,计算出相对于基地址的偏移地址,而不是偏移数。
unsigned long *ttb; unsigned long vaddr; ttb = ttb + (vaddr >> 20); ldr r3, [fp, #-12] lsr r3, r3, #20 lsl r2, r3, #2 ldr r3, [fp, #-16] add r3, r3, r2 str r3, [fp, #-16]
时间: 2024-10-30 22:43:55