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

📄 a2.asm

📁 ATA/ATAPI IDE设备列举程序 早年自己学ASM第一周所写的程序.现放出来分享.
💻 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 + -