Я создаю эмулятор кэша ЦП на C. Я надеялся, что вы подскажете мне, правильно ли я извлекаю эти поля:
32-битный адрес должен быть разбит следующим образом:
+---------------------------------------------------+
| tag (20 bits) | index (10 bits) | offset (2 bits) |
+---------------------------------------------------+
Вот мой код для получения значений для каждого:
void extract_fields(unsigned int address){
unsigned int tag, index, offset;
// Extract tag
tag = address >> 12;
// Extract index
index = address << 20;
index = index >> 22;
// Extract offset
offset = address << 30;
offset = offset >> 30;
}
Любой совет очень ценится!