📄 ad.asm
字号:
;386以上微机适用
;纯dos下才能使用
;tasm4.1或以上编译
;*********************;
;* 0809 *;
;*********************;
io_plx_device_id equ 05406h ;TPC卡设备ID
io_plx_vendor_id equ 010b5h ;TPC卡厂商ID
IO_PLX_SUB_ID EQU 0905410B5H ;TPC卡子设备及厂商ID
ADDX1 EQU 220H-200H ;0809端口地址
ADDX2 EQU 221H-200H
ADDX3 EQU 222H-200H
SPACE EQU 20H
ENTER_CR EQU 0DH
ENTER_LF EQU 0AH
DELAY_TIME EQU 0001H
DELAY_X1_LOOPNO EQU 0000H
DELAY_NO EQU 0FFFFH ;DON'T CHANGE
DISP_ADDXX_NO EQU 0005H
;--------------------------------------
CRLF MACRO
MOV DL,0DH
MOV AH,02H
INT 21H
MOV DL,0AH
MOV AH,02H
INT 21H
ENDM
;--------------------------------------
data segment
io_base_address db 4 DUP(0) ;TPC卡I/O基地址暂存空间
pcicardnotfind db 0dh,0ah,'TPC pci card not find or address/interrupt error !!!',0dh,0ah,'$'
iobaseaddress db 0dh,0ah,'TPC pci card I/O Base Address : ','$'
enter_return db 0dh,0ah,'$'
DISP_BUFFER DB(00)
data ends
stacks segment
db 100 dup (?)
STA DW 512 DUP (?)
stacks ends
code segment
assume cs:code,ds:data,ss:stacks,es:data
start:
.386
cli
mov ax,data
mov ds,ax
mov es,ax
mov ax,stacks
mov ss,ax
call findtpc ;查找TPC卡资源并显示
START1:
MOV DX,word ptr io_base_address
add dx,ADDX1
CALL DISP_ADDXX_NUM ;DISP ADDX1
MOV DX,word ptr io_base_address
add dx,ADDX2
CALL DISP_ADDXX_NUM ;DISP ADDX2
MOV DX,word ptr io_base_address
add dx,ADDX3
CALL DISP_ADDXX_NUM ;DISP ADDX3
CALL DISP_ENTER
MOV AH,01
INT 16H
JZ START1 ;COUNTION
MOV AH,4CH
INT 21H ;EXIT
DISP_ADDXX_NUM PROC NEAR
MOV CL,DISP_ADDXX_NO
DISP: OUT DX,AL
; CALL DELAY_X ;DELAY MODE1
; CALL DELAY_X1 ;DELAY MODE2
PUSH CX
MOV CX,DELAY_NO ;DELAY MODE3
LOOP1: NOP
DEC CX
JNZ LOOP1
POP CX
IN AL,DX
MOV BL,AL
CALL DISP_ADDXX ;DISP ADDXX
DEC CL
JNZ DISP
MOV AL,0
RET
DISP_ADDXX_NUM ENDP
DISP_ADDXX PROC NEAR ;DISP BL'S ASCII TO SCREEN
PUSH AX
PUSH BX
PUSH CX
PUSH DX
MOV AL,BL
MOV CL,04
SHR AL,CL
CALL DISP_CHAR
MOV AL,BL
AND AL,0FH
CALL DISP_CHAR
CALL DISP_SPACE
CALL DISP_SPACE
POP DX
POP CX
POP BX
POP AX
RET
DISP_ADDXX ENDP
DISP_CHAR PROC NEAR ;DISP AL'S CHAR TO SCREEN
PUSH AX
PUSH DX
MOV DL,AL
CMP DL,09
JLE NUM
ADD DL,07H
NUM: ADD DL,30H
CALL DISP_X
POP DX
POP AX
RET
DISP_CHAR ENDP
DISP_SPACE PROC NEAR
PUSH DX
MOV DL,SPACE
CALL DISP_X
POP DX
RET
DISP_SPACE ENDP
DISP_ENTER PROC NEAR
PUSH DX
MOV DL,ENTER_CR
CALL DISP_X
MOV DL,ENTER_LF
CALL DISP_X
POP DX
RET
DISP_ENTER ENDP
DISP_X PROC NEAR ;DISP DL'S ASCII TO SCREEN
PUSH AX
MOV AH,02
INT 21H
POP AX
RET
DISP_X ENDP
DELAY_X1 PROC NEAR
PUSH CX
POP CX
DELAY_X1 ENDP
DELAY_X PROC NEAR
PUSH BX
MOV BX,DELAY_TIME
CALL DELAY
POP BX
RET
DELAY_X ENDP
delay proc near ;delay time in bh,bl
push ax
push bx
push cx
push dx
mov ah,2ch ;bh is Seciend
int 21h ;bl is persent Seciend
add bx,dx ;PG use AX,BX,CX,DX
cmp bl,100
jle sec
sub bl,100
inc bh
sec: cmp bh,60
jle beg
sub bh,60
beg: int 21h
cmp dx,bx
jle beg
pop dx
pop cx
pop bx
pop ax
ret
delay endp
findtpc proc near ;查找TPC卡资源并显示
pushad
pushfd
MOV AX,0B101H
INT 1AH
JC findtpc_notfind ;检查PCI BIOS是否存在
MOV AX,0B102H
MOV CX,io_plx_device_id
MOV DX,io_plx_vendor_id
MOV SI,0
INT 1AH
JC findtpc_notfind ;检查TPC卡是否安装,设备号、厂商号
MOV AX,0B10AH
MOV DI,02CH
INT 1AH
JC findtpc_notfind
CMP ECX,IO_PLX_SUB_ID
JNZ findtpc_notfind ;检查TPC卡是否安装,子设备号、厂商号
MOV AX,0B10AH
MOV DI,18H
INT 1AH
JC findtpc_notfind ;读TPC卡I/O基址信息
mov dword ptr io_base_address,ecx
and ecx,1
jz findtpc_notfind ;检查是否为i/o基址信息
mov ecx,dword ptr io_base_address
and ecx,0fffffffeh
mov dword ptr io_base_address,ecx ;去除i/o指示位并保存
mov dx,offset iobaseaddress ;显示i/o提示信息
mov ah,09h
int 21h
mov ax,word ptr io_base_address
call dispword ;显示i/o基地址
mov dx,offset enter_return ;加回车符,换行符
mov ah,09h
int 21h
popfd
popad
ret
findtpc_notfind:
mov dx,offset pcicardnotfind ;显示未找到tpc卡提示信息
mov ah,09h
int 21h
mov ax,4c00h
int 21h ;退出
findtpc endp
dispword proc near ;显示子程序
push dx
push cx
push bx
mov cx,4
mov bx,16
dispword_loop1:
push ax
push cx
sub bx,4
mov cx,bx
shr ax,cl
and al,0fh ;首先取低四位
mov dl,al
cmp dl,9 ;判断是否<=9
jle dispword_num ;若是则为'0'-'9',ASCII码加30H
add dl,7 ;否则为'A'-'F',ASCII码加37H
dispword_num:
add dl,30h
mov ah,02h ;显示
int 21h
pop cx
pop ax
loop dispword_loop1
pop bx
pop cx
pop dx
ret ;子程序返回
dispword endp
code ends
end start
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -