⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pci.asm

📁 可以讀取電腦中所有PCI bus, function, device 通道的內容
💻 ASM
字号:

.model small
.386p
.code
        ORG	100h

Begin:
	jmp	entry
	
PCIinfo	db	'>>>>>>  PCI configuration registers information <<<<<<',0dh,0ah,0dh,0ah,
		'>>>>>>      Use Ctr+Del to input PFA again.     <<<<<<',0dh,0ah,0dh,0ah,
		'>>>>>>   Form: bus:XX, device:XX function: XX   <<<<<<',0dh,0ah,0dh,0ah,
		'>>>>>>             Use Esc to quit.             <<<<<<',0dh,0ah,0dh,0ah,'$'
PCIf	db	0dh,0ah,'     00 01 02 03   04 05 06 07   08 09 0A 0B   0C 0D 0E 0F ',0dh,0ah,0dh,0ah,'$'
ff	db	0dh, 0ah,'$'
wall	db	'===========================================================', 0dh, 0ah, 0dh, 0ah, '$'

search	dword	1 DUP(0)
index	dword	255 DUP(0)
dex	db	0dh,0ah,'$'

pcifu	dword	255 DUP(0)
tembus	dword	255 DUP(0)
temdevice	dword	255 DUP(0)
temfunction	dword	255 DUP(0)

fb	db	'input the bus: ',0dh, 0ah,'$'
fd	db	'input the device: ',0dh, 0ah,'$'
fun	db	'input the function: ',0dh, 0ah,'$'

bus	dword	255 DUP(0)
device	dword	255 DUP(0)
function	dword	255 DUP(0)

f01_d	db	'?? ','$';,0dh,0ah,0dh,0ah,'$'
f02_d	db	'?? ','$';,0dh,0ah,0dh,0ah,'$'
f03_d	db	'?? ','$';,0dh,0ah,0dh,0ah,'$'
f04_d	db	'??   ','$';,0dh,0ah,0dh,0ah,'$'
f05_d	db	'??   ','$';,0dh,0ah,0dh,0ah,'$'


comment %
;picfu	db	'??  '
f01_m	db	'AtRateOK.....................$'
f01_d	db	'   ??  ',0dh,0ah
f02_d	db	'??  ',0dh;,0ah
f03_d	db	'??  ',0dh;,0ah
f04_d	db	'??  ',0dh,0ah
f05_d	db	'??  ',0dh,0ah
%

entry:
	mov	ah, 09h
	lea	dx, PCIinfo
	int	21h
input:
;-------------------------------
	mov	eax, 80000000h
;	push	eax
	mov	ecx, 0

;====================================
	mov	ah, 09h
	lea	dx, fb
	int	21h
	mov	ah, 3fh
	mov	bx, 0
	mov	cx, 255
	mov	dx, offset bus
	int	21h
	mov	bl, 0
	mov	eax, bus
	jmp	Tch
Tdev:
	and	eax, 000000ffh
	mov	bus, eax
	mov	ah, 09h
	lea	dx, fd
	int	21h
	mov	ah, 3fh
	mov	bx, 0
	mov	cx, 255
	mov	dx, offset device
	int	21h
	mov	bl, 1
	mov	eax, device
	jmp	Tch
Tfun:
	and	eax, 000000ffh
	mov	device, eax
	mov	ah, 09h
	lea	dx, fun
	int	21h
	mov	ah, 3fh
	mov	bx, 0
	mov	cx, 255
	mov	dx, offset function
	int	21h
	mov	bl,2
	mov	eax, function
	
;;==================ch=====================
Tch:	
	push	ax
	shr	al, 4
	cmp	al, 3h
	je	three_al2
four_al2:
	pop	ax
	and	al, 0fh
	add	al, 9h
	jmp	forah2
three_al2:
	pop	ax
	and	al, 0fh	
forah2:
	push	ax
	shr	ah,4
	cmp	ah, 3h
	je	three_ah2

four_ah2:
	pop	ax
	and	ah, 0fh
	add	ah, 9h
	jmp	next2
three_ah2:
	pop	ax
	and	ah, 0fh	

next2:

	shl	ah, 4
	or	ah,al
	shr	ax, 8
	rol	al, 4
	
	shl	eax, 8
	or	eax, ebx
	
	rol	ax, 8
	cmp	bl, 0
	je	Tdev
	cmp	bl, 1
	je	Tfun

	and	eax, 000000ffh	
	mov	function, eax
;==========================================


	shl	bus, 16
	shl	device, 11
	shl	function, 8

	mov	eax, 80000000h
	or	eax, bus
	or	eax, device
	or	eax, function
	push	eax




	jmp	doinput


;=====================================

;L0:
	;sub	eax, 00000010h
L1:
	

	mov	ah, 10h
	int	16h
	cmp	al, 1Bh
	je	E
	cmp	ah, 51h
	je	down	;down
	cmp	ah, 49h
	je	up	;up
	cmp	ah, 93h
	je	input
	jmp	L1
;=================================

;=================================4:10test
up:
	pop	eax
	sub	eax, 00000100h
	push	eax
doupsearch:	
	mov	search, 1h
	pop 	eax
	cmp	eax, 80000000h;
	je	again_up;
	sub	eax, 00000100h	
	push	eax
	jmp	do

down:
	pop	eax
	sub	eax, 00000100h
	push	eax

doinc:		
	mov	search, 0h
	pop 	eax	
	cmp	eax, 80ffff00h
	je	again

	add	eax, 00000100h
	push	eax
	jmp	do

again_up:
	mov	eax, 80ffff00h
	push	eax
	jmp	do

again:
	mov	ecx, 0
	mov	eax, 80000000h		
	push	eax
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
do:	
	pop	eax	
	push	eax
	mov 	dx, 0cf8h
	out 	dx, eax
	mov	dx, 0cfch;;bx>dx
	in 	eax, dx
	out	dx, eax
	
	cmp	ax, 0ffffh
	jne	nothing

	cmp	search, 1h
	je	backup
backdown:
	jmp	doinc	
backup:
	jmp	doupsearch
nothing:
	pop	eax
;=======================================
doinput:
	push	eax
	mov	ah, 09h
	lea	dx, wall		
	int	21h
	pop	eax

	push	eax
	push	edx
	mov	edx, eax
	mov	ebx, eax
	shr	edx, 16
	mov	al, dh
	lea	di, f01_d
	call	Hex2ascii
	mov	al, dl
	lea	di, f02_d
	call	Hex2ascii
	mov	edx, ebx
	mov	dl, dh
	and	dl, 07h
	shr	dh, 3
	mov	al, dh
	lea	di, f03_d
	call	Hex2ascii
	mov	al, dl
	lea	di, f04_d
	call	Hex2ascii
	mov	ah, 09h
	lea	dx, f01_d
	int	21h
	mov	ah, 09h
	lea	dx, f02_d
	int	21h
	mov	ah, 09h
	lea	dx, f03_d
	int	21h
	mov	ah, 09h
	lea	dx, f04_d
	int	21h

	mov	ah, 09h
	lea	dx, ff
	int	21h

	pop	edx
	pop	eax
;========================================
;---------- get index ----------
get_index:

;;======================
	push	eax
	mov	ah, 09h
	lea	dx, PCIf
	int	21h
	pop	eax
;;======================

	mov	pcifu, 0
	mov	index, 0
	mov	dex, 0	
	push	eax

	push	eax
	push	edx
	mov	edx, pcifu
	mov	al, dl
	lea	di, f05_d
	call	Hex2ascii
	mov	ah, 09h
	lea	dx, f05_d
	int	21h
	pop	edx
	pop	eax

	jmp	loop1
loop3:
	mov	ah, 09h
	lea	dx, ff
	int	21h

	mov	index, 0

	pop	eax
	add	eax, 00000010h
	add	dex, 00000001h
	push	eax
	cmp	dex, 16
	je	L1

;;;;;;;;;;;;;;;;;;;;;;;;;;
	push	eax
	push	eax
	and	eax, 000000f0h
	lea	di, f05_d
	call	Hex2ascii
	mov	ah, 09h
	lea	dx, f05_d
	int	21h
	;pop	edx
	pop	eax

;;;;;;;;;;;;;;;;;;;;;;;;;;;

	jmp	loop1
loop2:

	pop	eax
	add	eax, 00000004h
	add	index, 00000001h
	cmp	index,4
	je	loop3
loop1:
	push	eax
	mov 	dx, 0cf8h
	out 	dx, eax

	mov	dx, 0cfch
	in 	eax, dx
	out	dx, eax


print:
	
	mov	edx, eax
	mov	ebx, eax
	shr	edx, 16
	mov	al, dh
	lea	di, f04_d
	call	Hex2ascii
	mov	al, dl
	lea	di, f03_d
	call	Hex2ascii
	mov	edx, ebx
	mov	al, dh
	lea	di, f02_d
	call	Hex2ascii
	mov	al, dl
	lea	di, f01_d
	call	Hex2ascii
	mov	ah, 09h
	lea	dx, f01_d
	int	21h
	mov	ah, 09h
	lea	dx, f02_d
	int	21h
	mov	ah, 09h
	lea	dx, f03_d
	int	21h
	mov	ah, 09h
	lea	dx, f04_d
	int	21h

	jmp	loop2
	

E:

;---------- PCI config ----------

;;;;;;;;;;END;;;;;;;;;;
	mov	ah, 4Ch
	int 	21h
	jmp	$
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Hex2ascii       proc            ; Entry:al=Hex, Return:[di]..[di+1]=ASCII
	pusha
        mov     ah, 0
        mov     cl, 10h
        div     cl              ; ax / cl = al ... ah
        add     al, '0'
        cmp     al, '9'
        jna     @f
        add     al, 07h
@@:
        stosb
        add     ah, '0'
        cmp     ah, '9'
        jna     @f
        add     ah, 07h
@@:
        xchg    ah, al
        stosb
	popa
        ret
Hex2ascii       endp

end	begin

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -