Ensamblador - sumar float en assembler

   
Vista:

sumar float en assembler

Publicado por axl (1 intervención) el 18/06/2010 18:57:11
Hola necesito una idea o algun codigo para sumar float en assembler.
trabajo con el emu 8086

ojala alguien por lo menos me de una idea ya que no se me ocurre como llevarlo a codigo fuente.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:sumar float en assembler

Publicado por José Antonio López (5 intervenciones) el 02/08/2010 19:39:48
Espero que te ayude este código, pero lo ideal es leer algún tutorial para entender todos los detalles. El código compila en masm32 y usa el coprocesador.
Si esto no es lo que buscas, perdona mi error.

.486
.model flat, stdcall
option casemap:none

include c:\masm32\include\masm32.inc

.data

;2 dobles palabras (enteros) con los datos para el primer cociente:
numeroa dd 6
numerob dd 3
;cuadruple palabra (real) en el que se guardará el resultado del primer cociente
numeroab dq 0
;2 dobles palabras (enteros) con los datos para el segundo cociente
numeroc dd 11
numerod dd 2
;cuadruple palabra (real) en el que se guardará el resultado del segundo cociente
numerocd dq 0
;doble palabrar (entero) donde se guardará la suma de los dos cocientes:
resultado dd 0
;palabra donde se guardará la palabra de control del fpu (floating point unit).
pc dw 0


.code
main:
;Inicio el fpu
finit
;Voy a hacer que el fpu redondee, al cambiar a entero, hacia cero:
;Para ello cambio los bits necesarios:
fstcw pc
lea eax, pc
or word ptr[eax], 0000110000000000b
fldcw pc
;cargo el primer entero
fild numeroa
;divido el dato que hay en lo alto de la "llamemos pila" del fpu entre el entero pasado como parámetro:
fidiv numerob
;El fpu trabaja en modo de número reales.
;Guardo el resultado del cálculo anterior en una cuadruple palabra (real) y lo quito de la pila de la fpu:
fstp numeroab
;Cargo el tercer entero:
fild numeroc
;Divido el tercer entero entre el cuarto. El resultado sustituye en el fpu al tercer entero.
fidiv numerod
;Guardo el resultado y lo elimino de lo alto de la pila:
;Podia haberlo dejado y usar "fadd numeroab".
fstp numerocd
;Cargo en lo alto de los registros del fpu un número en punto flotante.
fld numeroab
;Sumo al número que hay en lo alto del fpu otro número en punto flotante.
;Las operaciones con el fpu sólo se pueden hacer con direcciones de memoria.
;fadd eax no valdría, pero si valdría fadd [eax]
fadd numerocd
;Guardo el resultado como un entero de 32 bits (Los bytes que ocupa cada operando los determina el ensamblador
;por la definición del tipo:
fistp resultado
mov eax, resultado
;eax = 7
ret
end main
end
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar