Программирование на Ассемблере


         

числа сравниваются, начиная со старшей


lea       edi, [edi + ecx*4-4]
std
repe     cmpsd
jb         short m11; x[i]< y[i]
ja         short m12; x[i]> y[i]
sub       eax, eax
m11:
mov     eax, -1
jmp      short m13
m12:
mov     eax, 1
m13:
cld
pop      edi esi ecx ebp
Ret       12
Endp
end begin
Заметим, что «цифры» числа сравниваются, начиная со старшей цифры. Каждая цифра сравнивается как беззнаковое число. Сравнение продолжается до тех пор, пока найдем разные цифры или не сравним все цифры числа.
Обратите внимание на новые команды для определения количества тактов для выполнения функций. Команда RDTSC (Read Time-stamp counter) - выполняется для процессоров, начиная с PENTIUM MMX и возвращает в регистре EAX
Чтобы определить, поддерживается ли данная команда для процессора, используется команда CPUID—CPU Identification
Эта команда также позволяет определить производителя процессора, семейство, которому он принадлежит, модел и версии, а также другую информацию. Для определения типа выдаваемой информации используется регистр EAX ( табл 11.3). Команда CPUID может выполняться для любого уровня привилегий.
Таблица 11.3


















Входные данные

Выходные данные

EAX = 0

EAX – максимальное значение, которое можно задавать на входе (обычно 2)
EBX, EDX, ECX – производитель – Для PENTIUM строка «GenuineIntel» распределена так: EBX  ?756e6547h (* "Genu", буква G в BL *)
EDX  ?49656e69h (* "ineI", буква i в -DL *)
ECX  ?6c65746eh (* "ntel", буква  n в CL *)

EAX = 1

EAX – версия процессора (тип, семейство, модель, step)
EBX - резерв
ECX- резерв
EDX – информация об особенностях процессора

EAX = 2

EAX –информация о кэше
EBX -–информация о кэше
ECX- –информация о кэше
EDX – –информация о кэше

Рассмотрим содержимое только некоторых битов регистра EDX:
23 – поддерживается MMX – технология;
18 – процессор поддерживает 96 битный уникальный номер процессора.
4 – поддерживается команда RDTSC
Пример 4. Составить функцию, которая возвращает ответ 1, если команда RDTSC поддерживается и 0 в противном случае.
ideal
p686
model   flat
extrn ExitProcess:proc
dataseg
res       dd        ?
codeseg
begin:
call      IsReadCount
mov     [res], eax
call ExitProcess
proc     IsReadCount
mov     eax, 1
cpuid
mov     eax, 1
test       edx, 1 shl 4
jnz        short m1
sub       eax, eax
m1:
Ret      
Endp
end begin

Содержание  Назад  Вперед