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

📄 smb_fcn.asm

📁 This program displays all SMBIOS/DMI information within the BIOS. The information is organized as a
💻 ASM
📖 第 1 页 / 共 5 页
字号:
@@:
	mov	di,[bp].SMBarg.argSMB_START ; Get struc start
	mov	bx,[bp].SMBarg.argSMB_OFFS  ; ...	offset

	push	fs:[bx+di].EDD	; Pass the hex dword
	push	fs:[bx+di].EDD	; ...
	push	ds		; ...  ptr to format string
	push	offset ds:MSG_DHDWORD ; ...
	push	lpOutput	; ...  ptr to output routine
	call	RPRINTF16	; Rprintf it, return with AX = # chars printed
	add	sp,4+4+4+4	; Strip arguments from stack

	clc			; Mark as successful

	popa			; Restore

	lclEPILOG SMB_STR	; Strip local vars and return

	assume	ds:nothing,es:nothing,fs:nothing,gs:nothing,ss:nothing

SMB_DHDWORD endp		; End SMB_DHDWORD procedure
	NPPROC	SMB_HEXBYTE -- Display A Hex Byte
	assume	ds:DGROUP,es:nothing,fs:nothing,gs:nothing,ss:nothing
COMMENT|

Display a Hex Byte from FS.

On entry:

FS	=	Struc Segment
SS:BP	==>	SMB_STR (after lclPROLOG)

On exit:

CF	=	0 if successful
	=	1 if not

|

	lclPROLOG SMB_STR	; Address local vars

	pusha			; Save all GP registers

; Display the leading text, unless asked not to

	test	LCL_FLAG,@LCL_XLEAD ; Skip displaying leading text?
	jnz	short @F	; Jump if so

	push	ds		; Pass ptr to string
	push	[bp].SMBarg.argSMB_TEXT ; ...
	call	DispASCIIZ	; Display ASCIIZ string
@@:
	mov	di,[bp].SMBarg.argSMB_START ; Get struc start
	mov	bx,[bp].SMBarg.argSMB_OFFS  ; ...	offset

	push	fs:[bx+di].ELO	; Pass the hex byte
	push	ds		; ...  ptr to format string
	push	offset ds:MSG_HEXBYTE ; ...
	push	lpOutput	; ...  ptr to output routine
	call	RPRINTF16	; Rprintf it, return with AX = # chars printed
	add	sp,4+4+2	; Strip arguments from stack

	clc			; Mark as successful

	popa			; Restore

	lclEPILOG SMB_STR	; Strip local vars and return

	assume	ds:nothing,es:nothing,fs:nothing,gs:nothing,ss:nothing

SMB_HEXBYTE endp		; End SMB_HEXBYTE procedure
	NPPROC	SMB_HEXBYTEUNK -- Display A Hex Byte w/Unknown
	assume	ds:DGROUP,es:nothing,fs:nothing,gs:nothing,ss:nothing
COMMENT|

Display a Hex Byte w/Unknown from FS.

On entry:

FS	=	Struc Segment
SS:BP	==>	SMB_STR (after lclPROLOG)

On exit:

CF	=	0 if successful
	=	1 if not

|

	lclPROLOG SMB_STR	; Address local vars

	pusha			; Save all GP registers

; Display the leading text, unless asked not to

	test	LCL_FLAG,@LCL_XLEAD ; Skip displaying leading text?
	jnz	short @F	; Jump if so

	push	ds		; Pass ptr to string
	push	[bp].SMBarg.argSMB_TEXT ; ...
	call	DispASCIIZ	; Display ASCIIZ string
@@:
	mov	di,[bp].SMBarg.argSMB_START ; Get struc start
	mov	bx,[bp].SMBarg.argSMB_OFFS  ; ...	offset

	movzx	ax,fs:[bx+di].LO ; Get the hex byte (zero to use as word)

	cmp	al,[bp].SMBarg.argSMB_SPC2.EDQLO.ELO.LO ; Izit unknown value?
	jne	short @F	; Jump if not

	push	ds		; Pass ptr to string
	push	offset ds:MSG_UNK_VAL ; ...
	call	DispASCIIZ	; Display ASCIIZ string

	jmp	short SMB_HEXBYTEUNK_EXIT ; Join common exit code


@@:
	push	ax		; Pass the hex byte (as word)
	push	ds		; ...  ptr to format string
	push	offset ds:MSG_HEXBYTE ; ...
	push	lpOutput	; ...  ptr to output routine
	call	RPRINTF16	; Rprintf it, return with AX = # chars printed
	add	sp,4+4+2	; Strip arguments from stack
SMB_HEXBYTEUNK_EXIT:
	clc			; Mark as successful

	popa			; Restore

	lclEPILOG SMB_STR	; Strip local vars and return

	assume	ds:nothing,es:nothing,fs:nothing,gs:nothing,ss:nothing

SMB_HEXBYTEUNK endp		; End SMB_HEXBYTEUNK procedure
	NPPROC	SMB_HEXWORD -- Display A Hex Word
	assume	ds:DGROUP,es:nothing,fs:nothing,gs:nothing,ss:nothing
COMMENT|

Display a Hex Word from FS.

On entry:

FS	=	Struc Segment
SS:BP	==>	SMB_STR (after lclPROLOG)

On exit:

CF	=	0 if successful
	=	1 if not

|

	lclPROLOG SMB_STR	; Address local vars

	pusha			; Save all GP registers

; Display the leading text, unless asked not to

	test	LCL_FLAG,@LCL_XLEAD ; Skip displaying leading text?
	jnz	short @F	; Jump if so

	push	ds		; Pass ptr to string
	push	[bp].SMBarg.argSMB_TEXT ; ...
	call	DispASCIIZ	; Display ASCIIZ string
@@:
	mov	di,[bp].SMBarg.argSMB_START ; Get struc start
	mov	bx,[bp].SMBarg.argSMB_OFFS  ; ...	offset

	push	fs:[bx+di].ELO	; Pass the hex word
	push	ds		; ...  ptr to format string
	push	offset ds:MSG_HEXWORD ; ...
	push	lpOutput	; ...  ptr to output routine
	call	RPRINTF16	; Rprintf it, return with AX = # chars printed
	add	sp,4+4+2	; Strip arguments from stack

	clc			; Mark as successful

	popa			; Restore

	lclEPILOG SMB_STR	; Strip local vars and return

	assume	ds:nothing,es:nothing,fs:nothing,gs:nothing,ss:nothing

SMB_HEXWORD endp		; End SMB_HEXWORD procedure
	NPPROC	SMB_HEXWORDUNK -- Display A Hex Word w/Unknown
	assume	ds:DGROUP,es:nothing,fs:nothing,gs:nothing,ss:nothing
COMMENT|

Display a Hex Word w/Unknown from FS.

On entry:

FS	=	Struc Segment
SS:BP	==>	SMB_STR (after lclPROLOG)

On exit:

CF	=	0 if successful
	=	1 if not

|

	lclPROLOG SMB_STR	; Address local vars

	pusha			; Save all GP registers

; Display the leading text, unless asked not to

	test	LCL_FLAG,@LCL_XLEAD ; Skip displaying leading text?
	jnz	short @F	; Jump if so

	push	ds		; Pass ptr to string
	push	[bp].SMBarg.argSMB_TEXT ; ...
	call	DispASCIIZ	; Display ASCIIZ string
@@:
	mov	di,[bp].SMBarg.argSMB_START ; Get struc start
	mov	bx,[bp].SMBarg.argSMB_OFFS  ; ...	offset

	mov	ax,fs:[bx+di].ELO ; Get the hex word

	cmp	ax,[bp].SMBarg.argSMB_SPC2.EDQLO.ELO ; Izit unknown value?
	jne	short @F	; Jump if not

	push	ds		; Pass ptr to string
	push	offset ds:MSG_UNK_VAL ; ...
	call	DispASCIIZ	; Display ASCIIZ string

	jmp	short SMB_HEXWORDUNK_EXIT ; Join common exit code


@@:
	push	ax		; Pass the hex word
	push	ds		; ...  ptr to format string
	push	offset ds:MSG_HEXWORD ; ...
	push	lpOutput	; ...  ptr to output routine
	call	RPRINTF16	; Rprintf it, return with AX = # chars printed
	add	sp,4+4+2	; Strip arguments from stack
SMB_HEXWORDUNK_EXIT:
	clc			; Mark as successful

	popa			; Restore

	lclEPILOG SMB_STR	; Strip local vars and return

	assume	ds:nothing,es:nothing,fs:nothing,gs:nothing,ss:nothing

SMB_HEXWORDUNK endp		; End SMB_HEXWORDUNK procedure
	NPPROC	SMB_HEXDWORD -- Display A Hex Dword
	assume	ds:DGROUP,es:nothing,fs:nothing,gs:nothing,ss:nothing
COMMENT|

Display a Hex Dword from FS.

On entry:

FS	=	Struc Segment
SS:BP	==>	SMB_STR (after lclPROLOG)

On exit:

CF	=	0 if successful
	=	1 if not

|

	lclPROLOG SMB_STR	; Address local vars

	pusha			; Save all GP registers

; Display the leading text, unless asked not to

	test	LCL_FLAG,@LCL_XLEAD ; Skip displaying leading text?
	jnz	short @F	; Jump if so

	push	ds		; Pass ptr to string
	push	[bp].SMBarg.argSMB_TEXT ; ...
	call	DispASCIIZ	; Display ASCIIZ string
@@:
	mov	di,[bp].SMBarg.argSMB_START ; Get struc start
	mov	bx,[bp].SMBarg.argSMB_OFFS  ; ...	offset

	push	fs:[bx+di].EDD	; Pass the hex dword
	push	ds		; ...  ptr to format string
	push	offset ds:MSG_HEXDWORD ; ...
	push	lpOutput	; ...  ptr to output routine
	call	RPRINTF16	; Rprintf it, return with AX = # chars printed
	add	sp,4+4+4	; Strip arguments from stack

	clc			; Mark as successful

	popa			; Restore

	lclEPILOG SMB_STR	; Strip local vars and return

	assume	ds:nothing,es:nothing,fs:nothing,gs:nothing,ss:nothing

SMB_HEXDWORD endp		; End SMB_HEXDWORD procedure
	NPPROC	SMB_HEXDWORDUNK -- Display A Hex Dword w/Unknown
	assume	ds:DGROUP,es:nothing,fs:nothing,gs:nothing,ss:nothing
COMMENT|

Display a Hex Dword w/Unknown from FS.

On entry:

FS	=	Struc Segment
SS:BP	==>	SMB_STR (after lclPROLOG)

On exit:

CF	=	0 if successful
	=	1 if not

|

	lclPROLOG SMB_STR	; Address local vars

	pushad			; Save all EGP registers

; Display the leading text, unless asked not to

	test	LCL_FLAG,@LCL_XLEAD ; Skip displaying leading text?
	jnz	short @F	; Jump if so

	push	ds		; Pass ptr to string
	push	[bp].SMBarg.argSMB_TEXT ; ...
	call	DispASCIIZ	; Display ASCIIZ string
@@:
	mov	di,[bp].SMBarg.argSMB_START ; Get struc start
	mov	bx,[bp].SMBarg.argSMB_OFFS  ; ...	offset

	mov	eax,fs:[bx+di].EDD ; Get the hex dword

	cmp	eax,[bp].SMBarg.argSMB_SPC2.EDQLO ; Izit unknown value?
	jne	short @F	; Jump if not

	push	ds		; Pass ptr to string
	push	offset ds:MSG_UNK_VAL ; ...
	call	DispASCIIZ	; Display ASCIIZ string

	jmp	short SMB_HEXDWORDUNK_EXIT ; Join common exit code


@@:
	push	eax		; Pass the hex dword
	push	ds		; ...  ptr to format string
	push	offset ds:MSG_HEXDWORD ; ...
	push	lpOutput	; ...  ptr to output routine
	call	RPRINTF16	; Rprintf it, return with AX = # chars printed
	add	sp,4+4+4	; Strip arguments from stack

	clc			; Mark as successful
SMB_HEXDWORDUNK_EXIT:
	popad			; Restore

	lclEPILOG SMB_STR	; Strip local vars and return

	assume	ds:nothing,es:nothing,fs:nothing,gs:nothing,ss:nothing

SMB_HEXDWORDUNK endp		; End SMB_HEXDWORDUNK procedure
	NPPROC	SMB_HEXQWORD -- Display A Hex Qword
	assume	ds:DGROUP,es:nothing,fs:nothing,gs:nothing,ss:nothing
COMMENT|

Display a Hex Qword from FS.

On entry:

FS	=	Struc Segment
SS:BP	==>	SMB_STR (after lclPROLOG)

On exit:

CF	=	0 if successful
	=	1 if not

|

	lclPROLOG SMB_STR	; Address local vars

	pusha			; Save all GP registers

; Display the leading text, unless asked not to

	test	LCL_FLAG,@LCL_XLEAD ; Skip displaying leading text?
	jnz	short @F	; Jump if so

	push	ds		; Pass ptr to string
	push	[bp].SMBarg.argSMB_TEXT ; ...
	call	DispASCIIZ	; Display ASCIIZ string
@@:
	mov	di,[bp].SMBarg.argSMB_START ; Get struc start
	mov	bx,[bp].SMBarg.argSMB_OFFS  ; ...	offset

	push	fs:[bx+di].EDQLO ; Pass the low-order hex qword
	push	fs:[bx+di].EDQHI ; Pass     high-...
	push	ds		; ...  ptr to format string
	push	offset ds:MSG_HEXQWORD ; ...
	push	lpOutput	; ...  ptr to output routine
	call	RPRINTF16	; Rprintf it, return with AX = # chars printed
	add	sp,4+4+8	; Strip arguments from stack

	clc			; Mark as successful

	popa			; Restore

	lclEPILOG SMB_STR	; Strip local vars and return

	assume	ds:nothing,es:nothing,fs:nothing,gs:nothing,ss:nothing

SMB_HEXQWORD endp		; End SMB_HEXQWORD procedure
	NPPROC	SMB_HEXQWORDUNK -- Display A Hex Qword w/Unknown
	assume	ds:DGROUP,es:nothing,fs:nothing,gs:nothing,ss:nothing
COMMENT|

Display a Hex Qword w/Unknown from FS.

On entry:

FS	=	Struc Segment
SS:BP	==>	SMB_STR (after lclPROLOG)

On exit:

CF	=	0 if successful
	=	1 if not

|

	lclPROLOG SMB_STR	; Address local vars

	pushad			; Save all EGP registers

; Display the leading text, unless asked not to

	test	LCL_FLAG,@LCL_XLEAD ; Skip displaying leading text?
	jnz	short @F	; Jump if so

	push	ds		; Pass ptr to string
	push	[bp].SMBarg.argSMB_TEXT ; ...
	call	DispASCIIZ	; Display ASCIIZ string
@@:
	mov	di,[bp].SMBarg.argSMB_START ; Get struc start
	mov	bx,[bp].SMBarg.argSMB_OFFS  ; ...	offset

	mov	edx,fs:[bx+di].EDQHI ; Get the high-order hex dword
	mov	eax,fs:[bx+di].EDQLO ; ...     low-...

	cmp	eax,[bp].SMBarg.argSMB_SPC2.EDQLO ; Izit unknown value?
	jne	short @F	; Jump if not

	cmp	edx,[bp].SMBarg.argSMB_SPC2.EDQHI ; Izit unknown value?
	jne	short @F	; Jump if not

	push	ds		; Pass ptr to string
	push	offset ds:MSG_UNK_VAL ; ...
	call	DispASCIIZ	; Display ASCIIZ string

	jmp	short SMB_HEXQWORDUNK_EXIT ; Join common exit code


@@:
	push	eax		; Pass the low-order hex dword
	push	edx		; ...	   high-...
	push	ds		; ...  ptr to format string
	push	offset ds:MSG_HEXQWORD ; ...
	push	lpOutput	; ...  ptr to output routine
	call	RPRINTF16	; Rprintf it, return with AX = # chars printed
	add	sp,4+4+8	; Strip arguments from stack
SMB_HEXQWORDUNK_EXIT:
	clc			; Mark as successful

	popad			; Restore

	lclEPILOG SMB_STR	; Strip local vars and return

	assume	ds:nothing,es:nothing,fs:nothing,gs:nothing,ss:nothing

SMB_HEXQWORDUNK endp		; End SMB_HEXQWORDUNK procedure
	NPPROC	SMB_HANDLE -- Display A Handle
	assume	ds:DGROUP,es:nothing,fs:nothing,gs:nothing,ss:nothing
COMMENT|

Display a Handle from FS.

On entry:

FS	=	Struc Segment
SS:BP	==>	SMB_STR (after lclPROLOG)

On exit:

CF	=	0 if successful
	=	1 if not

|

	lclPROLOG SMB_STR	; Address local vars

	pusha			; Save all GP registers

; Display the leading text, unless asked not to

	test	LCL_FLAG,@LCL_XLEAD ; Skip displaying leading text?
	jnz	short @F	; Jump if so

	push	ds		; Pass ptr to string
	push	[bp].SMBarg.argSMB_TEXT ; ...
	call	DispASCIIZ	; Display ASCIIZ string
@@:
	mov	di,[bp].SMBarg.argSMB_START ; Get struc start
	mov	bx,[bp].SMBarg.argSMB_OFFS  ; ...	offset

	push	fs:[bx+di].ELO	; Pass the hex word
	push	ds		; ...  ptr to format string

⌨️ 快捷键说明

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