AutoCAD 3DMAX C语言 Pro/E UG JAVA编程 PHP编程 Maya动画 Matlab应用 Android
Photoshop Word Excel flash VB编程 VC编程 Coreldraw SolidWorks A Designer Unity3D
 首页 > 汇编语言

汇编源码--sertype

51自学网 2015-09-08 http://www.51zixue.net
comment *    SERTYPE.ASM    Purpose:    Determines the type of UART in each serial port    Author:    Douglas Boling, in PcMag. With some modifications by Yousuf Khan.*dossegbdseg   segment at 40h  ;bios data segment        com1    dw      ?        com2    dw      ?        com3    dw      ?        com4    dw      ?        ends_data   segment para 'data'        uart1   db      0        uart2   db      0        uart3   db      0        uart4   db      0        portmsg db      "COMx: $"        x8250   db      "NS 8250 (non-FIFO)",13,10,"$"        x16450  db      "NS 8250A/16450/16550 (non-FIFO)",13,10,"$"        xfifo   db      "NS 16550A/Intel 82510 (FIFO)",13,10,"$"        xdma    db      "IBM type 3 (FIFO/DMA)",13,10,"$"        pas_de_ports    db      "No serial ports detected",13,10,"$"        ends_stack  segment para stack 'stack'        db      200h dup (?)        endscseg    segment para 'code'        mov     ax, bdseg        mov     es, ax          ;ES := Bdseg        mov     ax, _data        mov     ds, ax          ;DS := _data        assume  cs:cseg, ds:_data, es:bdseg, ss:_stack        xor     al, al          ;# of serial ports = 0        mov     dx, [com1]        cmp     dx, 0        je      eoproc        inc     al              ;# of serial ports = 1        push    ax        call    uartdet        mov     [uart1], al     ;remember the type of this UART        pop     ax        mov     dx, [com2]        cmp     dx, 0        je      eoproc        inc     al              ;# of serial ports = 2        push    ax        call    uartdet        mov     [uart2], al        pop     ax        mov     dx, [com3]        cmp     dx, 0        je      eoproc        inc     al              ;# of serial ports = 3        push    ax        call    uartdet        mov     [uart3], al        pop     ax        mov     dx, [com4]        cmp     dx, 0        je      eoproc        inc     al              ;# of serial ports = 4        push    ax        call    uartdet        mov     [uart4], al        pop     axeoproc:        call    disp        mov     ah, 4ch        int     21hdelay   macro        jmp     $+2        endmuartdet proc    near        push    bx        push    cx        mov     bx, dx          ;save starting i/o addr        add     dx, 4           ;point to modem ctrl reg        in      al, dx          ;disable interrupts        push    ax        and     al, 11111011b        out     dx, al        mov     ch, 0           ;assume type 0        mov     dx, bx        add     dx, 7           ;see if scratch reg exists        mov     al, 55h        cli        out     dx, al          ;write to scratch reg        delay        in      al, dx          ;read back        cmp     al, 55h        jne     endudet        mov     al, 0AAh        out     dx, al          ;write to scratch reg        delay        in      al, dx          ;read back        sti        cmp     al, 0AAh        jne     endudet        inc     ch              ;assume type 1        mov     dx, bx        add     dx, 2           ;point to FIFO ctrl reg        mov     al, 7           ;attempt to enable FIFOs        cli        out     dx, al        delay        in      al, dx          ;read interrupt ID reg        sti        and     al, 0c0h        ;strip all but FIFO bits        jz      endudet         ;if bits 0, 16450/16550        inc     ch              ;assume type 2        mov     dx, bx        add     dx, 8003h       ;point to enhanced reg 1        cli        in      al, dx        push    ax        or      al, 01000000b   ;enable DMA transmission        out     dx, al        push    dx        mov     dx, bx        add     dx, 2        in      al, dx        mov     cl, al        pop     dx              ;restore enhanced reg 1        pop     ax        out     dx, al        sti        and     cl, 0c0h        ;again mask all but FIFO ID        cmp     cl, 40h        jne     endudet         ;must be type 2 (FIFO)        inc     ch              ;must be type 3 (DMA)endudet:        pop     ax        mov     dx, bx        add     dx, 4           ;point to modem ctrl reg        out     dx, al          ;restore initial condition        xor     ax, ax        mov     al, ch        mov     dx, bx        pop     cx        pop     bx        retuartdet endpdisp    proc    near        push    ax      ;save AX        cmp     al, 0   ;no serial ports?        je      noports        mov     bx, offset ds:[uart1]   ;offset of UART type field        mov     di, offset ds:[portmsg][3] ;offset of 4th char in message        mov     cx, 0        mov     cl, al  ;number of iterations@l1:        ;        ;write "COMx: " message substituting "x" for proper comport #        ;        mov     dl, 4        sub     dl, cl        add     dl, 30h ;convert to ASCII number        mov     [di], dl        lea     dx, portmsg        mov     ah, 9        int     21h        ;        ;write the UART type now        ;        mov     dl, [bx]        cmp     dl, 0        jne     @t2        lea     dx, x8250        mov     ah, 9        int     21h        jmp     @eot@t2:    cmp     dl, 1        jne     @t3        lea     dx, x16450        mov     ah, 9        int     21h        jmp     @eot@t3:    cmp     dl, 2        jne     @t4        lea     dx, xfifo        mov     ah, 9        int     21h        jmp     @eot@t4:    lea     dx, xdma        mov     ah, 9        int     21h@eot:   inc     bx        loop    @l1        jmp     eoproc2noports:        lea     dx, pas_de_ports        mov     ah, 9        int     21heoproc2:        pop     ax        retdisp    endp        ends        end; EOF SERTYPE.ASM

 

 

 
上一篇:简单的取系统时间小程序  下一篇:汇编源码--showmem