Я пишу эмулятор кэша ЦП, который будет принимать размер кэша в байтах, длину каждой строки кэша в байтах и число устанавливает / группирует в кеше.
У меня есть большая часть написанного, но я часами боролся с тем, чтобы выяснить, сколько бит нужно сдвинуть влево / вправо, чтобы извлечь теги и index поля данного адреса.
Например, учитывая адрес 48 , мне нужно определить тег и индекс.
Вот что у меня есть для извлечения тега, но я почти уверен, что это неверно.
int extractTag(int address, int sets){
int bits = exp2(sets); // number of bits to shift: 2^sets
unsigned int tag;
int tag = address >> (32 - bits);
return tag;
}