C
Pentium+ CPUID Идентификация процессора
Команда cpuid позволяет получить код идентификации процессора, установленного на данном компьютере. Команда в качестве неявного операнда использует регистр ЕАХ. Для процессоров Pentium регистр ЕАХ перед вызовом команды cpuid может принимать два значения: 0 и 1. Если ЕАХ=0, то команда возвращает в регистре ЕАХ код 1, а в регистрах ЕВХ, EDX и ЕСХ (именно в таком порядке) – три части символьной строки, идентифицирующей изготовителя процессора. Для процессоров Intel возвращаемая строка в целом имеет вид "Genumclatcl".
Если перед вызовом команды cpuid значение ЕАХ равно 1, то команда возвращает в регистре ЕАХ коды разработки конкретной версии процессора, а в регистре EDX код IBFli, содержащий информацию о возможностях процессора.
Коды разработки в регистре ЕАХ хранятся в следующем формате:
- биты 0… 3 – номер поколения (например, 3);
- биты 4… 7 – модель (например, 4);
- биты 8… 11 – семейство (5 для Pentium).
Содержимое регистра EDX включает конфиденциальную информацию изготовителя, а также говорит о наличии на кристалле микропроцессора арифметического сопроцессора (бит 0) и поддержке команды cmpxchgSb (бит 8).
Пример:
;В полях данных mem dd 0.0.0;В программном сегменте mov ЕАХ,О cpuid; EAX=0001h mov mem, ЕВХ mov mem+4, EDX mov mem+8, ECX; mem='Genuinelntel' cpuid EAX=543h (например),EDX = lBFh
CWD Преобразование слова в двойное слово
Команда cwd заполняет регистр DX знаковым битом содержимого регистра АХ, преобразуя тем самым 16-разрядное число со знаком в 32-разрядное, размещаемое в регистрах DX:AX. Команду удобно использовать для преобразования двухбайтового делимого в четырехбайтовое (двойное слово) при делении на 16-разрядный операнд. Команда не имеет параметров и не воздействует на флаги процессора.
Пример 1:
mov AX,32767; AX=7FFFh cwd; AX=7FFFh, DX=OOOOh. ;DX:AX=32767
Пример 2:
mov AX,-32768; AX=8000h cwd; AX=8000h, DX=FFFFh. ;DX:AX=-32768
386+ CWDE Преобразование слова в двойное слово с расширением
Команда cwde заполняет старшую половину регистра ЕАХ знаковым битом содержимого регистра АХ, преобразуя тем самым 16-разрядное число со знаком в 32-разрядное, размещаемое в расширенном регистре ЕАХ. Команда не имеет операндов и не воздействует на флаги процессора.
Пример:
; В полях данных mem dw -3 ;В программном сегменте mov AX,mem; AX=FFFD cwde; EAX=FFFFFFFDh