Иллюстрированный самоучитель по Assembler

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
Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.