| Аппаратное обеспечение IBM PC© Александр Фролов, Григорий ФроловТом 2, книга 1, М.: Диалог-МИФИ, 1992. 
 1.5. Определение типа процессораМы уже говорили о том, для чего может потребоваться программе определять тип используемого процессора. Для определения типа процессора можно использовать следующую программу: 
                  .MODEL  tiny
                  .STACK  100h
                  .DATA
msg1      db "Тип вашего процессора: ", "$"
m_8086    db "8086","$"
m_80286   db "80286","$"
m_80386   db "80386","$"
                  .CODE
                  .STARTUP
                  mov     ah, 9h
                  mov     dx, OFFSET msg1
                  int     21h
; Записываем 0 в регистр флагов
                  xor     ax,ax
                  push    ax
                  popf
; Переписываем регистр флагов через
; стек в регистр AX
                  pushf
                  pop     ax
; Проверяем установку старших четырех битов
                  and     ax,0F000h
                  cmp     ax,0F000h
; Если эти биты установлены, программа
; работает на процессоре 8086
                  je      short CPU_8086
; Записываем 0F000h в регистр флагов
                  mov     ax,0F000h
                  push    ax
                  popf
; Переписываем регистр флагов через
; стек в регистр AX
                  pushf
                  pop     ax
; Проверяем установку старших четырех битов
                  and     ax,0F000h
; Если эти биты установлены, программа
; работает на процессоре 80286
                  jz      short CPU_80286
; Если биты не установлены, то программа
; работает на процессоре 80386
                  mov     dx, OFFSET m_80386
                  jmp end_program
CPU_80286:
                  mov     dx, OFFSET m_80286
                  jmp end_program
CPU_8086:
                  mov     dx, OFFSET m_8086
end_program:
                  mov     ah, 9h
                  int     21h
                  .EXIT   0
                  END
Работа программы основывается на записи в стек слова состояния процессора и последующего извлечения его. При этом проверяется содержимое старших извлеченных из стека битов. 
 | 


![[Назад]](../../prev.gif)
![[Содеожание]](../../sod.gif)
![[Дальше]](../../next.gif)