Domingo 22 de Diciembre de 2024, 02:40
SoloCodigo
Bienvenido(a),
Visitante
. Por favor,
ingresa
o
regístrate
.
¿Perdiste tu
email de activación?
Inicio
Foros
Chat
Ayuda
Buscar
Ingresar
Registrarse
SoloCodigo
»
Foros
»
Programación General
»
ASM (Ensamblador)
(Moderador:
Eternal Idol
) »
Re: uso del coprocesador
« anterior
próximo »
Imprimir
Páginas: [
1
]
Autor
Tema: Re: uso del coprocesador (Leído 2650 veces)
Logan
Nuevo Miembro
Mensajes: 19
Re: uso del coprocesador
«
en:
Viernes 19 de Septiembre de 2003, 15:53 »
0
¡¡¡Hola Amigos!!!
Ok, tengo un problema, he estado tratando de programar algo del coprocesador, solo que he checado en libros y en paginas, y la verdad encuentro pocos ejemplos de programas que empleen instrucciones para el coprocesador, espero que alguien me pueda ayudar mandandome algun programa(por pequeño que sea) que maneje el coprosador.
Se los agradezco mucho, hasta pronto.
logan@itoaxaca.edu.mx
Tweet
Estamos aqui porque jamás terminaremos de aprender....
Super_G
Miembro MUY activo
Mensajes: 375
Re: uso del coprocesador
«
Respuesta #1 en:
Martes 23 de Septiembre de 2003, 06:45 »
0
.model tiny
.code
.387 ;con esta directiva decimos que se usaremos el coprocesador matematico 80387
org 100h
inicio:
fild n1 ;cargamos a ST(0) "n1"(ENTERO)
fild n2 ;cargamos a ST(0) "n2", recorre la pila y "n1" pasa a ST(1)(ENTERO)
faddp ;sumamos ST(0)+ST(1) y desempilamos en ST(0) (ENTERO)
fist r ;almacenamos en "r" (ENTERO)
fwait ;espera instruccion del procesador
fin: int 20h
n1 dw 1 ;numero uno
n2 dw 2 ;numero dos
r dw 0 ;resultado
end inicio
Logan
Nuevo Miembro
Mensajes: 19
Re: uso del coprocesador
«
Respuesta #2 en:
Miércoles 24 de Septiembre de 2003, 20:47 »
0
Gracias por el programita de suma Super_G, por cierto, he trabajado con una forma de mostrar en pantalla numeros fraccionarios pero no se si tu o alguien más conozca otra forma de hacerlo, lo que pasa es que me arroja una variación en el resultado de casi cualquier operacion (sumas en especifico), agradezco la ayuda que me puedas prestar (o alguien que sepa que es lo que pasa en este caso).
cuelgo el codigo de un programa que he usado para sumar dos numeros y mostrar el resultado en reales.
Hasta pronto!!!
;Programa que usa el coprocesador y muestra un numero de punto flotante con
;de precisión sencilla
.286
.287
DATAS SEGMENT
TEMP DW ?
WHOLE DW ?
FRACT DD ?
n1 dd -51.35
n2 dd 30.25
suma dd ?
DATAS ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATAS
;PROGRAMA PRINCIPAL QUE MUETRA NUMB
MAIN PROC FAR
MOV AX,DATAS
MOV DS,AX
; CALL LIMPIA
call sumar
CALL DISP ;MUETRA suma
MOV AH,4CH
INT 21H
MAIN ENDP
LIMPIA PROC FAR
MOV AH,6
MOV AL,0
MOV CX,0
MOV DH,23
MOV DL,79
MOV BH,7
INT 10H
RET
LIMPIA ENDP
sumar proc NEAR
fld n1
fadd n2
fstp suma
fwait
ret
sumar endp
DISPS PROC NEAR
MOV AH,6 ;MOSTRAR AL
MOV DL,AL
INT 21H
RET
DISPS ENDP
DISP PROC NEAR
FSTCW temp
OR temp,0C00H
FLDCW TEMP
FLD suma ;OBTENER AREA
FTST ;PROBAR AREA
FSTSW AX ;ESTADO AX
AND AX,4500H ;OBTENER C3,C2,C0
CMP AX,0100H ;PROBAR PARA -
JNE DISP1 ;SI ES POSITIVO
MOV AL,'-'
CALL DISPS ;MOSTRAR MENOS
DISP1:
FABS ;CONVERTIR ST EN POSITIVO
FRNDINT ;OBTENER NUMERO ENTERO
FIST WHOLE ;GUARDAR NUMERO ENTERO
FLD suma
FABS
FSUB ;OBTENER FRACCION
FABS
FSTP FRACT ;GUARDAR FRACCION
FWAIT
;MOSTRAR PARTE DE NUMERO ENTERO
MOV AX,WHOLE
MOV CX,0
MOV BX,10
DISP2:
INC CX
XOR DX,DX
DIV BX
ADD DX,'0' ;CONVERTIR A ASCII
PUSH DX
OR AX,AX
JNE DISP2 ;SI NO ES CERO
DISP3:
POP AX
CALL DISPS ;MOSTRARLO
LOOP DISP3
MOV AL,'.' ;MOSTRAR PUNTO DECIMAL
CALL DISPS
;MOSTAR PARTE DE FRACCION
MOV AX,WORD PTR FRACT
MOV DX,WORD PTR FRACT+2
MOV CX,8
DISP4:
SHL AX,1
RCL DX,1
LOOP DISP4
OR DX,8000H ;INSTALAR BIT IMPLICITO
XCHG AX,DX
MOV BX,10
DISP5:
MUL BX
PUSH AX
XCHG DX,AX
ADD AL,'0'
CALL DISPS
POP AX
OR AX,AX
JNZ DISP5
RET
DISP ENDP
CODE ENDS
END MAIN
Estamos aqui porque jamás terminaremos de aprender....
Super_G
Miembro MUY activo
Mensajes: 375
uso del coprocesador
«
Respuesta #3 en:
Jueves 25 de Septiembre de 2003, 00:37 »
0
Yo intente hacer un programa asi una ves pero no me parecio muy facil, al final solo hice un programa que muestre el resultado pero solo de forma binaria, falta la conversion a decimal
;;******************************
.model tiny
.code
.387 ;con esta directiva decimos que se usaremos el coprocesador matematico 80387
org 100h
inicio:
finit
fld n1 ;cargamos a ST(0) "n1"
fld n2 ;cargamos a ST(0) "n2", recorre la pila y "n1" pasa a ST(1)
faddp ;sumamos ST(0)+ST(1) y desempilamos en ST(0)
fst r ;almacenamos en "r"
fwait ;espera instruccion del procesador
;;***********mostrar EL RESULTADO en pantalla
mov si, offset r
mov di, offset resultado
mov bx,[si] ; en bx los 16 primeros bits de 23 de la "mantisa"
mov ax,[si+2] ; en ax estaran los ultimos 7 bits de la "mantisa" +los 8 bits del exponente + el bit de
shl ax,1 ; ponemos en el bit Carry el signo, y todo el exponente en ah
jnc p1 ; pasamos si es positivo
mov byte ptr [di],'-'
p1: sub ah,127 ;obtenemos el exponente real
;mov dh,ah ;salvamos exponente
;;********* solo tomaremo en cuenta 7 bist de la mantisa
mov cx,8 ;_
c1: shl al,1 ;
jc p2 ;
mov dl,30h ; '0' ;
jmp c2 ; } ponemos el binario de AL en [DI+3]
p2: mov dl,31h ; '1' ; /
c2: mov [di+3],dl ; /
inc di ; /
loop c1 ;-
;;*********ponemos el expoente en la cadena
mov cx,3 ;3 digitos en decimal max 255
xchg al,ah ;AL = expoente; AH = 0
mov bl,10
c3: div bl
add ah,30h ;convertimos a ASCCI
mov [di+8],ax
xor ah,ah
dec di
loop c3
mov dx, offset resultado
mov ah,9
int 21h
fin: int 20h
n1 dd 1.25 ;numero uno
n2 dd 2.25 ;numero dos
r dd 0.0 ;resultado
resultado db '+1. *2^ (RESUTADO EN BINARIO)','$'
end inicio
Imprimir
Páginas: [
1
]
« anterior
próximo »
SoloCodigo
»
Foros
»
Programación General
»
ASM (Ensamblador)
(Moderador:
Eternal Idol
) »
Re: uso del coprocesador