如何在汇编中制造指令Cache冲突?(基于2路组相联Cache)
Cache参数说明
- 默认Cache大小:4 KB
- 行大小:32字节
- 地址位划分:
- 组数:Cache大小/(2×行大小)(因采用2路组相联Cache,故乘以2)= 4096/(2×32) = 64组
- 偏移位:行大小为32B,故需5位偏移位
- 组索引:共64组,故需6位组索引
- 标签位:剩余21位为标签位
需求说明
我希望访问多个映射到指令Cache同一组的不同地址,当访问第三个地址时,能触发其他Cache行的替换!
已尝试的汇编代码
#Loop to repeat accesses li x3, 0 la t0, jump_inst_set_0 la t1, jump_inst_set_1 la s1, jump_inst_set_0_1 la t2, wfi_label jalr t0 skip_wfi: addi s0, s0, 1 jal wfi_label addi x3, x3, 1 li x4, 5 bne x3, x4, repeat exit_tst .org 0x3000 .align 2 jump_inst_set_0: jr t1 .org 0x4000 .align 2 jump_inst_set_1: jr s1 .org 0x5000 .align 2 jump_inst_set_0_1: jr t2 .org 0x6000 .align 2 wfi_label: beq s0, x0, skip_wfi add x0, x0, x0 ret
实现思路
通过设置符合地址映射规则的内存地址,访问这些地址以触发Cache冲突。
内容的提问来源于stack exchange,提问作者Muhammad Zahid iqbal
相关产品推荐
相关产品推荐

