📄 a2.asm
字号:
; Program by bini.yi 2002/04 QQ:101546 ICQ:64008355
; http://biniyi.com
;
; ATA/ATAPI Viewer
;
.286c
DATA SEGMENT
getdata1 db 530 dup(0)
co1 db 0ECH
co2 db 04H
co3 db 04H
msgme db 'ATA/ATAPI View'
msg1 db 0AH,0DH,'EIDE Primary master controller SN: $'
msg2 db 0AH,0DH,' Firmware revision: $'
msg3 db 0AH,0DH,' Model number: $'
msg4 db 0AH,0DH,' Cylinders: $'
msg5 db 0AH,0DH,' Heads: $'
msg6 db 0AH,0DH,0AH,0DH,'EIDE Primary slave controller SN: $'
msg7 db 0AH,0DH,0AH,0DH,'EIDE Secondary msater controller SN: $'
msg8 db 0AH,0DH,0AH,0DH,'EIDE Secondary slave controll SN: $'
conbcd dW 10000,1000,100,10,1
DATA ENDS
STACK1 SEGMENT PARA STACK
DW 20 DUP(0)
STACK1 ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACK1
START:
MOV AX,DATA
MOV DS,AX
MOV ES,AX
MOV BX,01F0H ;Primary master controller
CALL fourlo
MOV CX,212H ;Primary slave controller
LEA DI,OFFSET getdata1
MOV AL,0H
CLEGA:
MOV [DI],AL
INC DI
LOOP CLEGA
MOV [co2],04H
MOV [co3],03H
MOV [co1],0A1H
MOV DX,01F6H
MOV AL,0F0H
OUT DX,AL
MOV AL,08H
INC DX
OUT DX,AL
MOV CX,8000H
WAITLO:
IN AL,DX
CMP AL,00H
MOV AL,0A1H
LOOP WAITLO
MOV [co1],0A1H
MOV BX,01F0H
CALL fourlo
MOV CX,212H ;Secondary master controller
LEA DI,OFFSET getdata1
MOV AL,0H
CLEGA1:
MOV [DI],AL
INC DI
LOOP CLEGA1
MOV [co2],04H
MOV [co3],02H
MOV [co1],0A1H
MOV DX,0176H
MOV AL,0E0H
OUT DX,AL
MOV AL,08H
INC DX
OUT DX,AL
MOV CX,8000H
WAITLO1:
IN AL,DX
CMP AL,00H
MOV AL,0A1H
LOOP WAITLO1
MOV [co1],0A1H
MOV BX,0170H
CALL fourlo
MOV CX,212H ;Secondary slave controller
LEA DI,OFFSET getdata1
MOV AL,0H
CLEGA2:
MOV [DI],AL
INC DI
LOOP CLEGA2
MOV [co2],04H
MOV [co3],01H
MOV [co1],0A1H
MOV DX,0176H
MOV AL,0F0H
OUT DX,AL
MOV AL,08H
INC DX
OUT DX,AL
MOV CX,8000H
WAITLO2:
IN AL,DX
CMP AL,00H
MOV AL,0A1H
LOOP WAITLO2
MOV [co1],0A1H
MOV BX,0170H
CALL fourlo
EXIT1:
MOV AH,4CH
INT 21H
fourlo Proc near ;Get ATA/ATAPI identify drive table
CLI
MOV AX,DS
MOV ES,AX
MOV DI,OFFSET getdata1
MOV DX,BX
ADD DX,07H
MOV AL,[co1]
OUT DX,AL
CHK1:
IN AL,DX
TEST AL,80H
JNZ CHK1
TEST AL,08H
JZ SNUM
GETDA:
MOV AX,DS
MOV ES,AX
MOV DX,BX
IN AX,DX
STOSW
ADD DX,07H
JMP CHK1
SNUM: ;Show information
LEA DI,OFFSET getdata1
LEA SI,OFFSET co3
MOV AL,[SI]
CMP AL,04H
JE PMAS
CMP AL,03H
JE PSLA
CMP AL,02H
JE SMAS
CMP AL,01H
JE SSLA
PMAS:
MOV DX,OFFSET msg1
JMP ENDAS
PSLA:
MOV DX,OFFSET msg6
JMP ENDAS
SMAS:
MOV DX,OFFSET msg7
JMP ENDAS
SSLA:
MOV DX,OFFSET msg8
ENDAS:
MOV CX,0AH
MOV BX,1BH
LISTS:
MOV AH,09H
INT 21H
LEA DI,OFFSET getdata1
ADD DI,BX
LIS1:
MOV DL,[DI]
CMP DL,20H
JB OTHE
CMP DL,7EH
JNB OTHE
MOV AH,02
INT 21H
OTHE:
MOV DL,[DI-1]
CMP DL,20H
JB LOX
CMP DL,7EH
JNB LOX
MOV AH,02
INT 21H
LOX:
INC DI
INC DI
LOOP LIS1
FIRMN:
MOV AH,[co2]
CMP AH,04H
JNE MODELN
DEC AH
MOV [co2],AH
MOV DX,OFFSET msg2
MOV BX,2FH
MOV CX,04
JMP LISTS
MODELN:
MOV AH,[co2]
CMP AH,03H
JNE CYHEN
DEC AH
MOV [co2],AH
MOV DX,OFFSET msg3
MOV BX,37H
MOV CX,14H
JMP LISTS
CYHEN:
MOV AH,09H
MOV DX,OFFSET msg4
INT 21H
LEA DI,OFFSET getdata1
ADD DI,02H
MOV AX,[DI]
MOV CX,5
MOV DH,0
CONV: ;Convert cylindes and heads number ASCII
MOV BL,0
LEA SI,OFFSET conbcd
CONVS:
SUB AX,[SI]
JC NEXT
INC BL
JMP CONVS
NEXT:
ADD AX,[SI]
PUSH AX
INC SI
INC SI
CMP BL,0
JE CHECK
MOV DH,1
JMP NEXT2
NEXT1:
ADD BL,20H
JMP ENDCHK
NEXT2:
ADD BL,30H
JMP ENDCHK
CHECK:
CMP DH,0
JE NEXT1
JMP NEXT2
ENDCHK:
MOV AH,02H
MOV DL,BL
INT 21H
POP AX
MOV BL,0
LOOP CONVS
MOV AH,[co2]
CMP AH,02H
JE HEADS
JMP ENDFOR
HEADS:
DEC AH
MOV [co2],AH
LEA DX,OFFSET msg5
MOV AH,09H
INT 21H
LEA DI,OFFSET getdata1
ADD DI,06H
MOV AX,[DI]
MOV CX,5
MOV DH,0
JMP CONV
ENDFOR:
RET
fourlo endp
CODE ENDS
END START
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -