|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 | |
|
Senior Member
Iscritto dal: Apr 2002
Città: Vigevano(PV)
Messaggi: 2124
|
[Asmx86]Flag
Codice:
; Source name : ; Executable name : ; Code model: : Real mode flat model ; Version : ; Created date : ; Last update : ; Author : Luca Francesca ; Description : A utility to query and display information about CPU ; Compiling on : NASM [BITS 16] [ORG 0100h] ; for .com [SECTION .text] start: mov dx, Title mov ah, 09h int 21h mov dx, NewLine mov ah, 09h int 21h mov dx, Name mov ah, 09h int 21h mov eax, 80000002h cpuid mov [ProcessorStr], eax mov [ProcessorStr+4], ebx mov [ProcessorStr+8], ecx mov [ProcessorStr+12], edx mov eax, 80000003h cpuid mov [ProcessorStr+16], eax mov [ProcessorStr+20], ebx mov [ProcessorStr+24], ecx mov [ProcessorStr+28], edx mov byte [ProcessorStr+32], 13 ; CR mov byte [ProcessorStr+33], 10 ; LF mov byte [ProcessorStr+34], '$' ; String termining mov dx, ProcessorStr mov ah, 09h int 21h mov eax, 1h cpuid mov dx, Fam mov ah, 09h int 21h ;bits 11-8 (reg_eax & 0xf00) >> 8; mov dx, NewLine mov ah, 09h int 21h mov dx, Mod mov ah, 09h int 21h ;bits 7-4 f0 (reg_eax & 0xf0) >> 4; mov dx, NewLine mov ah, 09h int 21h mov dx, NewLine mov ah, 09h int 21h mov dx, Vendor mov ah, 09h int 21h mov eax, 0h cpuid mov [VendorStr], ebx mov [VendorStr+4], edx mov [VendorStr+8], ecx mov byte [VendorStr+12], 13 ; CR mov byte [VendorStr+13], 10 ; LF mov byte [VendorStr+14], '$' ; String termining mov dx, VendorStr mov ah, 09h int 21h mov dx, NewLine mov ah, 09h int 21h mov dx, Ext mov ah, 09h int 21h ; extension info mov eax, 1h cpuid test edx, 00800000h ; MMX bit(23) jnz MMX xor eax, eax test edx, 002000000h ; SSE bit(25) jnz SSE xor eax, eax test edx, 004000000h ; SSE2 bit(26) jnz SSE_TWO xor eax, eax test ecx, 000000001h ; SSE3 bit(0) jnz SSE_THREE xor eax, eax test edx, 0040000000h ; 3DNow! bit(30) jnz AMD_NOW xor eax, eax test edx, 0080000000; 3DNow! Extensions bit(31) jnz AMD_NOW_EXT xor eax, eax ; exit to the program jmp exit MMX: mov dx, MMXMsg mov ah, 09h int 21h SSE: mov dx, SSEMsg mov ah, 09h int 21h SSE_TWO: mov dx, SSE_TWOMsg mov ah, 09h int 21h SSE_THREE: mov dx, SSE_THREEMsg mov ah, 09h int 21h AMD_NOW: mov dx, AMD_NOWMsg mov ah, 09h int 21h AMD_NOW_EXT: mov dx, AMD_NOW_EXTMsg mov ah, 09h int 21h exit: ; set int 21h service 4Ch(exit) mov ah, 4Ch int 21h [SECTION .data] NewLine db 13, 10, '$' Title db "§§§§§ Lucas CPUID program §§§§§", 13, 10, '$' Name db "=> Cpu Name: ", '$' Vendor db "=> Cpu Vendor: ", '$' Ext db "=> Cpu supported extension:", 13, 10, '$' Fam db "==> Cpu Family: ", '$' Mod db "===> Cpu Model: ", '$' ; Intel specific instruction MMXMsg db "*This CPU support the 'MMX' instructions", 13, 10, '$' SSEMsg db "*This CPU support the 'SSE' instructions", 13, 10, '$' SSE_TWOMsg db "*This CPU support the 'SSE2' instructions", 13, 10, '$' SSE_THREEMsg db "*This CPU support the 'SSE3' instructions", 13, 10, '$' ; AMD specific instructions AMD_NOWMsg db "*This CPU support the '3DNow!' instructions", 13, 10, '$' AMD_NOW_EXTMsg db "*This CPU support the '3DNow!+ Extensions' instructions", 13, 10, '$' [SECTION .bss] VendorStr resb 14 ; Reserve 12 bytes for cpu's vendor string ProcessorStr resb 34 ; Reserve 31 +3(\n) bytes for cpu's vendor string Family resb 7 ; 4 + 3(\n) Model resb 7 ; 4 + 3(\n) Quote:
__________________
Gnu/Linux User
|
|
|
|
|
|
|
#2 | |
|
Senior Member
Iscritto dal: Oct 2001
Messaggi: 11471
|
Re: [Asmx86]Flag
Quote:
ciao |
|
|
|
|
|
|
#3 | |
|
Senior Member
Iscritto dal: Apr 2002
Città: Vigevano(PV)
Messaggi: 2124
|
Re: Re: [Asmx86]Flag
Quote:
__________________
Gnu/Linux User
|
|
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Apr 2002
Città: Vigevano(PV)
Messaggi: 2124
|
Codice:
; Source name : ; Executable name : CPUID.COM ; Code model: : Real mode flat model ; Version : 1.0 ; Created date : 7/9/2004 ; Last update : 7/9/2004 ; Author : Luca Francesca ; Description : A utility to display information about CPU ; Compiling on : NASM [BITS 16] ; 16bit output [ORG 0100h] ; for .com [SECTION .text] start: mov dx, Title mov ah, 09h ; set int 21h service 09h(print '$'-terminated string) int 21h mov dx, NewLine mov ah, 09h ; set int 21h service 09h(print '$'-terminated string) int 21h mov dx, Name mov ah, 09h ; set int 21h service 09h(print '$'-terminated string) int 21h mov eax, 80000002h cpuid mov [ProcessorStr], eax mov [ProcessorStr+4], ebx mov [ProcessorStr+8], ecx mov [ProcessorStr+12], edx mov eax, 80000003h cpuid mov [ProcessorStr+16], eax mov [ProcessorStr+20], ebx mov [ProcessorStr+24], ecx mov [ProcessorStr+28], edx mov eax, 80000004h ; required from Intel, optional in AMD cpuid mov [ProcessorStr+32], eax mov [ProcessorStr+36], ebx mov [ProcessorStr+40], ecx mov [ProcessorStr+44], edx mov byte [ProcessorStr+48], 13 ; CR mov byte [ProcessorStr+49], 10 ; LF mov byte [ProcessorStr+50], '$' ; String termining mov dx, ProcessorStr mov ah, 09h ; set int 21h service 09h(print '$'-terminated string) int 21h mov eax, 1h cpuid mov dx, Fam mov ah, 09h ; set int 21h service 09h(print '$'-terminated string) int 21h ;bits 11-8 (reg_eax & 0xf00) >> 8; mov dx, NewLine mov ah, 09h ; set int 21h service 09h(print '$'-terminated string) int 21h mov dx, Mod mov ah, 09h ; set int 21h service 09h(print '$'-terminated string) int 21h ;bits 7-4 f0 (reg_eax & 0xf0) >> 4; mov dx, NewLine mov ah, 09h ; set int 21h service 09h(print '$'-terminated string) int 21h mov dx, NewLine mov ah, 09h ; set int 21h service 09h(print '$'-terminated string) int 21h mov dx, Vendor mov ah, 09h ; set int 21h service 09h(print '$'-terminated string) int 21h mov eax, 0h cpuid mov [VendorStr], ebx mov [VendorStr+4], edx mov [VendorStr+8], ecx mov byte [VendorStr+12], 13 ; CR mov byte [VendorStr+13], 10 ; LF mov byte [VendorStr+14], '$' ; String termining mov dx, VendorStr mov ah, 09h int 21h mov dx, NewLine mov ah, 09h ; set int 21h service 09h(print '$'-terminated string) int 21h mov dx, Ext mov ah, 09h ; set int 21h service 09h(print '$'-terminated string) int 21h ; extension info mov eax, 1h cpuid test edx, 00800000h ; MMX bit(23) jnz MMX test edx, 002000000h ; SSE bit(25) jnz SSE test edx, 004000000h ; SSE2 bit(26) jnz SSE_TWO test ecx, 000000001h ; SSE3 bit(0) jnz SSE_THREE test edx, 0040000000h ; 3DNow! bit(30) jnz AMD_NOW test edx, 0080000000; 3DNow! Extensions bit(31) jnz AMD_NOW_EXT ; exit to the program jmp exit MMX: push edx mov dx, MMXMsg mov ah, 09h ; set int 21h service 09h(print '$'-terminated string) int 21h pop edx ret SSE: push edx mov dx, SSEMsg mov ah, 09h ; set int 21h service 09h(print '$'-terminated string) int 21h pop edx ret SSE_TWO: push edx mov dx, SSE_TWOMsg mov ah, 09h ; set int 21h service 09h(print '$'-terminated string) int 21h pop edx ret SSE_THREE: push edx mov dx, SSE_THREEMsg mov ah, 09h ; set int 21h service 09h(print '$'-terminated string) int 21h pop edx ret AMD_NOW: push edx mov dx, AMD_NOWMsg mov ah, 09h ; set int 21h service 09h(print '$'-terminated string) int 21h pop edx ret AMD_NOW_EXT: push edx mov dx, AMD_NOW_EXTMsg mov ah, 09h ; set int 21h service 09h(print '$'-terminated string) int 21h pop edx ret exit: mov ah, 4Ch ; set int 21h service 4Ch(exit) int 21h [SECTION .data] NewLine db 13, 10, '$' Title db "§§§§§ Lucas CPUID program §§§§§", 13, 10, '$' Name db "=> Cpu Name: ", '$' Vendor db "=> Cpu Vendor: ", '$' Ext db "=> Cpu supported extension:", 13, 10, '$' Fam db "==> Cpu Family: ", '$' Mod db "===> Cpu Model: ", '$' ; Intel specific instruction MMXMsg db "*This CPU support the 'MMX' instructions", 13, 10, '$' SSEMsg db "*This CPU support the 'SSE' instructions", 13, 10, '$' SSE_TWOMsg db "*This CPU support the 'SSE2' instructions", 13, 10, '$' SSE_THREEMsg db "*This CPU support the 'SSE3' instructions", 13, 10, '$' ; AMD specific instructions AMD_NOWMsg db "*This CPU support the '3DNow!' instructions", 13, 10, '$' AMD_NOW_EXTMsg db "*This CPU support the '3DNow!+ Extensions' instructions", 13, 10, '$' [SECTION .bss] VendorStr resb 14 ; Reserve 12 bytes for cpu's vendor string ProcessorStr resb 50 ; Reserve 47 +3(\n) bytes for cpu's vendor string Family resb 7 ; 4 + 3(\n) Model resb 7 ; 4 + 3(\n)
__________________
Gnu/Linux User
|
|
|
|
|
|
#5 | |
|
Senior Member
Iscritto dal: Oct 2001
Messaggi: 11471
|
Quote:
Codice:
TEST_MMX: test edx, 00800000h ; MMX bit(23)
jnz MMX
TEST_SSE: test edx, 002000000h ; SSE bit(25)
jnz SSE
TEST_SSE2: test edx, 004000000h ; SSE2 bit(26)
jnz SSE_TWO
[...]
MMX:
mov dx, MMXMsg
mov ah, 09h ; set int 21h service 09h(print '$'-terminated string)
int 21h
jmp TEST_SSE
SSE:
mov dx, SSEMsg
mov ah, 09h ; set int 21h service 09h(print '$'-terminated string)
int 21h
jmp TEST_SSE2
[...]
|
|
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: Apr 2002
Città: Vigevano(PV)
Messaggi: 2124
|
ma nn entra in loop infinito come dici tu?
__________________
Gnu/Linux User
|
|
|
|
|
|
#7 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Io non capisco il perchè di fare una JMP !?!??!
Codice:
test edx, 00800000h ; MMX bit(23) mov dx, MMXMsg mov ah, 09h ; set int 21h service 09h(print '$'-terminated string) int 21h |
|
|
|
|
|
#8 |
|
Senior Member
Iscritto dal: Apr 2002
Città: Vigevano(PV)
Messaggi: 2124
|
nn va lo stesso
__________________
Gnu/Linux User
|
|
|
|
|
|
#9 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
In effetti mi dimenticavo dell'if
Codice:
TEST_MMX: test edx, 00800000h ; MMX bit(23) jz TEST_SSE push edx mov dx, MMXMsg mov ah, 09h ; set int 21h service 09h(print '$'-terminated string) int 21h pop edx TEST_SSE: test edx, 002000000h ; SSE bit(25) jz TEST_SSE2 push edx mov dx, SSEMsg mov ah, 09h ; set int 21h service 09h(print '$'-terminated string) int 21h pop edx TEST_SSE2: test edx, 004000000h ; SSE2 bit(26) Inoltre sporcavi EDX... Ultima modifica di cionci : 07-09-2004 alle 11:11. |
|
|
|
|
|
#10 |
|
Senior Member
Iscritto dal: Apr 2002
Città: Vigevano(PV)
Messaggi: 2124
|
Codice:
TEST_SSE2: test edx, 4000000h ; SSE2 bit(26) jz TEST_SSE2 push edx mov dx, SSE_TWOMsg mov ah, 09h ; set int 21h service 09h(print '$'-terminated string) int 21h pop edx TEST_AMD_NOW: test edx, 40000000h ; 3DNow! bit(30) push edx jz TEST_AMD_NOW mov dx, AMD_NOWMsg mov ah, 09h ; set int 21h service 09h(print '$'-terminated string) int 21h pop edx TEST_AMD_NOW_PLUS: test edx, 80000000; 3DNow! Extensions bit(31) push edx jz TEST_AMD_NOW_PLUS mov dx, AMD_NOW_EXTMsg mov ah, 09h ; set int 21h service 09h(print '$'-terminated string) int 21h pop edx
__________________
Gnu/Linux User
|
|
|
|
|
|
#11 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Il push va messo dopo il JZ...
|
|
|
|
|
|
#12 | |
|
Senior Member
Iscritto dal: Apr 2002
Città: Vigevano(PV)
Messaggi: 2124
|
Quote:
anche cosi mi da solo MMX e SSE e non entrambe le 3dNow!
__________________
Gnu/Linux User
|
|
|
|
|
|
|
#13 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Incolla un po' tutto il codice...
|
|
|
|
|
|
#14 |
|
Senior Member
Iscritto dal: Apr 2002
Città: Vigevano(PV)
Messaggi: 2124
|
Codice:
; Source name : ; Executable name : CPUID.COM ; Code model: : Real mode flat model ; Version : 1.0 ; Created date : 6/9/2004 ; Last update : 7/9/2004 ; Author : Luca Francesca ; Description : A utility to display information about CPU ; Compiling on : NASM [BITS 16] ; 16bit output [ORG 0100h] ; for .com [SECTION .text] start: mov dx, Title mov ah, 09h ; set int 21h service 09h(print '$'-terminated string) int 21h mov dx, NewLine mov ah, 09h ; set int 21h service 09h(print '$'-terminated string) int 21h mov dx, Name mov ah, 09h ; set int 21h service 09h(print '$'-terminated string) int 21h mov eax, 80000002h cpuid mov [ProcessorStr], eax mov [ProcessorStr+4], ebx mov [ProcessorStr+8], ecx mov [ProcessorStr+12], edx mov eax, 80000003h cpuid mov [ProcessorStr+16], eax mov [ProcessorStr+20], ebx mov [ProcessorStr+24], ecx mov [ProcessorStr+28], edx mov eax, 80000004h ; required from Intel, optional in AMD cpuid mov [ProcessorStr+32], eax mov [ProcessorStr+36], ebx mov [ProcessorStr+40], ecx mov [ProcessorStr+44], edx mov byte [ProcessorStr+48], 13 ; CR mov byte [ProcessorStr+49], 10 ; LF mov byte [ProcessorStr+50], '$' ; String termining mov dx, ProcessorStr mov ah, 09h ; set int 21h service 09h(print '$'-terminated string) int 21h mov eax, 1h cpuid mov dx, NewLine mov ah, 09h ; set int 21h service 09h(print '$'-terminated string) int 21h mov dx, Vendor mov ah, 09h ; set int 21h service 09h(print '$'-terminated string) int 21h mov eax, 0h cpuid mov [VendorStr], ebx mov [VendorStr+4], edx mov [VendorStr+8], ecx mov byte [VendorStr+12], 13 ; CR mov byte [VendorStr+13], 10 ; LF mov byte [VendorStr+14], '$' ; String termining mov dx, VendorStr mov ah, 09h int 21h mov dx, NewLine mov ah, 09h ; set int 21h service 09h(print '$'-terminated string) int 21h mov dx, Ext mov ah, 09h ; set int 21h service 09h(print '$'-terminated string) int 21h ; extension info mov eax, 1h cpuid TEST_MMX: test edx, 800000h ; MMX bit(23) jz TEST_MMX push edx mov dx, MMXMsg mov ah, 09h ; set int 21h service 09h(print '$'-terminated string) int 21h pop edx TEST_SSE: test edx, 2000000h ; SSE bit(25) jz TEST_SSE push edx mov dx, SSEMsg mov ah, 09h ; set int 21h service 09h(print '$'-terminated string) int 21h pop edx TEST_SSE2: test edx, 4000000h ; SSE2 bit(26) jz TEST_SSE2 push edx mov dx, SSE_TWOMsg mov ah, 09h ; set int 21h service 09h(print '$'-terminated string) int 21h pop edx TEST_AMD_NOW: test edx, 40000000h ; 3DNow! bit(30) jz TEST_AMD_NOW push edx mov dx, AMD_NOWMsg mov ah, 09h ; set int 21h service 09h(print '$'-terminated string) int 21h pop edx TEST_AMD_NOW_PLUS: test edx, 80000000; 3DNow! Extensions bit(31) jz TEST_AMD_NOW_PLUS push edx mov dx, AMD_NOW_EXTMsg mov ah, 09h ; set int 21h service 09h(print '$'-terminated string) int 21h pop edx ; exit to the program mov ah, 4Ch ; set int 21h service 4Ch(exit) int 21h [SECTION .data] NewLine db 13, 10, '$' Title db "<<<< Lucas CPUID program >>>>", 13, 10, '$' Name db "=> Cpu Name: ", '$' Vendor db "=> Cpu Vendor: ", '$' Ext db "=> Cpu supported extension:", 13, 10, '$' Fam db "==> Cpu Family: ", '$' ; The CPU Family string Mod db "===> Cpu Model: ", '$' ; The CPU Model string ; Intel specific instruction MMXMsg db "*This CPU support the 'MMX' instructions", 13, 10, '$' SSEMsg db "*This CPU support the 'SSE' instructions", 13, 10, '$' SSE_TWOMsg db "*This CPU support the 'SSE2' instructions", 13, 10, '$' ; AMD specific instructions AMD_NOWMsg db "*This CPU support the '3DNow!' instructions", 13, 10, '$' AMD_NOW_EXTMsg db "*This CPU support the '3DNow!+ Extensions' instructions", 13, 10, '$' [SECTION .bss] VendorStr resb 14 ; Reserve 12 bytes for cpu's vendor string ProcessorStr resb 50 ; Reserve 47 +3(\n) bytes for cpu's vendor string Family resb 7 ; 4 + 3(\n) Model resb 7 ; 4 + 3(\n)
__________________
Gnu/Linux User
|
|
|
|
|
|
#15 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Hai sbagliaot le etichette di salto... Dal test sulle MMX devi saltare (se non ci sono le MMX) al test sulle SSE e così via
Come hai scritto te va in ciclo appena trovi una feature che non c'è sul tuo processore... TEST_MMX lo puoi anche togliere... |
|
|
|
|
|
#16 |
|
Senior Member
Iscritto dal: Apr 2002
Città: Vigevano(PV)
Messaggi: 2124
|
cioe, giusto per capire bene:
Codice:
TEST_MMX: test edx, 800000h ; MMX bit(23) jz TEST_SSE push edx mov dx, MMXMsg mov ah, 09h ; set int 21h service 09h(print '$'-terminated string) int 21h pop edx Spiegami il perche cosi imparo bene
__________________
Gnu/Linux User
|
|
|
|
|
|
#17 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Esegue il test SSE dopo perchè...o ci arriva tramite il salto (in caso in cui il bit relativo a MMX sia a 0) o ci arriva perchè il test SSE è l'istruzione successiva alla pop...
|
|
|
|
|
|
#18 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
C'è un errore qui:
Codice:
TEST_AMD_NOW_PLUS: test edx, 80000000; 3DNow! Extensions bit(31) jz FINE_TEST push edx mov dx, AMD_NOW_EXTMsg mov ah, 09h ; set int 21h service 09h(print '$'-terminated string) int 21h pop edx ; exit to the program mov ah, 4Ch ; set int 21h service 4Ch(exit) int 21h FINE_TEST: |
|
|
|
|
|
#19 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Ed un errore qui:
Codice:
TEST_SSE2: test edx, 4000000h ; SSE2 bit(26) jz TEST_AMD_NOW push edx |
|
|
|
|
|
#20 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Si dice Fixed, non Corrected
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 05:40.



















