Если список соединений создал такие имена, как IREG3_0_
, IREG3_1_
, ... IREG3_31_
, нет способа создать циклические операторы, обращающиеся к части _ NNN _. Вы могли бы также использовать IREG3_dog_
, IREG3_milk_
, ... чтобы назвать свои индексы.
Вам нужно получить список соединений, чтобы сохранить массив экземпляров, чтобы вы могли обращаться к ним как к вложенному циклу. Или вам может понадобиться написать список соединений вручную.
Читать из кэша. имейте цикл, который читает из того же (или очень похожий) адрес памяти:
Для чтения некэшируемой памяти имейте цикл, который читает от многих, очень отличающихся (т.е. далее независимо, чем размер кэша) адреса памяти.
Отвечать на Ваш второй вопрос:
Вещи, которые Вы делаете с ecx и взглядом jnz хорошо (я не знаю, насколько точный/чувствительный Ваш таймер, но Вы могли бы хотеть циклично выполниться больше чем 100 раз),
mov eax, eax
не "память чтения"... это не, который перемещает eax в eax. Вместо этого я думаю, что синтаксис MASM для чтения из памяти - что-то больше как mov eax,[esi]
("читают из ячейки памяти, адрес которой содержится в esi
")
В зависимости от того, какой O/S Вы используете, необходимо читать из адреса памяти, который на самом деле существует и читаем. В Windows, например, приложению не позволили бы сделать mov esi, 0
сопровождаемый mov eax, [esi]
потому что приложению не позволяют считать память, адрес/местоположение которой является нулем.
Отвечать на Ваш третий вопрос:
timeGetTime, GetTickCount и Счетчик производительности
Ваше упоминание timeGetTime, GetTickCount и Счетчик производительности подразумевают, что Вы работаете в соответствии с Windows.
Да, они возвращают текущее время к различным разрешениям/точности: например, GetTickCount имеет разрешение приблизительно 50 мс, таким образом, он перестал работать к событиям времени, которые длятся меньше чем 50 мс, неточно при синхронизации событий, которые длятся только 50-100 мс. Вот почему я сказал это 100
в Вашем ecx
вероятно, не является достаточно большим.
QueryPerformanceCounter
функция является, вероятно, самым точным таймером, который Вы имеете.
Использовать любой из этих таймеров как таймер интервала:
это в порядке, если я даю различные "mov" инструкции?
Да я думаю так. Я думаю, что можно сделать это как это (остерегайтесь, я не уверен/, помнят, является ли это правильным синтаксисом MASM для чтения из ячейки памяти имени)...
mov eax,[memory1]
mov eax,[memory2]
mov eax,[memory3]
mov eax,[memory4]
mov eax,[memory5]
... где memory1
через memory5
адреса широко расставленных глобальных переменных в Вашем сегменте данных.
Или, Вы могли сделать...
mov eax,[esi]
add esi,edx
mov eax,[esi]
add esi,edx
mov eax,[esi]
add esi,edx
mov eax,[esi]
add esi,edx
mov eax,[esi]
... где esi указывает на нижнюю часть длинного блока памяти, и edx является некоторым инкрементом, это равно приблизительно одной пятой длины блока.