?? da.asm
字號:
;386以上微機適用
;純dos下才能使用
;tasm4.1或以上編譯
;*********************;
;* 0832 *;
;*********************;
io_plx_device_id equ 05406h ;TPC卡設備ID
io_plx_vendor_id equ 010b5h ;TPC卡廠商ID
IO_PLX_SUB_ID EQU 0905410B5H ;TPC卡子設備及廠商ID
DA EQU 228H-200H ;0832端口地址
;--------------------------------------
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,'$'
MESS1 DB 'START D/A--1,press any key to next step !',0DH,0AH,'$'
MESS2 DB 'START D/A--2,press any key to next step !',0DH,0AH,'$'
MESS3 DB 'START D/A--3,press any key to end !',0DH,0AH,'$'
SINBUF DB 128,88,53,24,6,0,6,24,53,88,128,168,203,232
DB 250,255,250,232,203,168
data ends
stacks segment
db 100 dup (?)
STA DB 20 DUP(?)
TOP EQU LENGTH STA
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卡資源并顯示
MOV AX,TOP
MOV SP,AX
MOV DX,OFFSET MESS1
MOV AH,09H
INT 21H
A1:
MOV CX,0FFH
MOV DX,word ptr io_base_address
add dx,DA
MOV AL,00H
BBB:
OUT DX,AL
INC DX
OUT DX,AL
DEC DX
ADD AL,10H
CMP AL,00H
JNZ BBB
LOOP BBB
sti
MOV AH,01H
INT 16H
jz a1
mov ah,00h
int 16h
CRLF
MOV DX,OFFSET MESS2
MOV AH,09H
INT 21H
DDD:
MOV CX,0FFH
MOV DX,word ptr io_base_address
add dx,DA
MOV AL,00H
EEE:
OUT DX,AL
INC DX
OUT DX,AL
DEC DX
ADD AL,10H
CMP AL,0F0H
JNZ EEE
FFF:
OUT DX,AL
INC DX
OUT DX,AL
DEC DX
SUB AL,10H
CMP AL,00H
JNZ FFF
LOOP EEE
sti
MOV AH,01H
INT 16H
jz ddd
mov ah,00h
int 16h
CRLF
MOV DX,OFFSET MESS3
MOV AH,09H
INT 21H
GGG:
MOV CX,0FFH
MOV DX,word ptr io_base_address
add dx,DA
HHH:
MOV SI,OFFSET SINBUF
MOV BL,20
III:
MOV AL,[SI]
OUT DX,AL
INC DX
OUT DX,AL
DEC DX
INC SI
DEC BL
JNZ III
LOOP HHH
sti
MOV AH,01H
INT 16H
jz ggg
mov ah,00h
int 16h
mov ax,4c00h
int 21h ;退出
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 + -