khakestany
جمعه 01 اسفند 1393, 10:43 صبح
با سلام
من برای خوندن اطلاعات یک پورت از اسمبلی استفاده کردم . چطور میتونم این کد را در دلفی انجام دهم و یا کد نوشته شده را در دلفی استفاده کنم. کد نوشته شده در اسمبلی به شرح زیر است:
model small
.code
org 100h
r_f_port proc
push bx
push cx
push dx
;***************init port************************
push bx
mov ah,0
mov dx,1
mov al,0EFh
int 14h
pop bx
;************************************************
mov cx,5000
push 49
or bx,bx
jnz cont1
pop dx
push 50
jmp cont7
;; data not ready
cont1:
pop dx
push 50
dec cx
jcxz cont7
pop dx
push 51
call delay1
mov dx,03fdh
in al,dx
test al,1
jz cont1
;; CX for counter
mov cx,0
cont2:
mov dx,03f8h
in al,dx
test al,080h
jz cont2
cont3:
mov [bx],al
inc bx
inc cx
cmp cx,5
je cont4
cont5:
call delay1
mov dx,03fdh
in al,dx
test al,1
jz cont5
mov dx,03f8h
in al,dx
jmp cont3
cont4:
mov al,[bx-5]
and al,7
mov [bx],al
mov al,[bx-5]
and al,16
mov [bx+1],al
mov al,[bx-4]
and al,8
mov [bx+2],al
mov dl,byte ptr[bx-1] ; save lower byte
mov dh,byte ptr[bx-2]
mov al,byte ptr[bx-3]
mov ah,byte ptr[bx-4] ; save higher byte
and ax,077fh
shl al,1
shr ax,1
push ax
shr ax,1
shr ax,1
mov [bx+6],ax
shl dl,1
shr dx,1
pop ax
mov cl,14
shl ax,cl
or dx,ax
mov word ptr[bx+4],dx
cont7:
pop ax
pop dx
pop cx
pop bx
mov [bx],al
retf
r_f_port endp
;************************************************
delay1 proc
push dx
mov dx,8000
loop1:
dec dx
push dx
pop dx
cmp dx,0
jne loop1
pop dx
ret
delay1 endp
;***********************************************
end r_f_port
من برای خوندن اطلاعات یک پورت از اسمبلی استفاده کردم . چطور میتونم این کد را در دلفی انجام دهم و یا کد نوشته شده را در دلفی استفاده کنم. کد نوشته شده در اسمبلی به شرح زیر است:
model small
.code
org 100h
r_f_port proc
push bx
push cx
push dx
;***************init port************************
push bx
mov ah,0
mov dx,1
mov al,0EFh
int 14h
pop bx
;************************************************
mov cx,5000
push 49
or bx,bx
jnz cont1
pop dx
push 50
jmp cont7
;; data not ready
cont1:
pop dx
push 50
dec cx
jcxz cont7
pop dx
push 51
call delay1
mov dx,03fdh
in al,dx
test al,1
jz cont1
;; CX for counter
mov cx,0
cont2:
mov dx,03f8h
in al,dx
test al,080h
jz cont2
cont3:
mov [bx],al
inc bx
inc cx
cmp cx,5
je cont4
cont5:
call delay1
mov dx,03fdh
in al,dx
test al,1
jz cont5
mov dx,03f8h
in al,dx
jmp cont3
cont4:
mov al,[bx-5]
and al,7
mov [bx],al
mov al,[bx-5]
and al,16
mov [bx+1],al
mov al,[bx-4]
and al,8
mov [bx+2],al
mov dl,byte ptr[bx-1] ; save lower byte
mov dh,byte ptr[bx-2]
mov al,byte ptr[bx-3]
mov ah,byte ptr[bx-4] ; save higher byte
and ax,077fh
shl al,1
shr ax,1
push ax
shr ax,1
shr ax,1
mov [bx+6],ax
shl dl,1
shr dx,1
pop ax
mov cl,14
shl ax,cl
or dx,ax
mov word ptr[bx+4],dx
cont7:
pop ax
pop dx
pop cx
pop bx
mov [bx],al
retf
r_f_port endp
;************************************************
delay1 proc
push dx
mov dx,8000
loop1:
dec dx
push dx
pop dx
cmp dx,0
jne loop1
pop dx
ret
delay1 endp
;***********************************************
end r_f_port