;############################################################################################################################
;
;							MINIPROJECT
;
;						DONE BY: AJAYAN K.R. & HARI R 
;					      COLLEGE OF ENGINEERING TRIVANDRUM
;############################################################################################################################



;____________________________________________________________________________________________________________________________
;This program checks the manufacturer, type and the stepping of the Processor and its performance for various applications.
;This program runs only in 386 and higher processors
;for more details and suggestions do contact ajayankr@rediffmail.com or rharir@technologist.com
;____________________________________________________________________________________________________________________________

.MODEL small
RDTSC1   MACRO                   
        DB      0FH,31H
ENDM

CPUID1   MACRO
        DB 0FH,0A2H     ; CPUID1
ENDM

.386
.STACK 200H
.DATA
STR1 DB "NOT PENTIUM",13,10,"$"
ST1 DB "GENUINE INTEL PROCESSOR",13,10,"$"
STR2 DB "PENTIUM III",13,10,"$"
STR4 DB "PENTIUM II",13,10,"$"
STR3 DB "PENTIUM PRO",13,10,"$"
STR5 DB "SUPPORTS MMX",13,10,"$"
STR6 DB "NO MMX SUPPORT",13,10,"$"

G1 DB "EXCELLENT $"
G2 DB " GOOD $"
G3 DB " SATISFACTORY $"
G4 DB "   FOR DATABASE APPLICATIONS",13,10,"$"
G5 DB " BAD $"
LOC DB 080H
G6 DB " FOR MATHEMATICAL APPLICATIONS",13,10,"$"
M1 DB 040H
.CODE
ORG 01000H
START:
MOV AX,@DATA
MOV DS,AX
CLD

;***************************************************************************************************************************
;PGM FOR CLEARING THE SCREEN
;***************************************************************************************************************************
mov al,0
mov ch,0h
mov cl,0h
mov dh,24
mov dl,79
mov bh,7
mov ah,06h
int 10h

mov dx,0000
mov bh,00h
mov ah,02
int 10h

;*****************************************************************************************************************************
;PGM FOR IDENTIFYING THE MANUFACTURER AND THE PROCESSOR
;****************************************************************************************************************************

MOV EAX,0
CPUID1
CMP EAX,01H
JC J1
MOV AH,09H
MOV DX,OFFSET ST1
INT 21H
MOV EAX,1
CPUID1
MOV EBX,EAX
MOV ECX,EDX
AND EBX,0F00H
CMP EBX,0500H
JZ J3
CMP EBX,0600H
JZ J4
CMP EBX,0700H
JNZ J2
MOV AH,09H
MOV DX,OFFSET STR2
INT 21H
JMP J2
J3:MOV AH,09H
MOV DX,OFFSET STR3
INT 21H
JMP J2
J4:MOV AH,09H
MOV DX,OFFSET STR4
INT 21H
JMP J2
J1:MOV AH,09H
MOV DX,OFFSET STR1
INT 21H
J2:CMP ECX,00800000H
JNZ Z1
MOV AH,09H
MOV DX,OFFSET STR5
INT 21H
JMP Z2
Z1:MOV AH,09H
MOV DX,OFFSET STR6
INT 21H

;************************************************************************************************************************
;BENCHMARK PGM FOR DATABASE APPLICATION
;************************************************************************************************************************
;PGM FOR CALCULATING TIME USED FOR EXECUTING EXTRA IN

Z2:CLD
MOV ESI,02H
X1:RDTSC1
MOV EBX,EAX
MOV ECX,EDX
PUSHAD
POPAD
RDTSC1
SUB EAX,EBX
MOV EDI,EAX

RDTSC1
MOV EBX,EAX
MOV ECX,EDX
PUSHAD

;BENCH PGM STARTS HERE

MOV EAX,EBX
MOV ECX,EDX
MOV EAX,EDX
MOV EBX,ECX
MOV ECX,EBX
MOV EDX,EAX
MOV EDX,EDI
MOV EAX,ESI
MOV EAX,ECX
MOV EDX,EAX
MOV EAX,0H
MOV EAX,01H
MOV EAX,EBX
MOV EDX,EAX
MOV ECX,EBX
MOV EDX,EAX
MOV ECX,EBX
MOV EAX,01H
MOV EAX,OFFSET [LOC]
INC LOC
MOV EBX,OFFSET [LOC]
INC LOC
MOV EAX,OFFSET [LOC]
INC LOC
MOV EAX,OFFSET [LOC]
INC LOC
MOV EBX,OFFSET [LOC]
INC LOC
MOV EAX,OFFSET [LOC]
INC LOC
MOV EAX,OFFSET [LOC]
INC LOC
MOV EBX,OFFSET [LOC]
INC LOC
MOV EAX,OFFSET [LOC]
INC LOC
MOV EAX,OFFSET [LOC]
INC LOC
MOV EBX,OFFSET [LOC]
INC LOC
MOV EAX,OFFSET [LOC]
INC LOC
MOV EAX,EBX
MOV ECX,EDX
MOV EAX,EDX
MOV EBX,ECX
MOV ECX,EBX
MOV EDX,EAX
MOV EDX,EDI
MOV EAX,ESI
MOV EAX,ECX
MOV EDX,EAX
MOV EAX,0H
MOV EAX,01H
MOV EAX,EBX
MOV EDX,EAX
MOV ECX,EBX
MOV EDX,EAX
MOV ECX,EBX
MOV EAX,01H

MOV EAX,EBX
INC LOC
MOV EAX,OFFSET [LOC]
INC LOC
MOV EBX,OFFSET [LOC]
INC LOC
MOV EAX,OFFSET [LOC]
INC LOC
MOV EAX,OFFSET [LOC]
INC LOC
MOV EBX,OFFSET [LOC]
INC LOC
MOV EAX,OFFSET [LOC]
INC LOC
MOV EAX,OFFSET [LOC]
INC LOC
MOV EBX,OFFSET [LOC]
INC LOC
MOV EAX,OFFSET [LOC]
INC LOC

MOV EAX,OFFSET [LOC]
INC LOC
MOV EBX,OFFSET [LOC]
INC LOC
MOV EAX,OFFSET [LOC]
INC LOC



POPAD
DEC ESI
JNZ X1
RDTSC1
SUB EAX,EBX
SUB EAX,EDI
SBB EDX,ECX
CMP EAX,100
JC D1
CMP EAX,150
JC D2
CMP EAX,300
JC D3
mov EDX,OFFSET G5
MOV AH,09H
INT 21H
JMP D4
D1: MOV EDX,OFFSET G1
MOV AH,09H
INT 21H
JMP D4
D2: MOV EDX,OFFSET G2
MOV AH,09H
INT 21H
JMP D4
D3: MOV EDX,OFFSET G3
MOV AH,09H
INT 21H
JMP D4
D4: MOV EDX,OFFSET G4
MOV AH,09H
INT 21H



;****************************************************************************************************************************
;BENCHMARK PGM FOR MATHEMATICAL APPLICATION
;****************************************************************************************************************************



CLD
RDTSC1
MOV EBX,EAX
MOV ECX,EDX
PUSHAD

;BENCH PGM STARTS HERE

MOV EAX,EBX
MOV ECX,EDX
MOV EAX,EDX
MOV EBX,ECX
MOV ECX,EBX
MOV EDX,EAX
MOV EDX,EDI
MOV EAX,ESI
MOV EAX,ECX
MOV EDX,EAX
ADD EAX,EBX
SUB ECX,EDX
ADD EBX,ECX
SUB EAX,EBX
ADD EAX,EBX
SUB ECX,EDX
ADD EBX,ECX
SUB EAX,EBX
ADD EAX,EBX
SUB ECX,EDX
ADD EBX,ECX
SUB EAX,EBX
ADD EAX,EBX
SUB ECX,EDX
ADD EBX,ECX
SUB EAX,EBX
ADD EAX,EBX
SUB ECX,EDX
ADD EBX,ECX
SUB EAX,EBX
MUL EBX
DIV ECX
MUL [M1]
DIV [M1]
MUL [M1]
DIV [M1]
MUL [M1]
MUL [M1]
DIV [M1]
MUL [M1]
DIV [M1]
MUL [M1]

MOV EAX,EBX
MOV ECX,EDX
MOV EAX,EDX
MOV EBX,ECX
MOV ECX,EBX
MOV EDX,EAX
MOV EDX,EDI
MOV EAX,ESI
MOV EAX,ECX
MOV EDX,EAX
ADD EAX,EBX
SUB ECX,EDX
ADD EBX,ECX
SUB EAX,EBX
ADD EAX,EBX
SUB ECX,EDX
ADD EBX,ECX
SUB EAX,EBX
ADD EAX,EBX
SUB ECX,EDX
ADD EBX,ECX
SUB EAX,EBX
ADD EAX,EBX
SUB ECX,EDX
ADD EBX,ECX
SUB EAX,EBX
ADD EAX,EBX
SUB ECX,EDX
ADD EBX,ECX
SUB EAX,EBX
POPAD
RDTSC1
SUB EAX,EBX
SUB EAX,EDI
SBB EDX,ECX
CMP EAX,100
JC DM1
CMP EAX,150
JC DM2
CMP EAX,300
JC DM3
mov EDX,OFFSET G5
MOV AH,09H
INT 21H
JMP DM4
DM1: MOV EDX,OFFSET G1
MOV AH,09H
INT 21H
JMP DM4
DM2: MOV EDX,OFFSET G2
MOV AH,09H
INT 21H
JMP DM4
DM3: MOV EDX,OFFSET G3
MOV AH,09H
INT 21H
JMP DM4
DM4: MOV EDX,OFFSET G6
MOV AH,09H
INT 21H
MOV AH,04CH
INT 21H
END START
END

