Я знаю, что jnc указывает, что мы выйдем из этого цикла, когда не будет переполнения переноса, т.е. CF = 0.
blockquote>Это не правильно.
JNC
будет прыгать, если CF = 0, что означает, что он будет прыгать, если нет беззнакового переполнения .Поскольку si должен указывать на индекс первого элемента списка, не будет ли это 80h? И затем, если si увеличивается, оно должно указывать на 70h. После их сложения ответ должен быть F0, верно?
blockquote>Пока да.
Однако, когда я запускаю кусок кода, я получаю значение AL равным 50. Как это возможно?
blockquote>
Чего мне не хватает?Возвращаемое значение 50h равно
80h + 70h + 60h = 50h + CARRY flag (unsigned overflow).
Пошагово это
80h + 70h = F0h (CF = 0 = JUMP) F0h + 60h = 50h (CF = 1 = NO JUMP = EXIT LOOP)
Таким образом, последнее добавление устанавливает флаг CARRY в
1
из-за переполнения без знака с FFh до 00h (F0h + 0Fh до F0h + 10h (и, наконец, 60h - 10h = 50h)). Поскольку флаг CARRY установлен, условный переходJNC
проходит, иAL
содержит значение «переполнения», равное 50h.
Для данных о каждом процессе:
Process p = /*get the desired process here*/;
PerformanceCounter ramCounter = new PerformanceCounter("Process", "Working Set", p.ProcessName);
PerformanceCounter cpuCounter = new PerformanceCounter("Process", "% Processor Time", p.ProcessName);
while (true)
{
Thread.Sleep(500);
double ram = ramCounter.NextValue();
double cpu = cpuCounter.NextValue();
Console.WriteLine("RAM: "+(ram/1024/1024)+" MB; CPU: "+(cpu)+" %");
}
Счетчик производительности также имеет другие счетчики, кроме Working set и Processor time.
Я думаю, вы хотите Инструментарий управления Windows.
РЕДАКТИРОВАТЬ: См. Здесь:
Измерение использования процессора и оперативной памяти процесса