Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.06.2012, 12:49   #1
petrae
Новичок
Джуниор
 
Регистрация: 09.06.2012
Сообщений: 3
По умолчанию Кэш: определить размер кэша данных первого уровня

Для этого необходимо-то сделать следующее:
mov eax, 80000005h
cpuid
shr ecx, 24
mov rez, ecx

Но почему-то упорно возвращается ноль. При этом, со вторым уровнем все в порядке, законные 2048 Кб:
mov eax, 80000006h
cpuid
shr ecx, 16
mov rez, ecx

В чем может быть проблема?
petrae вне форума Ответить с цитированием
Старый 09.06.2012, 13:16   #2
veniside
Старожил
 
Регистрация: 03.01.2011
Сообщений: 2,508
По умолчанию

Цитата:
mov eax, 80000005h
это только для amd, для Intel по-другому


Цитата:
mov eax, 80000006h
а вот это да, и там и там примерно одинаково
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
veniside вне форума Ответить с цитированием
Старый 09.06.2012, 16:21   #3
f.hump
C/C++, Asm
Участник клуба
 
Аватар для f.hump
 
Регистрация: 02.03.2010
Сообщений: 1,323
По умолчанию

на Intel CPUID:80000005
Цитата:
the function is reserved
надо вызвать CPUID:04 с ECX = 0, 1, 2, ... до тех пор пока (EAX & 0F) != 0


Цитата:
Cache size in bytes = (Ways + 1)*(Partitions + 1)*(Line Size + 1) *(Sets +1)
(EBX[31:22] + 1)*(EBX[21:12] + 1)*(EBX[11:0] + 1)*(ECX + 1)
Intel
f.hump вне форума Ответить с цитированием
Старый 09.06.2012, 18:18   #4
petrae
Новичок
Джуниор
 
Регистрация: 09.06.2012
Сообщений: 3
По умолчанию

Спасибо большое!
Теперь возникла новая проблема, уж извините
Чтобы получить значение в EBX[31:22], нужно просто сдвинуть вправо на 22, так ведь? А вот дальше сложнее...
Для EBX[21:12] надо
shl ebx, 10
shr ebx, 22?
А для EBX[11:0] надо так
shl ebx, 20
shr ebx, 20?

Ассемблер хоть и изучался, но был мною отвергнут, к сожалению, поэтому и возникают такие глупые вопросы
petrae вне форума Ответить с цитированием
Старый 09.06.2012, 18:21   #5
petrae
Новичок
Джуниор
 
Регистрация: 09.06.2012
Сообщений: 3
По умолчанию

Большое спасибо!
petrae вне форума Ответить с цитированием
Старый 10.06.2012, 12:00   #6
f.hump
C/C++, Asm
Участник клуба
 
Аватар для f.hump
 
Регистрация: 02.03.2010
Сообщений: 1,323
По умолчанию

можно и так.

да, и еще полезно EAX проверять, там тип и уровень кеша возвращается:

EAX[4:0] - тип
0 - Null
1 - Data
2 - Instruction
3 - Unified
4-31 - Reserved

EAX[7:5] - уровень
f.hump вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Кэш-память машины - как определить? Mixim C# (си шарп) 1 01.03.2012 14:50
без массива определить сколько положительных чисел встречается до первого отрицательного числа narco3 Помощь студентам 1 02.10.2011 12:05
Определить количество букв первого слова в предложении. Задача почти сделана, нужно подредактиров MonStar Помощь студентам 1 25.11.2010 23:17
Определить размер типа TType = (a, b, c) TwiX Общие вопросы Delphi 1 03.11.2010 11:08
Определить размер Pipe IceBreaker Помощь студентам 4 04.02.2010 18:28