Sei sulla pagina 1di 38

Instituto Tecnolgico de la Laguna

Nombre:

[Nmero de Control:]

Benavente Cadena Leopoldo Lpez Mena Mario Avisai Jasso Domnguez Dulce Karina Garca Flores Mara del Rosario

[08131252] [08131309] [08131331] [09130418]

Materia:

Lenguaje Ensamblador
Profesor:

Raymundo Jove Prez

Fecha:

12 de Diciembre de 2011

COOPROCESADOR MATEMATICO
El coprocesador trabaja internamente slo en formato real, por lo que cualquier carga en los registros de coprocesador provocar que dicho valor sea convertido a coma flotante. Sus registros estn estructurados en forma de pila y se accede a ellos por el nmero de entrada que ocupan en la pila. Los registros son R(0) hasta R(7), en total ocho registros de 80bits, como han de ser manejados en formato de pila, el coprocesador tiene un puntero de control de pila llamado St, Toda interaccin que tengamos que hacer con los registros del coprocesador se realiza a travs del puntero de pila St, donde el ltimo valor introducido es St o St(0) y si hubiramos rellenado todos los registros el ultimo seria St(7)... Por ejemplo: 1. Cargar en copro dato (1345) 2. ahora St(0)=1345 3. Cargar en copro dato (5431) 4. ahora St(0)=5431 y St(1)=1345 El coprocesador puede obtener y escribir datos en memoria de los siguientes tipos. Entero Words(16bits),Dword(32 bits),Qwords(64 bits) Real Words(16 bits),Dword(32 bits),Qwords(64 bits ),Twords(80 bits)

MASM 5.1
Los archivos fuente de cdigo ensamblador deben estar en formato ASCII estndar. Para esto puede usarse cualquier editor que permita crear archivos sin formato. Las declaraciones pueden ser introducidas en maysculas y/o minsculas. Una buena prctica de programacin es poner todas las palabras reservadas (directivas e instrucciones) en maysculas y todo lo del usuario en minsculas ara fines de facilidad de lectura del cdigo. Las sentencias pueden comenzar en cualquier columna, no pueden tener ms de 128 caracteres, no se permiten lneas mltiples ni cdigos de control, y cada lnea debe ser terminada con una combinacin de line-feed y carriage-return. Los comentarios se declaran con; y terminan al final de la lnea. El ensamblado se lleva a cado invocando al MASM. Este puede ser invocado, usando una lnea de comando, de la siguiente manera: MASM nomArchivo[,[objeto][,[listado][,[cross]]]]][opciones][;] Dnde:

Archivo Objeto Listado Cross

Corresponde al programa fuente. Por default se toma la extensin .ASM. Es el nombre para el archivo objeto. Nombre del archivo de listado de ensamblado. Es un archivo de referencias cruzadas.

Opciones4Pueden ser: /A: /S: /Bnum: /C: /L: /D: /Dsym: /Ipath: /ML: /MX: /MU: /N: /P: /R: /E: /T: /V: /X: /Z: escribe los segmentos en orden alfabtico escribe los segmentos en orden del fuente fija buffer de tamao num especifica un archivo de referencias cruzadas especifica un listado de ensamble crea listado del paso 1 define un smbolo que puede usarse en el ensamble fija path para buscar archivos a incluir mantiene sensibilidad de letras (mayus./mens) en nombres mantiene sensibilidad en nombre pblicos y externos convierte nombres a maysculas suprime tablas en listados checa por cdigo impuro crea cdigo para instrucciones de punto flotante crea cdigo para emular instrucciones de punto flotante suprime mensajes de ensamble exitoso despliega estadsticas adicionales en pantalla incluir condicionales falsos en pantalla despliega lneas de error en pantalla

Si l; al final se omite es necesario poner todas las comas que se indican. Si no se quiere poner algn valor basta con dejar la coma. La otra forma de invocar al ensamblador es sola tecleando MASM respondiendo a la informacin que se solicita. Para omitir algn valor solo basta teclear ENTER sin dar ningn valor.

ECUACION CUADRATICA
Una ecuacin de segundo grado o ecuacin cuadrtica, es una ecuacin polinmica donde el mayor exponente es igual a dos. Normalmente, la expresin se refiere al caso en que slo aparece una incgnita y que se expresa en la forma cannica:

Donde a es el coeficiente cuadrtico o de segundo general y es siempre distinto del nmero 0, b el coeficiente lineal o de primer grado y c es el trmino independiente. Expresada del modo ms general, una ecuacin cuadrtica en forma: es de la

Con n un nmero natural y a distinto de cero. El caso particular de esta ecuacin donde n = 2 se conoce como ecuacin bicuadrtica. La ecuacin cuadrtica es de gran importancia en diversos campos, ya que junto con las ecuaciones lineales, permiten modelar un gran nmero de relaciones y leyes.

TEOREMA DE PITAGORAS
El Teorema de Pitgoras establece que en un tringulo rectngulo, el rea del cuadrado de la hipotenusa (el lado de mayor longitud del tringulo rectngulo) es igual a la suma de las reas del cuadrado de los catetos (los dos lados menores del tringulo, los que conforman el ngulo recto). En todo tringulo rectngulo el cuadrado de la hipotenusa es igual a la suma de los cuadrados de los catetos. Pitgoras de Samos

Si un tringulo rectngulo tiene catetos de longitudes hipotenusa es c, se establece que:

a y b, y la medida de la

De la ecuacin (1) se deducen fcilmente 3 corolarios de aplicacin prctica:

EL programa principal se llama MENU.asm

CODIGO DE PROGRAMAS
Adya.asm
COMMENT * adya.asm * saca el valor del cateto adyacente DOSSEG PUBLIC _adya .MODEL Small .DATA ;Se define un segmento de datos. _acuad DQ ? _ccuad DQ ? _ady DQ ? _a DW ? .CODE _adya PROC push bp mov bp, sp

finit

fld DWORD PTR [bp + 4] fmul st,st fstp QWORD PTR _acuad fld DWORD PTR [bp + 8] fmul st,st fstp QWORD PTR _ccuad

fld QWORD PTR _acuad

fld QWORD PTR _ccuad fsub ST,ST(1)

FSQRT fstp QWORD PTR _ady

fwait

lea ax, _ady ;Se regresa la direccin de _res en AX (Es PROC NEAR) pop bp ret _adya ENDP END

Areatr.asm
COMMENT * areatr.asm * saca el area DOSSEG PUBLIC _areatr .MODEL Small .DATA ;Se define un segmento de datos. _mult DQ ? _cero DQ 0.0 _dos DQ 2.0 _bcuad DQ ? _res DQ ? .CODE

_areatr PROC

push bp mov bp, sp

finit

fld DWORD PTR [bp + 4] fld DWORD PTR [bp + 8] fmul st,st(1) fstp QWORD PTR _mult

fld _dos fld QWORD PTR _mult fdiv ST,ST(1) fstp QWORD PTR _res

fwait

lea ax, _res pop bp ret

_areatr ENDP

Hipo.asm
COMMENT * hipo.asm * saca la hipotenusa DOSSEG PUBLIC _hipo .MODEL Small .DATA ;Se define un segmento de datos. _acuad DQ ? _bcuad DQ ? _hipt DQ ? .CODE _hipo PROC push bp mov bp, sp finit fld DWORD PTR [bp + 4] fmul st,st fstp QWORD PTR _acuad ;El contenido del STACK se pasa a _res fld DWORD PTR [bp + 8] fmul st,st fstp QWORD PTR _bcuad fld QWORD PTR _acuad fld QWORD PTR _bcuad fadd ST,ST(1) FSQRT fstp QWORD PTR _hipt

fwait lea ax, _hipt ;Se regresa la direccin de _res en AX (Es PROC NEAR) pop bp ret _hipo ENDP END

Opue.asm
COMMENT * opue.asm * saca el cateto opuesto DOSSEG PUBLIC _opue .MODEL Small .DATA ;Se define un segmento de datos. _bcuad DQ ? _ccuad DQ ? _opu DQ ? .CODE _opue PROC push bp mov bp, sp finit fld DWORD PTR [bp + 4] fmul st,st fstp QWORD PTR _ccuad ;El contenido del STACK se pasa a _res fld DWORD PTR [bp + 8] fmul st,st

fstp QWORD PTR _bcuad fld QWORD PTR _ccuad fld QWORD PTR _bcuad fsub ST,ST(1) FSQRT fstp QWORD PTR _opu fwait lea ax, _opu ;Se regresa la direccin de _res en AX (Es PROC NEAR) pop bp ret _opue ENDP END

Fgraln.asm
COMMENT * fgral.asm *Obtiene la raiz de x basandose en la formula general DOSSEG PUBLIC _fgrn .MODEL Small .DATA ;Se define un segmento de datos. _bc DQ ? _dos DQ 2.0 _dosa DQ ? _cuatro DQ 4.0 _bm DQ ?

_ac DQ ? _cac DQ ? _resta DQ ? _res DQ ? _raizt DQ ? _raiz DQ ? .CODE _fgrn PROC

push bp mov bp, sp

;iniciamos con el coprocesador finit

;cargamos las variables en la pila fld DWORD PTR [bp + 8]

;empezamos con la raiz fmul st,st

;obtenemos b cuadrada fstp QWORD PTR _bc

;cargamos a y c fld DWORD PTR [bp + 4] fld DWORD PTR [bp + 12] fmul st,st(1)

fstp QWORD PTR _ac

;cargamos el cuatro y la multiplicacion de ac fld QWORD PTR _cuatro fld QWORD PTR _ac fmul st,st(1) fstp QWORD PTR _cac

;Restamos b cuadrada menos cuatro ac fld QWORD PTR _cac fld QWORD PTR _bc fsub st,st(1) fstp QWORD PTR _resta

;Sacamos la raiz cuadrada fld QWORD PTR _resta FSQRT fstp QWORD PTR _raiz

;cambiamos el signo a b fld DWORD PTR [bp + 8] FCHS fstp QWORD PTR _bm

;Restamos la raiz con b fld QWORD PTR _raiz fld QWORD PTR _bm FSUB ST,ST(1)

fstp QWORD PTR _raizt

;Multiplicamos 2 con a fld QWORD PTR _dos fld DWORD PTR [bp + 4] FMUL ST,ST(1) fstp QWORD PTR _dosa

;Dividimos la suma con 2a y mandamos el valor fld QWORD PTR _dosa fld QWORD PTR _raizt FDIV ST,ST(1) fstp QWORD PTR _res fwait lea ax, _res pop bp ret _fgrn ENDP END

Suc.asm
COMMENT *suc.asm *saca el numero de la sucesion DOSSEG PUBLIC _suc .MODEL Small .DATA ;Se define un segmento de datos.

_log1 DQ ? _uno DQ 1.0 _log2 DQ ? _log3 DQ ? _resta DQ ? _res DQ ? .CODE _suc PROC

push bp mov bp, sp sub sp, 100 ;iniciamos con el coprocesador finit

;log alquequeremosllegar - log inicio/logderazon

;cargamos las variables en la pila en este caso r fld QWORD PTR _uno;uno fld DWORD PTR [bp + 4];inicio FYL2X; Z = Y log2(X). toma X de ST y toma Y de ST(1). La pila es popeada, y el resultado, Z, remplaza a Y en ST fstp QWORD PTR _log1

fld QWORD PTR _uno;uno fld DWORD PTR [bp + 8];fin FYL2X; Z = Y log2(X). toma X de ST y toma Y de ST(1). La pila es popeada, y el resultado, Z, remplaza a Y en ST fstp QWORD PTR _log2

fld QWORD PTR _uno;uno fld DWORD PTR [bp + 12];razon FYL2X; Z = Y log2(X). toma X de ST y toma Y de ST(1). La pila es popeada, y el resultado, Z, remplaza a Y en ST fstp QWORD PTR _log3

;restamos logfin-loginicio fld QWORD PTR _log1 fld QWORD PTR _log2 FSUB ST(0),ST(1) fstp QWORD PTR _resta

fld QWORD PTR _log3 fld QWORD PTR _resta FDIV ST(0),ST(1) fstp QWORD PTR _res

fld QWORD PTR _uno fld QWORD PTR _res FADD ST(0),ST(1) fstp QWORD PTR _res

lea ax, _res mov sp, bp pop bp ret _suc ENDP

END

Fgralp.asm
COMMENT * fgral.asm *Obtiene la raiz de x basandose en la formula general DOSSEG PUBLIC _fgrp .MODEL Small .DATA ;Se define un segmento de datos. _bc DQ ? _dos DQ 2.0 _dosa DQ ? _cuatro DQ 4.0 _bm DQ ? _ac DQ ? _cac DQ ? _resta DQ ? _res DQ ? _raizt DQ ? _raiz DQ ? .CODE _fgrp PROC

push bp mov bp, sp

;iniciamos con el coprocesador finit

;cargamos las variables en la pila fld DWORD PTR [bp + 8]

;empezamos con la raiz fmul st,st

;obtenemos b cuadrada fstp QWORD PTR _bc

;cargamos a y c fld DWORD PTR [bp + 4] fld DWORD PTR [bp + 12] fmul st,st(1) fstp QWORD PTR _ac

;cargamos el cuatro y la multiplicacion de ac fld QWORD PTR _cuatro fld QWORD PTR _ac fmul st,st(1) fstp QWORD PTR _cac

;Restamos b cuadrada menos cuatro ac fld QWORD PTR _cac fld QWORD PTR _bc fsub st,st(1)

fstp QWORD PTR _resta

;Sacamos la raiz cuadrada fld QWORD PTR _resta FSQRT fstp QWORD PTR _raiz

;cambiamos el signo a b fld DWORD PTR [bp + 8] FCHS fstp QWORD PTR _bm

;Restamos la raiz con b fld QWORD PTR _raiz fld QWORD PTR _bm FADD ST,ST(1) fstp QWORD PTR _raizt

;Multiplicamos 2 con a fld QWORD PTR _dos fld DWORD PTR [bp + 4] FMUL ST,ST(1) fstp QWORD PTR _dosa

;Dividimos la suma con 2a y mandamos el valor fld QWORD PTR _dosa fld QWORD PTR _raizt FDIV ST,ST(1)

fstp QWORD PTR _res fwait lea ax, _res pop bp ret _fgrp ENDP END

Esfera.asm
COMMENT *esfera *volumen de la esfera DOSSEG PUBLIC _esfera .MODEL Small .DATA ;Se define un segmento de datos. _radioc DQ ? _cuatro DQ 4.0 _tres DQ 3.0 _res DQ ? _rcua DQ ? _rcu DQ ? _rcpi DQ ? _rhpi DQ ? .CODE _esfera PROC

push bp mov bp, sp

;iniciamos con el coprocesador finit

;4piradio3/3

;cargamos las variables en la pila en este caso r fld DWORD PTR [bp + 4]

;multiplicamos por si mismo para sacar el cuadrado fmul ST(0),ST(0) fstp QWORD PTR _radioc fld DWORD PTR [bp + 4] fld QWORD PTR _radioc fmul ST(0),ST(1) fstp QWORD PTR _rcu

;cargamos pi y radiocuadrado fld QWORD PTR _rcu FLDPI

;multiplicamos la pi por radiocuadrado fmul ST(0),ST(1) fstp QWORD PTR _rcpi

;cargamos 4 y rcpi fld QWORD PTR _rcpi fld QWORD PTR _cuatro FMUL ST(0),ST(1) fstp QWORD PTR _rcua

;cargamos rhpi fld QWORD PTR _tres fld QWORD PTR _rcua FDIV ST(0),ST(1) fstp QWORD PTR _res

lea ax, _res pop bp ret _esfera ENDP END

Conov.asm
COMMENT *cono *volumen del cono DOSSEG PUBLIC _conov .MODEL Small .DATA ;Se define un segmento de datos. _tres DQ 3.0

_res DQ ? _radioc DQ ? _radioh DQ ? _rhpi DQ ? .CODE _conov PROC

push bp mov bp, sp

;iniciamos con el coprocesador finit

;pi radio cuadrado altura / 3

;cargamos las variables en la pila en este caso r fld DWORD PTR [bp + 4]

;multiplicamos por si mismo para sacar el cuadrado fmul ST(0),ST(0) fstp QWORD PTR _radioc

;cargamos altura y radio cuadrado fld DWORD PTR [bp + 8] fld QWORD PTR _radioc

;multiplicamos la altura por radiocuadrado fmul ST(0),ST(1)

fstp QWORD PTR _radioh

;cargamos pi y radio por altura FLDPI fld QWORD PTR _radioh FMUL fstp QWORD PTR _rhpi

;cargamos rhpi fld QWORD PTR _tres fld QWORD PTR _rhpi FDIV ST(0),ST(1) fstp QWORD PTR _res

lea ax, _res pop bp ret _conov ENDP END

Circa.asm
COMMENT *circulo *area del circulo DOSSEG PUBLIC _circa .MODEL Small .DATA ;Se define un segmento de datos. _rcuad DQ ? _res DQ ? .CODE _circa PROC

push bp mov bp, sp ;iniciamos con el coprocesador finit

fld DWORD PTR [bp + 4];inicio FMUL ST(0),ST(0) FSTP QWORD PTR _rcuad

FLDPI FLD QWORD PTR _rcuad FMUL ST(0),ST(1) fstp QWORD PTR _res

lea ax, _res pop bp ret _circa ENDP END

Circp.asm
COMMENT *circulo *perimetro del circulo DOSSEG PUBLIC _circp .MODEL Small .DATA ;Se define un segmento de datos. _rcuad DQ ? _dos DQ 2.0 _dr DQ ? _res DQ ? .CODE _circp PROC

push bp mov bp, sp ;iniciamos con el coprocesador finit

fld DWORD PTR [bp + 4];inicio fld QWORD PTR _dos FMUL ST(0),ST(1) FSTP QWORD PTR _dr

FLDPI FLD QWORD PTR _dr FMUL ST(0),ST(1) fstp QWORD PTR _res

lea ax, _res pop bp ret _circp ENDP END

DIAGRAMAS DE FLUJO
Se presentan cada uno de los diagramas de flujo de los programas que hicimos.

adya

rea

Areacirc

cono

esfera

suma

Opue

Perimetrocirc

Sucesiones

Pantallas principales MENU

Uso de la funcin rea del triangulo

Potrebbero piacerti anche