; 'Мир ПК' N 2'91
;
;    Как определить тип микропроцессора ПК
;
;    Существенным отличием процессора 8086 является способ выполнения
; арифметического сдвига числа длиной 16 бит вправо  на  33  и  более
; разрядов. Результат такой операции равен 0, что вполне соответству-
; ет двоичной логике. Другие микропроцессоры семейства 80х86 при  по-
; добной  операции  просто  игнорируют  три  старших разряда счетчика
; сдвигов. Поэтому результаты сдвига на 1, 33 и 65  разрядов  в  этих
; процессорах совпадают.
;    В свою очередь в процессоре 80186 из-за  некоторых  особенностей
; архитектуры происходит нарушение обычного порядка выполнения макро-
; команд при операциях со стеком. Здесь,  в  отличие  от  процессоров
; 80286 и 80386, сначала модифицируется указатель стека,  а  затем  в
; стек  помещается  операнд.  Таким  образом, команда PUSH SP сначала
; вычтет 2 из содержимого регистра SP, а потом уже занесет полученное
; значение в стек.
;    Процессор 80386 отличается от своих младших братьев  наличием  в
; регистре  флагов  трех  дополнительных  признаков,  расположенных в
; битах 12, 13 и 14.
;    Предлагаемая программа позволяет, основываясь  на  перечисленных
; отличиях, определить тип микропроцессора семейства 80х86.
;
;                                    Д. Куранов,  А. Соколов
;
CSEG	SEGMENT	PARA PUBLIC 'CODE'
	ASSUME	CS:CSEG, DS:CSEG
	ORG	100H
START:
	MOV	AH, 9
	LEA	DX, MESSAGE
	INT	21H
	MOV	AX, 0FFFFH
	MOV	CL, 42H
	SHR	AX, CL
	TEST	AX, 03FFFH
	JZ	CPU_86
	PUSH	SP
	POP	BX
	CMP	BX, SP
	JNE	CPU_186
	MOV	BX, 7000H
	PUSH	BX
	POPF
	PUSHF
	POP	BX
	AND	BX, 7000H
	JZ	CPU_286
	LEA	DX, SHOW_386
	JMP	SHORT OUT_CPU
CPU_86:
	LEA	DX, SHOW_86
	JMP	SHORT OUT_CPU
CPU_186:
	LEA	DX, SHOW_186
	JMP	SHORT OUT_CPU
CPU_286:
	LEA	DX, SHOW_286
OUT_CPU:
	MOV	AH, 9
	INT	21H
	LEA	DX, END_STR
	INT	21H
	MOV	AX, 4C00H
	INT	21H
;
MESSAGE		DB	10,13,'Тип процессора: $'
SHOW_86 	DB      '8086$'
SHOW_186 	DB      '80186$'
SHOW_286 	DB      '80286$'
SHOW_386 	DB      '80386$'
END_STR		DB	10,13,24H
CSEG	ENDS
	END	START