Biopsychology.org

English

Artículos Casos   Libros Apuntes Otros  

Análisis del Comportamiento Verbal Articulatorio en Conversaciones Grupales Espontáneas. E. Barrull, 1992. (esteban@biopsychology.org)

Atrás Arriba

 

BORRA.ASM
COS.ASM
DEC2ASC.ASM
DEC2BCD.ASM
DEUALAX.ASM
EALAX.ASM
ESPERA.ASM
SI2M.ASM
SIN_COS.ASM
SM2I.ASM

 

;
; Fixer:   	BORRA.ASM
;
; Borra una Matriu de N elements de simple presissió
;
; dins d'un mateix segment, es a dir: 0 ? N ? 16384
;
; Format:	mov    ax,segm
;		push   ax
;		mov    ax,desp
;		push   ax
;		mov    ax,N
;		push   ax
;		call   borra
;
;===================================================================
;
;
	.8087
	public	borra
cseg	segment	public 'code'
	assume 	cs:cseg
borra	proc	near
	push	bp
	mov	bp,sp
;
	push	ax
	push	cx
	push	si
	push	ds
;
	mov	ax,[bp+8]
	mov	ds,ax	;ds=segm Matriu
	mov	si,[bp+6]	;di=desp Matriu respectre segm
;
	mov	cx,[bp+4]	;cx=N%
;
	fldz		;cargem 0.0
;
ll:	fst	dword ptr [si]
	add	si,4
	loop	ll
;
	fstp	st	;botem 0.0
;
fi:	pop	ds
	pop	si
	pop	cx
	pop	ax
	pop	bp
	ret	6
borra	endp
;
cseg	ends
	end
 
;
; Fixer:     	COS.ASM
;
; Procediment:    cos
;
; Funció:	Calcula   st = cos(st)
;
; Format:	call    cos
;
; Es una subrutina (NEAR) per esser incluida en una llibreria
;
; necessita 3 posicions de la pila87 lliures a mes de st=argument
;
; al entrar st=argument
; al sortir st=cos(argument)
;
;===================================================================
;     st = argument     =========?     st = cos(argument)
;===================================================================
;
eseg	segment	public 'data'
menos2	dw	?2
sw87	dw	?
eseg	ends
;
	.8087
        	public	cos
;
cseg	segment	public 'code'
	assume	cs:cseg,es:eseg
cos 	proc	near
co	equ	2
;
	push	ax
	push	es
	mov	ax,eseg
	mov	es,ax
;
	fabs
	fild 	word ptr es:menos2 	;st = ?2
	fldpi                           ;st = pi
	fscale                          ;st = pi*2^?2 = pi/4
;
	fxch
	fstp 	st 	;eliminem ?2
	fxch 		;st = argument
;
co2:  	fprem 		;0 ? argument <st(1) = pi/4
	fstsw	word ptr es:sw87
	fwait
	mov	ah,byte ptr es:sw87+1
	sahf
	jpe	co2
	fxch
	fstp 	st 	;eliminem pi/4
;
	fptan                           ;st = X , st(1) = Y
;
	jnc 	co3 	;salta si cuadrants 0,1,2,3
	fchs                            ;cambiem els signes d'X i Y
	fxch
	fchs
	fxch
;
co3:	jnz	co4                     ;salta si cuadrants 0,1,4,5
	fxch
	fchs
;
co4:  	test 	ah,co 	;salta si cuadrants 0,2,4,6
	jz	co5
	fld	st
	fld	st(2)
	fadd
	fxch    	st(2)
	fsub
;
co5:
	fld	st
	fmul	st,st
	fxch	st(2)
	fmul	st,st
	fadd    	st,st(2)
	fsqrt
;
	fdiv
;
	fxch
	fstp 	st 	;eliminem X^2
;
	pop	es
	pop	ax
	ret
cos	endp
;
;
;====================================================================
;
cseg	ends
	end
;
;
 
;
; Fixer:		DEC2ASC.ASM
;
; Procediment:	dec2asc:far
;
; Format:	lea     ax,decimal
;		push    ax
;		lea     ax,car
;		push    ax
;		lea     ax,ncar
;		push    ax
;		call    dec2asc
;
;===================================================================
;
	public	dec2asc
;
cseg	segment	public 'code'
	assume	cs:cseg
;
dec2asc	proc	far
	push	bp
	mov	bp,sp
	push	ax
	push	bx
	push	dx
	push	si
	push	di
;
	mov	si,[bp+10]	;si apunta a decimal
	mov	dx,si
	add	dx,19	;dx apunta a final decimal+1
	mov	di,[bp+8]	;di apunta a car
	mov	bx,[bp+6]	;bx apunta a ncar
	mov	al,byte ptr [si]
	add	si,1
	cmp	al,'+'
	je	e1
	mov	byte ptr [di],al
	inc	di
;
e1:	mov	al,byte ptr [si]
	cmp	al,'0'
	jne	e2
	inc	si
	cmp	si,dx
	je	cero
	jmp	e1
;
e2:	mov	byte ptr [di],al
	inc	di
	inc	si
	cmp	si,dx
	je	fi
	mov	al,byte ptr [si]
	jmp	e2
;
cero:	mov	byte ptr [di],'0'
	inc	di
;
fi:	mov	ax,[bp+8]	;ax apunta a inici car
	sub	di,ax	;di = num caracters
	mov	word ptr [bx],di	;ncar = di
	pop	di
	pop	si
	pop	dx
	pop	bx
	pop	ax
	mov	sp,bp
	pop	bp
	ret	6
dec2asc	endp
;
cseg	ends
	end
 
;
; Fixer:		DEC2BCD.ASM
;
; Procediment:	dec2bcd:far
;
; Format:	lea    ax,decimal
;		push   ax
;		lea    ax,bcd
;		push   ax
;		call   dec2bcd
;
;=======================================================================
;
	public	dec2bcd
;
cseg	segment	public 'code'
	assume	cs:cseg
;
dec2bcd	proc	far
	push	bp
	mov	bp,sp
	push	ax
	push	si
	push	di
	push	cx
;
	mov	si,[bp+6]	;si apunta a bcd
	mov	di,[bp+8]	;di apunta a decimal
	add	di,18	;di apunta a final decimal
	mov	cx,9
;
e1:	mov	al,byte ptr [di]
	sub	al,30h
	mov	ah,al
	dec	di
	mov	al,byte ptr [di]
	sub	al,30h
	push	cx
	mov	cl,4
	shl	al,cl
	pop	cx
	add	ah,al
	mov	byte ptr [si],ah
	dec	di
	inc	si
	loop	e1
;
	mov	al,byte ptr [di]
	cmp	al,'?'
	je	neg
	mov	byte ptr [si],0
	jmp	fi
neg:	mov	byte ptr [si],10000000b
;
fi:	pop	cx
	pop	di
	pop	si
	pop	ax
	pop	bp
	ret	4
dec2bcd	endp
;
cseg	ends
	end
 
;
;  FIXER:         DEUALAX.ASM
;
;  Esta preparat per esser montat desde una llibreria
;
;  Calcula  10^X en simple precisió
;
;  X esta es st i es necessiten 2 posicions lliures en la pila87
;
;===================================================================
;                 st = X    ====?     st = 10^X
;===================================================================
;
	.8087
	extrn	dosalax:near
	public	deualax
cseg	segment	public 'code'
	assume	cs:cseg
;
deualax	proc	near
	fldl2t
	fmul
	call	dosalax
	ret
deualax	endp
;
cseg	ends
	end
;
 
;
;  FIXER:         EALAX.ASM
;
;  Esta preparat per esser montat desde una llibreria
;
;  Calcula  e^X en simple precisió
;
;  X esta es st i es necessiten 2 posicions lliures en la pila87
;
;===================================================================
;                 st = X    ====?     st = e^X
;===================================================================
;
	.8087
	extrn	dosalax:near
	public	ealax
cseg	segment	public 'code'
	assume	cs:cseg
;
ealax	proc	near
	fldl2e
	fmul
	call	dosalax
	ret
ealax	endp
;
cseg	ends
	end
;
 
;
; Fixer:		ESPERA.ASM
;
; Procediment:	espera
;
; Espera a que es pulsi qualsevol tecla per continuar.
; Es equivalent a  30 IF INKEY$="" THEN 30 de BASIC
;
; Es una subrutina FAR per esser incluida en una llibreria
; Nomes pot esser usada per un procediment .EXE o .COM
;
; Format d'us:
;		extrn  espera:far
;
;           	call   espera         ;dins del segment de codig del programa
;
;
	public	espera
cseg	segment	public 'code'
	assume	cs:cseg
espera	proc	far
	push	ax
	mov	ah,0
	int	16h	;funció BIOS
	pop	ax
	ret
espera	endp
;
cseg	ends
	end
;
 
;
;   Fixer:         SI2M.ASM
;
;  * SI2M Converteix una matriu A de numeros de simple presissió en format INTEL, en
;         la matriu A en format MICROSOFT.
;
; * Format:   push    segm d'A
;             push    desp d'A
;             push    dimensió d'A
;             call    si2m
;
;
;?------------------------------------------------------------
;
	public	si2m
;
cseg	segment	public 'code'
	assume	cs:cseg
;
si2m	proc	far
	push	bp
	mov	bp,sp
;
	push	ax
	push	cx
	push	dx
	push	si
	push	di
	push	ds
;
; recollim arguments de la pila
;
	mov	cx,[bp+6]	;cx = dimensió
	mov 	si,[bp+8] 	;si = desp.
	mov 	ax,[bp+10] 	;ds = segm.
	mov	ds,ax
;
;
lin2:	mov	dx,[si+2]
	mov 	ah,dh
	and	ah,80h
	shl	dh,1
	test	dl,80h
	jz	e21
	or	dh,1
e21:	cmp	dh,0
	je	zero2
	add	dh,(129?127)
	and	dl,7fh
	or	dl,ah
	mov 	[si+2],dx 	;guardem paraula alta convertida
	jmp	e22
zero2:  	mov	word ptr [si],0
	mov	word ptr [si+2],0
e22:  	add 	si,4 	;si apunta a nou element_linees
	loop 	lin2 	;tanquem bucle
;
; retornem al modul principal
;
fi:	pop	ds
	pop	di
	pop	si
	pop	dx
	pop	cx
	pop	ax
;
	mov	sp,bp
	pop	bp
	ret	6
si2m	endp
;
cseg	ends
	end
 
;
; FIXER:   	SIN_COS.ASM
;
; PROCEDIMENT:    sin_cos
;
; Es una subrutina NEAR per esser montada desde una llibreria
;
; al entrar st=argument
; al sortir st=sin(argument)  i  st(1)=cos(argument)
;
; necessita 3 posicions lliures de pila87 a més del argument en st
;
; necessita les seguents posicions en memoria:
;
;==================================================================
;    st = argument    =====?     st = sin(arg) , st(1) = cos(arg)
;==================================================================
;
eseg	segment	public 'data'
menos2	dw	?2
sw87	dw	?
eseg	ends
;
	.8087
          public	sin_cos
;
cseg	segment	public 'code'
	assume	cs:cseg,es:eseg
;
sin_cos	proc	near
s_c 	equ	2
	push	bx
	push	ax
	push	es
	mov	ax,eseg
	mov	es,ax
;
	mov bx,0 	;0 significa positiu
	ftst
	fstsw	word ptr es:sw87
	fwait
	mov	ah,byte ptr es:sw87+1
	sahf
	jnc	s_c1
	mov	bx,?1
	fabs
;
s_c1:	fild	word ptr es:menos2
	fldpi
	fscale
	fxch
	fstp 	st 	;eliminem ?2
	fxch
;
s_c2:	fprem
	fstsw	word ptr es:sw87
	fwait
	mov	ah,byte ptr es:sw87+1
	sahf
	jpe	s_c2
	fxch
	fstp 	st 	;eliminem pi/4
;
	fptan
;
	jnc 	s_c3 	;salta si cuadrants 0,1,2,3
	fchs
	fxch
	fchs
	fxch
;
s_c3:	jnz	s_c4                    ;salta si cuadrants 0,1,4,5
	fxch
	fchs
;
s_c4:  	test 	ah,s_c 	;salta si cuadrants 0,2,4,6
	jz	s_c5
	fld	st
	fld	st(2)
	fadd
	fxch    st(2)
	fsub
;
s_c5:
;	fxch 		;st= Y ? st(1)= X
	fld	st
	fmul	st,st
	fld	st(2)
	fmul	st,st
	fadd
	fsqrt 		;st = ?(Y^2+X^2)
;
	fdiv 	st(2),st                ;st(2)=cosinus
	fdiv 		;st=sinus i st(1)=cosinus
	fxch
 	cmp	bx,0
	je	s_c6
	fchs
;
s_c6:    pop	es
	pop	ax
	pop	bx
	ret
sin_cos	endp
;
;
cseg	ends
	end
;
 
;
;   Fixer:         SM2I.ASM
;
;  * SM2I Converteix la matriu A de numeros (simple presissió) en format
;    MICROSOFT,
;         en la matriu A en format INTEL.
;
; * Format:    push     segm d'A
;              push     desp d'A
;              push     dimensió d'A
;              call     sm2i
;
;?------------------------------------------------------------
;
	public	sm2i
;
cseg	segment	public 'code'
	assume	cs:cseg
;
sm2i	proc	far
	push	bp
	mov	bp,sp
	push	ax
	push	cx
	push	dx
	push	si
	push	ds
;
; recollim arguments
;
	mov 	cx,[bp+6]
	mov 	si,[bp+8]
	mov	ax,[bp+10]
	mov	ds,ax
;
lin1:	mov 	dx,[si+2]
	mov	ah,dl
	and	ah,80h
	sub	dh,(129?127)
	jbe	zero1
	shr	dh,1
	jc	e11
	and	dl,7fh
	jmp	e12
e11:	or	dl,80h
e12:	and	dh,7fh
	or	dh,ah
	mov 	[si+2],dx
	jmp	e13
zero1:	mov	word ptr [si],0
	mov	word ptr [si+2],0
e13:  	add 	si,4
	loop 	lin1
;
; retornem al modul principal
;
fi:	pop	ds
	pop	si
	pop	dx
	pop	cx
	pop	ax
   	mov	sp,bp
	pop	bp
	ret	6
sm2i	endp
;
cseg	ends
	end
 
 
 

© Biopsychology.org, 1998-2006

 
Última actualización:
22/03/06