📄 pci-256.asm
字号:
.386
STACK SEGMENT USE16 STACK
DB 100 DUP(?)
STACK ENDS
DATA SEGMENT USE16
;DATA0 DW 0
DATA1 DW 0
NUMBER DD 8000f900H
CONFIG DW 128 DUP(?)
DATA ENDS
CODE SEGMENT USE16
ASSUME CS:CODE,DS:DATA,SS:STACK
MAIN PROC NEAR
START: MOV AX,DATA
MOV DS,AX
MOV CX,64
LEA SI,CONFIG
A1: MOV EAX,NUMBER
MOV DX,0CF8H
OUT DX,EAX
MOV DX,0CFCH
IN EAX,DX
MOV [SI],EAX
ADD SI,4
ADD NUMBER,4
LOOP A1 ;get PCI configure register value (0-255)
LEA SI,CONFIG ;display the are 256 register's value
A2: MOV CX,8
MOV BX,DATA1 ;display offset address
CALL BINIHEX
MOV BX,3AH ;display :
CALL PRINT
A3: MOV BX,20H ;display SP
CALL PRINT
MOV DI,SI
ADD DI,DATA1
MOV BX,[DI]
CALL BINIHEX
ADD DATA1,2
CMP DATA1,256
JZ EXIT
LOOP A3
MOV BX,0DH
CALL PRINT
MOV BX,0AH
CALL PRINT
JMP A2
EXIT: MOV AH,4CH
INT 21H
MAIN ENDP
BINIHEX PROC NEAR
PUSH EAX
PUSH EBX
PUSH ECX
PUSH EDX
MOV CH,4
ROTATE: MOV CL,4
ROL BX,CL
MOV AL,BL
AND AL,0FH
ADD AL,30H
CMP AL,3AH
JL PRINTIT
ADD AL,7H
PRINTIT: MOV DL,AL
MOV AH,2
INT 21H
DEC CH
JNZ ROTATE
POP EDX
POP ECX
POP EBX
POP EAX
RET
BINIHEX ENDP
PRINT PROC NEAR
PUSH EAX
PUSH EDX
MOV DL,BL
MOV AH,2
INT 21H
POP EDX
POP EAX
RET
PRINT ENDP
CODE ENDS
END MAIN
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -