?? sru.asm
字號(hào):
CRLF MACRO ;PRINT CR AND LF
MOV AH,02H
MOV DL,0DH
INT 21H
MOV AH,02H
MOV DL,0AH
INT 21H
ENDM
.MODEL SMALL
.STACK 256
.DATA
MESS0 DB '**********************',0DH,0AH,'$'
MESS1 DB '* 1 IO PROT *',0DH,0AH,'$'
MESS2 DB '* 2 MEMERY *',0DH,0AH,'$'
MESS3 DB '* 3 ISA *',0DH,0AH,'$'
MESS4 DB '* 4 PCI *',0DH,0AH,'$'
MESS5 DB '* 5 PCI SCAN *',0DH,0AH,'$'
MESS6 DB '* 6 ROUTING TABLE *',0DH,0AH,'$'
MESS7 DB '* 0 EXIT *',0DH,0AH,'$'
MESS8 DB '***********************',0DH,0AH,'$'
MESS9 DB 'PLEASE SELECT THE NUMBER:$'
MESS10 DB 'ERROR!',0DH,0AH,'$'
MESS11 DB 'INPUT THE BEGAINING ADDRESS(0000H~FF00H):',0DH,0AH,'$'
MESS12 DB 'INPUT SEGMENT ADDRESS(0000H~0F000H):',0DH,0AH,'$'
MESS13 DB 'INPUT ENABLE ADDRESS(0000H~0FFFFH):',0DH,0AH,'$'
MESS14 DB 'INPUT INDEX PORT ADDRESS:',0DH,0AH,'$'
MESS15 DB 'INPUT BUS NUMBER:',0DH,0AH,'$'
MESS16 DB 'INPUT DEVICE NUMBER:',0DH,0AH,'$'
MESS17 DB 'INPUT FUNCTION NUMBER:',0DH,0AH,'$'
MESS18 DB 'THE BUS NUMBERS ARE:','$'
MESS19 DB 'THE DEVICE NUMBERS ARE:','$'
MESS20 DB 'THE FUNCTION NUMBERS ARE:','$'
MESS21 DB 'THE RESULTS ARE:',0DH,0AH,'$'
MESS22 DB 'THE ROUTING TABLE IS:',0DH,0AH,'$'
.586
.CODE
.STARTUP
MAIN PROC FAR
;******************************************************************
CALL CLRSCR
MOV AH,09H
MOV DX,OFFSET MESS0
INT 21H
MOV DX,OFFSET MESS1
INT 21H
MOV DX,OFFSET MESS2
INT 21H
MOV DX,OFFSET MESS3
INT 21H
MOV DX,OFFSET MESS4
INT 21H
MOV DX,OFFSET MESS5
INT 21H
MOV DX,OFFSET MESS6
INT 21H
MOV DX,OFFSET MESS7
INT 21H
MOV DX,OFFSET MESS8
INT 21H
MOV DX,OFFSET MESS9
INT 21H ;PRINT THE MESSAGE
;-----------------------------------------------------------------------------------
CALL GETNUM ;GET THE SELECTED NUMBER TO DL
;-----------------------------------------------------------------------------------
CMP DL,00H
JE EXT
CMP DL,01H
JE IO
CMP DL,02H
JE MEM
CMP DL,03H
JE ISA
CMP DL,04H
JE PCI
CMP DL,05H
JE PCISCAN
CMP DL,06H
JE RT
;-----------------------------------------------------------------------------------
EXT: CALL EXIT ;EXIT
IO: CALL IOPRINT
MEM: CALL MEMPRINT
ISA: CALL ISAPRINT
PCI: CALL PCIPRINT
PCISCAN:CALL PCISCANPRINT
RT: CALL RTPRINT
MAIN ENDP
;***********************************************************************************
EXIT PROC NEAR
XOR AL,AL
MOV AH,4CH
INT 21H
EXIT ENDP
;***********************************************************************************
;GET THE NUMBER TO SELECT ITEM
GETNUM PROC NEAR
XOR DX,DX
MOV AH,01H
INT 21H
SUB AL,30H
MOV DL,AL
RET
GETNUM ENDP
;*******************************************************************************
CLRSCR PROC NEAR
PUSHA
MOV AH,07H
MOV AL,00H
MOV BH,07H
MOV CH,00H
MOV CL,00H
MOV DH,24H
MOV DL,79H
INT 10H ;CLEAR SCREEN
;------------------------------------------------------------------------------
MOV DH,00H
MOV DL,00H
MOV BH,00H
MOV AH,02H
INT 10H ;PLACE CURSOR
POPA
RET
CLRSCR ENDP
;******************************************************************************
;PLACE ADDRESS TO DX
GETADDR PROC NEAR
PUSH CX
XOR DX,DX
CIRCLE: MOV AH,01H
INT 21H
CMP AL,0DH
JZ BACK
CMP AL,20H
JZ BACK
SUB AL,30H
JB ERR
CMP AL,0AH
JB GET
SUB AL,07H
CMP AL,0FH
JBE GET
CMP AL,2AH
JB ERR
SUB AL,20H
GET: MOV CL,04H
SHL DX,CL
XOR AH,AH
ADD DX,AX
JMP CIRCLE
ERR: MOV AH,09H
MOV DX,OFFSET MESS10
INT 21H
CALL EXIT
BACK: PUSH DX
CRLF
POP DX
POP CX
RET
GETADDR ENDP
;*******************************************************************************
;PRINT THE NUMBER IN AL
ASC PROC NEAR
PUSH CX
PUSH DX
MOV CH,02H
MOV CL,04H
CIR1: ROL AL,CL
MOV DH,AL
AND AL,0FH
ADD AL,30H
CMP AL,3AH
JL PRINT
ADD AL,07H
PRINT: MOV DL,AL
MOV AH,02H
INT 21H
MOV AL,DH
DEC CH
CMP CH,00H
JNE CIR1
MOV DL,20H
MOV AH,02H
INT 21H
POP DX
POP CX
RET
ASC ENDP
;******************************************************************************
;PRINT ISA PORT'S REGISTERS
ISAPRINT PROC NEAR
CALL CLRSCR
MOV AH,09H
XOR DX,DX
MOV DX,OFFSET MESS14
INT 21H
CALL GETADDR
CIR2: PUSH DX
MOV DH,04H
MOV DL,00H
MOV BH,00H
MOV AH,02H
INT 10H
POP DX
XOR AL,AL
MOV CH,10H
COLU: MOV CL,10H
ROW: OUT DX,AL
INC DX
INC AL
;
PUSH AX
XOR AL,AL
IN AL,DX
CALL ASC
POP AX
DEC DX
DEC CL
CMP CL,00H
JNZ ROW
PUSH DX
PUSH AX
CRLF
POP AX
POP DX
DEC CH
JNZ COLU
JMP CIR2
BACK1: CALL EXIT
RET
ISAPRINT ENDP
;*****************************************************************************
;PRINT IO REGISTERS
IOPRINT PROC NEAR
CALL CLRSCR
MOV AH,09H
MOV DX,OFFSET MESS11
INT 21H
CALL GETADDR
MOV BX,DX
CIR3: PUSHA
MOV DH,04H
MOV DL,00H
MOV BH,00H
MOV AH,02H
INT 10H
POPA
MOV CH,10H
COLU1: MOV CL,10H
ROW1: IN AL,DX
INC DX
CALL ASC
DEC CL
JNZ ROW1
PUSHA
CRLF
POPA
DEC CH
JNZ COLU1
MOV DX,BX
JMP CIR3
RET
IOPRINT ENDP
;******************************************************************************
MEMPRINT PROC NEAR
CALL CLRSCR
MOV AH,09H
MOV DX,OFFSET MESS12
INT 21H
CALL GETADDR
MOV ES,DX
MOV AH,09H
MOV DX,OFFSET MESS13
INT 21H
CALL GETADDR
MOV SI,DX
CIR4: PUSHA
MOV DH,06H
MOV DL,00H
MOV BH,00H
MOV AH,02H
INT 10H
POPA
MOV CH,10H
COLU2: MOV CL,10H
ROW2: MOV AL,ES:[SI]
INC SI
CALL ASC
DEC CL
CMP CL,00H
JNE ROW2
PUSHA
CRLF
POPA
DEC CH
CMP CH,00H
JNE COLU2
MOV SI,DX
JMP CIR4
RET
MEMPRINT ENDP
;******************************************************************************
PCIPRINT PROC NEAR
CALL CLRSCR
XOR EDX,EDX
MOV AH,09H
MOV DX,OFFSET MESS15
INT 21H
CALL GETADDR
MOV CL,10H
SAL EDX,CL
MOV EBX,EDX
BTS EBX,31 ;MAKE PCI ENABLE
XOR EDX,EDX
MOV AH,09H
MOV DX,OFFSET MESS16
INT 21H
CALL GETADDR
MOV CL,0BH
SAL EDX,CL
ADD EBX,EDX
XOR EDX,EDX
MOV AH,09H
MOV DX,OFFSET MESS17
INT 21H
CALL GETADDR
MOV CL,08H
SAL EDX,CL
ADD EBX,EDX
MOV EAX,EBX ;PLACE PCI NUMBER TO EAX
MOV ECX,EBX
;------------------------------------------------------------------------------
MOV DX,0CF8H
CIR5: PUSH ECX
PUSHA ;PLACE THE CURSOR
MOV DH,07H
MOV DL,00H
MOV BH,00H
MOV AH,02H
INT 10H
POPA
MOV CH,10H
COLU3: MOV CL,04H
ROW3: OUT DX,EAX
ADD DX,04H
IN EAX,DX
SUB DX,04H
PUSH EBX
PUSH CX
MOV CL,08H
MOV CH,04H
CIRPRT: MOV EBX,EAX ;SAVE EAX
AND EAX,000000FFH
CALL ASC ;PRINT AL ON SCREEN
ROR EBX,CL
MOV EAX,EBX
DEC CH
JNZ CIRPRT
POP CX
POP EBX
ADD EBX,04H
MOV EAX,EBX
DEC CL
JNZ ROW3
PUSHA
CRLF
POPA
DEC CH
JNZ COLU3
POP ECX
MOV EAX,ECX
MOV EBX,ECX
JMP CIR5
RET
PCIPRINT ENDP
;*****************************************************************************
PCISCANPRINT PROC NEAR
CALL CLRSCR
MOV AH,09H
MOV DX,OFFSET MESS21
INT 21H
XOR EAX,EAX
XOR EBX,EBX
XOR ECX,ECX
XOR EDX,EDX
BTS EBX,31
CIR6: MOV EAX,EBX
MOV DX,0CF8H
OUT DX,EAX
MOV DX,0CFCH
IN AX,DX
ADD EBX,00000100H ;POINT TO NEXT FUNCTION
CMP EBX,080FFFF00H
JZ BACK2
CMP AX,0FFFFH
JZ CIR6
;------------------------------------------------------------------------------
MOV CL,10H
SUB EBX,00000100H
MOV EAX,EBX
SAR EAX,CL
PUSHA
MOV AH,09H
MOV DX,OFFSET MESS18
INT 21H
POPA
CALL ASC ;PINRT BUS NUMBERS
;------------------------------------------------------------------------------
MOV CL,0BH
MOV EAX,EBX
AND EAX,0000F800H
SAR EAX,CL
PUSHA
MOV AH,09H
MOV DX,OFFSET MESS19
INT 21H
POPA
CALL ASC ;PRINT DEVICE NUMBERS
;------------------------------------------------------------------------------
MOV CL,08H
MOV EAX,EBX
AND EAX,00000700H
SAR EAX,CL
PUSHA
MOV AH,09H
MOV DX,OFFSET MESS20
INT 21H
POPA
CALL ASC ;PRINT FUNCTION NUMBERS
PUSHA
CRLF
POPA
;------------------------------------------------------------------------------
ADD EBX,00000100H
JMP CIR6
;------------------------------------------------------------------------------
BACK2: CALL EXIT ;FINISH SEARCHING
PCISCANPRINT ENDP
;*****************************************************************************
RTPRINT PROC NEAR
CALL CLRSCR
MOV AH,09H
MOV DX,OFFSET MESS22
INT 21H
XOR EAX,EAX
XOR EBX,EBX
XOR ECX,ECX
XOR EDX,EDX
XOR SI,SI
XOR DI,DI ;PLACE DI=0000H
MOV AX,0F000H
MOV ES,AX ;PLACE ES=0F000H
MOV EAX,52495024H
MOV CX,4000H ;THE TIMES TO CIRCLE
CLD ;DI=DI+4
REPNZ SCASD ;FIND THE STRING $PIR
SUB DI,04H ;THE ENABLE ADDRESS TO DI
MOV DX,DI
MOV BX,ES:[DI+6] ;PLACE THE SIZE OF TABLE TO BX
COLU4: MOV CL,10H
ROW4: MOV AL,ES:[DI]
CALL ASC
INC DI
DEC CL
JNZ ROW4
PUSHA
CRLF
POPA
SUB BX,10H
JNZ COLU4
RET
RTPRINT ENDP
;*****************************************************************************
.EXIT
END
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -